- 博客(162)
- 收藏
- 关注
原创 BLE蓝牙中GATT和ATT的区别
ATT 和 GATT 的关系是基础与上层建筑。ATT 提供了“字节”如何传输的底层规则,而 GATT 则定义了这些“字节”如何被组织成有意义的“信息”。对于应用开发者而言,绝大多数时间是在与 GATT 层的服务和特征打交道,而 ATT 的细节则由协议栈在后台处理。
2026-10-27 09:58:57
147
原创 BLE 中的广播与连接详解
BLE中的广播(Advertising)与连接(Connection)是两种根本不同的工作模式。。它们的核心区别在于。
2026-10-27 09:54:27
260
原创 Stardock Fences,高效的桌面整理工具
链接: https://pan.baidu.com/s/19BBe-uqYoqhLgLRPItZQ-Q?pwd=ui6a 提取码: ui6a。
2026-10-10 16:48:33
39
原创 PD协议中DFP_U ,DFP_D , UFP_U , UFP_D这四种有什么区别
角色定义组织职能/含义典型设备DFP_UUSB-IF下行端口 (Downstream Facing Port)。这是USB主机端或集线器上连接下游设备的端口,负责发送数据。它对应基础的USB数据角色。电脑、电源适配器UFP_UUSB-IF上行端口 (Upstream Facing Port)。这是USB设备端连接主机或集线器的端口,负责接收数据。它也对应基础的USB数据角色。U盘、移动硬盘DFP_DVESA下行端口 (Downstream Facing Port)。
2026-03-03 10:09:36
1121
原创 蓝牙四种基本角色详解
它先广播自己的存在(此时它扮演了广播者的角色),等待被“顾客”(中央设备)连接。一旦连接建立,它就对外提供定义好的服务(比如心率数据、温度数据),并听从“顾客”的指令。它先扫描周围的广播(此时它扮演了观察者的角色),发现目标外设后,主动发起连接。连接建立后,它负责发现外设提供的服务,并主动读取、写入数据或订阅通知。等待指令、发送通知 <----- 请求数据、发送指令 -----> 读取心率、设置闹钟。手环转换为【外设】 <----------> 手机作为【中央设备】手机决定连接,发起请求。
2026-01-05 09:54:08
596
原创 低功耗蓝牙主机与从机四种数据交流方式
例如:智能锁上报“门已锁死”的状态、医疗设备上报一条重要的警报信息、需要保证顺序的传输。需要快速、连续下发的数据,且可以容忍偶尔丢失。开发者根据数据的重要性、更新频率和方向,从这四种基本操作中选择最合适的一种或组合,即可构建出高效的无线通信应用。:连接后,主机必须先在从机的特定描述符上写入一个使能值,告诉从机:“我准备好接收这个特征的通知了”。:数据推送的时机完全由从机(外设)控制,非常符合传感器的工作模式(有数据时才上报)。:每次读取都需要一对明确的请求和响应,主机可以立即知道操作是否成功以及获得数据。
2025-12-31 10:37:04
843
原创 低功耗蓝牙建立连接过程-详解
例如,连接间隔为20(即25ms),意味着主机和从机每25ms会在同一个数据信道上“碰头”一次,看看对方有没有数据要传。: 可以携带一些额外信息,例如它是什么类型的设备(如心率仪)、提供了哪些主服务(UUID)等。(如温度传感器): 使用较长的连接间隔(如1-2秒),并设置较高的从机延迟(如允许跳过9个事件),让传感器几乎一直睡眠。: 从机可以主动向主机发送数据(无需主机不断询问),这是BLE中最省电、最常用的数据推送方式(如心率仪持续上报心率)。好的,我们来深入剖析低功耗蓝牙(BLE)的连接建立过程。
2025-12-31 10:14:26
1331
原创 nRF52832——PPI 模块的应用
总而言之,nRF52832的PPI模块是一个高效的硬件自动化工具。对于希望优化nRF52832项目功耗和实时性的开发者来说,掌握PPI是进阶使用的关键。入门实践:可以从SDK中的或示例开始。深入掌握:动手实现一个简单用例,例如将一个按钮按下(GPIOTE事件)通过PPI直接控制LED亮灭(GPIOTE任务),能帮助你直观感受其工作原理。
2025-12-30 15:07:57
337
原创 PD协议DR-Swap,PR-Swap,VConn-swap,FR_Swap
层级与影响不同PR-Swap动的是“主粮”(VBUS),影响最大。DR-Swap动的是“指挥权”(数据流),与供电解耦。VCONN-Swap动的是“零食”(线缆供电),影响最小、最专一。触发逻辑不同PR/DR-Swap通常由应用需求触发(如需要反向充电、需要切换主机)。VCONN-Swap主要由协议管理需求触发(如DFP需要读取线缆信息)。相互独立但可组合这三种交换可以按需独立或组合发生,使一个Type-C接口能应对无数种连接场景。例如,一个扩展坞可能先通过PR-Swap从笔记本取电,再通过。
2025-12-09 17:12:50
1656
原创 区分PD协议中的Soft_Reset 、Data_Reset、Hard_Reset、Cable_Reset
你可以将Soft Reset理解为一次协议层的“刷新对话”。它专为解决“对话仍在继续,但双方记的对话次数对不上了”这类逻辑同步问题而设计,是维持PD连接长期稳定、智能管理的关键机制特性Data_Reset (数据重置)Soft_Reset (软重置)Hard_Reset (硬重置)本质协议层控制消息,专注于数据链路协议层控制消息,专注于协议状态物理层信令,终极恢复手段主要目的重置USB数据通信,并退出所有备用模式纠正协议错误,重新同步协议状态机和报文ID从严重故障中恢复,将连接。
2025-12-09 14:52:19
418
原创 沁恒开发板GPIO模拟IIC主机与IIC从机
直接上代码吧/*** @brief IIC延时函数,用于控制IIC读写速度* @param 无* @retval 无*//* 2us的延时, 读写速度在250Khz以内 */// 开漏输出/*** @brief 产生IIC起始信号* @param 无* @retval 无*/IIC_SDA(1);IIC_SCL(1);IIC_SDA(0);/* START信号: 当SCL为高时, SDA从高变成低, 表示起始信号 */IIC_SCL(0);
2025-10-16 11:35:08
384
原创 PD协议的BMC
1. 单线通信:CC线既要用于连接检测,又要用于高速数据通信。BMC的自带时钟特性省去了额外的时钟线。2. 可靠性:频繁的跳变便于时钟恢复和错误检测(缺失跳变)。3. 抗干扰性:对信号边沿的检测比绝对电平检测更可靠,特别是在有噪声的环境中。4. 直流平衡:有助于保持信号质量。5. 兼容性:能在相对低速的CC线上实现可靠的PD通信(直到PD 3.1才大幅提升速率)。BMC是USB PD协议栈物理层使用的核心编码技术。
2025-06-24 18:03:21
2441
原创 区分PD协议的SOP 、SOP‘ 、SOP“
信号名称通信方向目的主要接收者SOP标准起始包端口间核心功能协商(供电、数据)对端端口 (Source/Sink)SOP'主起始包Source端查询/配置线缆与Source相连的线缆插头SOP"双主起始包Sink端查询线缆与Sink相连的线缆插头简而言之,SOP 用于端口间对话,SOP' 和 SOP" 用于端口和它直接连接的那一端线缆插头之间的对话。这种区分确保了通信的有序性和准确性,是USB PD协议实现复杂协商和线缆管理的基础机制之一。
2025-06-24 17:14:28
1795
原创 SOP* 通讯
当没有契约或者默认契约关系在工作时(例如.在 PRS 或者 FRS 之后)SRC(既可以是 DFP 也可以是 UFP,但必须是 VCONN SRC)可以用 SOP’的包来与 Cable Plug 进行通讯,以此来发现并获得它的特性。SNK 是不会和 Cable Plug 进行通讯的,即使它是 DFP,也要丢掉任何收到的 SOP’类型的包。SOP Message 是用来识别是否是 SRC 和 SNK 端口的信息交互(SOP 交互)还是对一端为 Cable Plug 的信息交互(SOP’ /SOP”)。
2025-06-24 16:16:58
1048
原创 PD 协议的Source(源端)和Sink(受电端)详细说明
对于DRP设备,它会周期性地在Rp和Rd之间切换(Toggle),直到检测到连接(检测到Rd或Rp),然后锁定在检测到的角色上。每个组合包含:电压值(如5V, 9V, 15V, 20V)、最大电流值(如1.5A, 3A, 5A)和/或最大功率值(如27W, 45W, 65W, 100W)。消息,确认电压已切换。供电参数(电压、电流、功率)和角色(Source/Sink)在连接期间可以根据需要重新协商改变。如果检测到高电压(Rp上拉),则判定没有连接或连接了不支持PD的设备(如USB 2.0设备)。
2025-06-21 11:17:34
3732
原创 使用WinUSB读写USB设备
参考:IT老王:Android Studio连接手机详细教程_怎么在android studio连手机到开发者模式-优快云博客
2025-06-17 11:46:17
522
原创 win11无法打开.bat文件、打开.bat文件闪退解决方案,星露谷smapi mod安装时,.bat安装文件一闪而
参考:win11无法打开.bat文件、打开.bat文件闪退解决方案,星露谷smapi mod安装时,.bat安装文件一闪而过_win11运行bat文件一闪而过-优快云博客
2025-06-07 17:34:29
1198
原创 关于堆、栈、堆栈、队列的区别
关于堆栈的讲解(我见过的最经典的)-优快云博客 参考:什么是“堆”,"栈","堆栈","队列",它们的区别 - GuoXY - 博客园
2025-06-05 14:29:34
293
原创 使用libUSB-win32的简单读写例程参考
调用usb_find_busses、usb_find_devices和usb_get_busses这三个函数,获得已找到的USB总线序列;然后通过链表遍历所有的USB设备,根据已知的要打开USB设备的ID(VID/PID),找到相应的USB设备.调用 void usb_init(void);USB上位机程序的编写,函数的调用过程.调用usb_open函数打开该USB设备。
2025-05-14 11:44:05
864
原创 VS打印printf、cout或者Qt的qDebug等传出的打印信息
4、在命令行的右边空白处添加“editbin /SUBSYSTEM:CONSOLE $(OUTDIR)\$(ProjectName).exe”,点击确定。5、以上4步就已经ok了,此时运行你的程序,会多弹出一个黑色命令行的提示框,用来输出你的打印信息。2、鼠标移动到你的项目名称上,点击鼠标右键,再点击属性,此刻会此项目的属性页。3、在配置属性中,找到生成事件,在找到后期生成事件。1、在vs中打开你的解决方案。
2025-05-14 11:14:44
674
原创 keil5软件程序报错,但是编译没有问题
就是把 点击Edit->configuration, 在configuration对话框点击第五个选项卡Text Completion, Dynamic Syntax Checking 下面的Enable框去掉勾即可。本来就是动态语法检测,不能去取消的。1. 看看程序路径有没有中文。2.网上看到的第2种的方法,
2025-03-17 09:33:43
1084
原创 STM32的Systick定时器的作用
SysTick(System Timer)是ARM Cortex-M系列微控制器中的一个系统定时器,用于提供一个简单的时间基准。SysTick包括一个24位的向下计数器,当计数器从设置的初值减到零时,会产生一个SysTick中断。SysTick可以用作通用的定时器。你可以配置SysTick定时器产生一个中断,然后在中断处理程序中执行特定的任务。这种心跳信号可以用于操作系统的任务调度,定时任务的触发,或者用来监控系统的健康状态。通过配置SysTick的计数值和时钟源,你可以产生精确的毫秒级或微秒级延时。
2025-03-10 15:24:32
554
原创 C/C++ 中 volatile 关键字详解
volatile 指出 i 是随时可能发生变化的,每次使用它的时候必须从 i的地址中读取,因而编译器生成的汇编代码会重新从i的地址读取数据放在 b 中。而优化做法是,由于编译器发现两次从 i读数据的代码之间的代码没有对 i 进行过操作,它会自动把上次读的数据放在 b 中。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。当要求使用 volatile 声明的变量的值的时候,系统总是重新从它所在的。读取数据,即使它前面的指令刚刚从该处读取过数据。
2025-02-21 18:15:01
619
原创 Android依赖引入或执行报错
参考:2022.3.1版本 Android依赖引入报错_unexpected tokens (use ';' to separate expressions-优快云博客
2024-12-13 14:09:44
254
原创 Android开发中Button背景颜色不能修改问题及解决方法
出现该问题的原因主要是因为使用Android Studio 4.1之后的版本进行开发时,创建的项目默认的主题所有Button都是Material类型的Button,默认使用主题色,所以想要修改颜色,就要把默认主题给关了或替代了。改为-------->
2024-12-13 10:28:44
941
原创 Android——android相对布局(RelativeLayout)及各属性
参考:Android——android相对布局(RelativeLayout)及属性 - 艺言弈行 - 博客园 (cnblogs.com)
2024-12-02 18:26:17
475
原创 安卓-碎片的使用入门
可以说这样写代码的好处是不会IDE是不会报错引用错误,坏处是和程序的执行顺序正好相反,但是如果你深谙代码的执行逻辑,首先就是在activity_main文件中通过android:name来引用这个碎片类,一步步你想思维,我想可能也是一个写Android代码的好思维方式。说实在的,这个问题并没有看上去那么复杂,它的基本思路非常简单,首先在一个碎片中可以得到与它相关联的活动,然后再通过这个活动去获取另外一个碎片的实例,这样也就实现了不同碎片之间的通信功能,因此这里我们的答案是肯定的。
2024-11-29 17:15:53
1544
原创 Android按键点击事件三种实现方法
由于没有onclick这个函数,onclick下面会提示红色波浪线错误,然后单击一下"onclick"按住键盘上Alt+Enter键,选择在activity中生成函数。添加这两行代码时会发现"this"是红色的,需要点击"this"按住键盘上Alt+Enter键第二个指示生成所需要的函数。这边提一句:新版的android好像不能用switch,所以就用了if语句。之后重写onClick函数。
2024-11-27 18:58:17
1634
原创 [Android Studio] layoutUI显示顶部标题栏以及常用的标题修改
Studio(2.24.1.2)创建的Empty Views Activity没有标题栏。2.2 在MainActivity.java文件中,使用。把最后的 ".NoActionBar"去除就可以了。解决办法:修改res/values/themes。如果两个同时使用,第二个优先级更高。setTitle修改。
2024-11-27 16:14:39
940
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
2