- 博客(30)
- 收藏
- 关注
原创 批处理指令常见问题
echo off:文件开头加这个,去掉回显, 加@本行回显也不显示变量使用:setlocal enabledelayedexpansion 设置变量作用范围DATE!!TIME!START_TIME!REM 这是一个注释,不用带引号START_TIME!endlocal 设置变量作用范围注释方法:REM: 这是一个注释:: 这是一个注释%这是一个注释%-d。
2025-08-20 18:13:50
322
原创 ble连接参数分析
如果需要进一步优化BLE连接,可以调整这些参数以适应具体应用场景(如传感器数据上报、音频传输等)。:从设备(Slave)在连接事件(Connection Event)期间可以发送数据的。:主设备(Master)每隔多长时间尝试与从设备(Slave)通信一次,单位是。决定从设备何时可以开始发送数据(相对于连接事件的起始时间)。较长的间隔 → 高延迟,但功耗低(通信不频繁)。从设备可以在窗口期内发送数据(如通知、指示等)。较短的间隔 → 低延迟,但功耗高(频繁通信)。开始可以发送数据(窗口打开)。
2025-07-16 15:46:30
894
原创 ble连接过程
/ 连接间隔(1.25ms单位)Peripheral通过LL_CONNECTION_PARAM_REQ发起请求。100ms [ATT_MTU_EXCHANGE] MTU协商。Central回复LL_CONNECTION_PARAM_RSP。双方通过LL_CONNECTION_UPDATE_IND确认更新。通过LL_ENC_REQ/LL_ENC_RSP交换随机数和IV。20ms [LL_FEATURE_REQ] 能力协商。50ms [LL_ENC_REQ] 加密请求。
2025-06-24 19:18:21
1135
原创 蓝牙ATT与GATT协议详解
ATT(Attribute Protocol,属性协议)和GATT(Generic Attribute Profile,通用属性规范)是蓝牙低功耗(BLE)技术中密切相关的两个核心协议,它们共同构成了BLE设备数据交换的基础。
2025-06-20 17:08:45
1174
原创 蓝牙协议L2CAP
位于基带(Baseband)协议之上,为上层应用提供灵活的数据传输服务。:若上层数据超过基带包大小(如DH5包最大1792字节),L2CAP将其拆分为多个基带包。加密由底层基带(BR/EDR)或链路层(BLE)实现,L2CAP处理明文数据。L2CAP建立CID=0x0040的信道(PSM=0x0003)。0x0001-0x00FF:蓝牙SIG标准服务(见蓝牙核心规范)。L2CAP通过CID=0x0004(ATT信道)传输心率数据。:无需建立连接,支持广播式通信(经典蓝牙中较少用)。
2025-06-12 15:14:04
1084
原创 经典蓝牙中的Sniff、Hold与Park模式
若主设备在Sniff Attempt窗口外发送数据,从设备无法接收,需依赖重传机制。移动时立即传输数据。:Sniff Interval=20ms,Attempt=1时隙。:传感器每2秒唤醒一次同步信标,主设备按需唤醒特定传感器采集数据。Slave进入Sniff模式:每20ms唤醒1个时隙监听数据。:设备需要短暂执行高优先级任务(如扫描其他蓝牙设备)。:无数据传输超时后,设备可能自动进入Sniff模式。:主设备通过信标唤醒从设备,或从设备主动请求退出(:平衡功耗与响应速度,适合间歇性数据传输设备。
2025-06-12 14:44:26
1294
原创 蓝牙协议LMP(Link Manager Protocol)
负责在经典蓝牙(BR/EDR)设备之间建立、配置和管理物理链路(ACL/SCO)。Device A → LMP_SCO_link_req (HV3包, CVSD编码) → Device B。Device A → LMP_features_req (EDR支持标志位=1) → Device B。Device B ← LMP_features_res (EDR支持标志位=1) ← Device A。Device A → LMP_EDR_3M_req (请求3Mbps速率) → Device B。
2025-06-12 14:10:26
1165
原创 SDP和GATT区别
例如:手机连接蓝牙耳机时,需动态查询耳机是否支持A2DP(高质量音频)或仅支持HSP(通话音频)。配对后,实际服务数据(如A2DP音频)才会加密。设备可以随时注册或注销服务(如关闭SPP串口功能),SDP能立即反映最新状态。对方支持哪些服务(如A2DP、HFP、SPP等),必须通过SDP主动查询。查询完成后,L2CAP信道释放,但ACL链路可能保持(用于后续服务连接)。(必选):协议栈信息(如L2CAP→RFCOMM→Channel 3)。支持分阶段查询(先搜索服务句柄,再获取具体属性),减少数据传输量。
2025-06-12 11:47:54
810
原创 蓝牙协议中L2CAP断连原因
L2CAP连接(CID=40, RFCOMM) → 传输数据 → 断开 → L2CAP连接(CID=50, AVDTP) → 传输音频...设备在配对后,会通过L2CAP通道(PSM=0x0001)发起SDP查询,获取对方支持的服务(如A2DP、HFP等)。不同厂商的蓝牙协议栈(如BlueZ、Broadcom)对L2CAP信道的管理策略可能不同,导致非标准行为。每个协议(如RFCOMM、AVDTP)需要独立的L2CAP信道(CID)。对实时性要求高的服务(如A2DP),配置设备避免休眠断开L2CAP。
2025-06-12 11:36:19
887
原创 经典蓝牙SDP
SDP(Service Discovery Protocol,服务发现协议)是经典蓝牙(Bluetooth BR/EDR)的核心协议之一,用于。它允许设备在连接之前了解对方支持的功能(如文件传输、音频流、串口通信等),从而建立正确的通信链路。:注册SPP服务(UUID 0x1101),指定RFCOMM通道号(如Channel 5)。:查询远程设备支持的服务(如A2DP、HFP、SPP等)。:获取服务的详细参数(如音频编码格式、串口波特率等)。:服务使用的协议栈(如RFCOMM、L2CAP)。
2025-06-12 11:06:24
1147
原创 经典蓝牙设备发现
主设备广播ID包 → 从设备回复FHS包 → 主设备生成设备列表。若未收到足够响应,可能触发多次Inquiry(默认最多3次)。:基于主设备地址和时钟生成,覆盖32个信道。:避免与Wi-Fi信道(1/6/11)冲突。:每次查询的持续时间(默认10.24秒)。:设备类型(如手机、耳机、电脑)。:两次查询之间的间隔(可配置)。:时钟偏移(用于快速连接同步)。:特定设备类型(如仅扫描耳机)。:从设备监听并响应查询请求。:发现周围可连接的蓝牙设备。:蓝牙设备地址(唯一标识)。:主设备主动扫描周围设备。
2025-06-10 15:48:57
621
原创 蓝牙协议结构
│ RFCOMM (BR) │ ATT/GATT (BLE) │ SDP (BR) │ ← 高层协议。│ (命令交互) │ (低功耗扩展) │ (LMP协议) │。│ (跳频/包处理) │ (连接/广播) │ (2.4GHz射频)│。│ (串口模拟) │ (服务发现) │ (服务发现) │。│ (分段/多路复用)│ (轻量化版) │ (安全管理) │。:基于BLE广播的组网协议。
2025-06-06 18:12:43
656
原创 经典蓝牙与le功耗差异
通过芯片工艺进步(如40nm制程)和协议优化(如BLE 5.0高速模式),两者功耗差距正在缩小,但根本设计差异仍存在。经典蓝牙的射频几乎持续工作(如通话时需维持SCO链路),而BLE仅在极短窗口收发数据(如每100ms激活2ms)。经典蓝牙每次收发需更长的射频准备时间,而BLE的物理层为快速唤醒优化(如传感器每10秒上报一次数据时优势明显)。传输1MB文件时,经典蓝牙需维持高功率射频处理分包,而BLE通过长间隔(如1s)分次传输,大幅降低平均功耗。设计(如传感器),通过“快速收发+深度休眠”实现超低功耗。
2025-06-06 17:47:20
531
原创 蓝牙的工作频率
基于连接间隔(Connection Interval)和跳频算法(如CRC16)选择下一个数据信道。理解蓝牙频率分配有助于优化连接稳定性(如部署AFH)和规避干扰(如避免与Wi-Fi同区域密集使用)。:通常占用信道1(2.412 GHz)、6(2.437 GHz)、11(2.462 GHz)。动态检测并避开Wi-Fi等干扰信道(如Wi-Fi常用信道1/6/11)。(37/38/39):固定用于广播和扫描,避开Wi-Fi常用信道。:使用5 GHz Wi-Fi(避免2.4 GHz频段竞争)。
2025-06-06 15:44:59
1921
原创 经典蓝牙连接过程分析
每个阶段依赖底层协议(如LMP、L2CAP)的协同工作。若遇到问题,需结合协议栈日志(如HCI snoop)逐步分析。选择认证模式(如Numeric Comparison)。:查询对方设备支持的服务(如A2DP、HFP)。给不同服务(如RFCOMM、AVDTP)。检查双方支持的配对模式(如SSP是否兼容)。:易受暴力破解攻击(如BIAS攻击)。请求(使用从设备的BD_ADDR)。:协商加密算法(如AES-CCM)。(包含设备地址、时钟等信息)。:建立物理信道(ACL链路)。请求(广播跳频信号)。
2025-05-30 19:24:32
1533
1
原创 芯片启动流程
Boot ROM(启动只读存储器)的启动流程是芯片上电后运行的初始阶段,其目的是初始化基本硬件并加载后续的启动代码。每一个芯片都有一个链接文件用来指示各个模块在sram中的地址空间,以IAR链接文件为例,这是芯片内置的rom空间,放置向量表,启动程序,代码段这是运行ram空间,用于存放数据,堆栈信息在使用以前需要确定对齐方式,堆栈大小如果想要某一个函数或者变量放在指定的位置,如下。
2025-04-08 20:06:43
841
原创 freertos常见问题
互斥信号量,有一个优先级的继承,低优先级阻塞高优先级时,优先级会拉高到跟高优先级一样的水平,运行顺序是低=》高=》中。二值信号量无法优化优先级翻转问题,低高优先级产生互锁,中等优先级会优先运行,运行顺序:中=》低=》高。任务阻塞可以使用二值信号量或者互斥信号量。1、优先级的翻转和继承。
2025-02-28 19:23:59
206
原创 iar raw binary image使用
可以断点调试或者打印的方式查看vpu_symbol是否是自己期望的bin文件内容。如extern char vpu_symbol[1024];在option->linker->input中输入以下内容。keep symbols里面的内容为了方便外部引用。在icf文件中设置链接属性。
2024-07-03 15:41:52
430
原创 git新建仓库流程
第一次上传代码以后,本地需要做一个关联动作git branch --set-upstream-to=remotes/origin/master (remotes/origin/master这一串字符是通过git branch -a查看的)git checkout -b "分支名" (git branch "分支名" git checkout "分支名")git push origin :"旧分支名"git push origin "分支名"git branch -m "新分支名"
2024-06-13 19:17:56
233
原创 git常见问题介绍
git fetch git rebase: 更新代码(同git pull),后面可以跟origin branch_name。git push origin HEAD:refs/for/branch_name: 针对没有自己远程仓库的开发模式。git push origin branch_name: 针对有自己远程仓库的开发模式。git merge branch_name: 合并分支修改内容。git stash list:查看缓存区的提交列表。git branch -a:查看所有分支。
2024-04-08 17:39:55
302
1
原创 ubuntu添加环境变量
export PATH=命令行路径:$PATH。#有效性:只在当前终端生效。#生效方法(有以下两种)#用户局限:对所有用户。#有效期限:永久有效。
2023-12-13 16:09:06
225
原创 windows与linux共享文件夹
虚拟机=》设置 打开界面,点击选项做如下配置,在windows下建立一个英文共享文件夹。在linux环境下输入cd /mnt一路往下寻找即可找到对应的共享文件。
2023-11-28 16:08:50
160
原创 UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0x80 in position 128: invalid start byte
python串口读取解析错误
2023-11-07 11:50:19
346
原创 SPI主从机测试总结
SPI收发同源,在波特率比较低的时候,1*1000*1000时,主机发送,紧跟着从机发送数据,此时,通过逻辑分析仪看到的结果是,主机能顺利拿到从机发送的数据。
2023-10-31 15:37:31
297
原创 I2C总线SCL或者SDA被拉低不能恢复问题解析
协议规定,SCL时钟和SDA数据线都必须是双向开漏结构的,通过总线上的上拉电阻拉到逻辑高电平,空闲状态SCL和SDA应该被上拉到高电平,这样的结构可以实现线与的操作SDA被拉低:主机会发送9个clk尝试拉高SDA,如果不能成功,需要硬件复位SCL被拉低:主机主动拉低SCL是合理的行为,在IP初始化配置的时候,可以选择时钟展频功能。如下图在从机访问地址与写入数据之间加入一点延时,就会出现SCL被主机拉低的情况其它情况的SCL拉低就要考虑代码实现是否合理了:1、I2C是否被意外关闭了。
2023-10-31 10:51:56
5660
1
原创 printf重定位
可以使用命令arm-none-eabi-objdump -dS image.elf > image.s,生成反汇编文件,查看汇编内容。1、使用-fno-builtin-printf,去除对printf的优化。printf(“hello\r\n”)会被替换成puts。2、使用如下命令,增加printf和puts的重定向。printf(“hello”)不会被替换成puts。printf在编译阶段有可能会被转化为puts。如果不想printf转化为puts有两种方法。
2022-10-10 17:43:06
468
1
原创 vs code常用插件安装
将vs code加入到鼠标右键,https://www.cnblogs.com/jswl/p/9935998.html 常用快捷键 ctrl + p (查文件) ctrl + f (查内容) 常用插件 c++ intellisense project manager git histroy Rainbow Brackets(彩虹括号,很好看) git graph GitLens Text Marker(Highlighter) Diff(功能类似于beyond ...
2021-05-06 15:41:43
713
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅