蓝牙笔记
说明
- 本页汇总蓝牙测试, HCI 扫描参数和连接参数等常见基础概念.
- 适合作为 BLE 广播, 连接间隔, 超时和主从机角色的速查页.
蓝牙基本测试
蓝牙地址是: { 0xCC, 0x3B, 0xE3, 0x82, 0xBA, 0xC0 }, 实际MAC地址字符串为: C0:BA:82:E3:3B:CC
1, 被测设备开启广播 2, 测试设别扫描广播, 测得RSSI, 比较RSSI的阈值
HCI
上层的蓝牙协议栈, 会调用底层的 HCI层 实现上层的功能.
HCI层 (功能举例): 发送 设置扫描参数 发送 扫描使能
BLE HOST 扫描
扫描窗口(scan window): 一次扫描进行的时间宽度. 扫描间隔(scan interval): 两个连续的扫描窗口的起始时间之间的时间差, 包括扫描休息的时间和扫描进行的时间
这个窗口决定了扫描占空比, 如 扫描间隔为 100 ms, 扫描窗口为 10ms, 占空比为 10%, 这两个参数都要是 0.625ms 的整数倍.
占空比 最低为 0.4% ?
扫描设备一直在广播信道上运行
active: 是否主动扫描, 配置为1则是主动扫描, 0则是被动扫描
filter_policy: 扫描筛选策略, 也就是说接受任何广播数据或者仅仅接受白名单设备的广播数据包
timeout: 扫描超时, 超过指定的时间后, 没有扫描到设备将停止扫描
scan_phys: 扫描的物理层速度
connection interval
大数据传递时: 通讯数据包是连续传递的, 主机会选择 最小连接间隔 来进行通讯.
无数据传递时: 通讯是空闲状态, 主机会选择 最大连接间隔 来定期询问从机状态, 以保持连接不中断, (在空闲时, 由于使用 最大连接间隔 作为通讯周期, 会影响到程序的下一个命令的发送时间)
在实际应用的时候, 有时候需要发送数据快一点, 这个时候我们可以把连接间隔改小一点, 这样发送数据快, 但是功耗大, 当把数据发完的时候, 可把连接间隔改小一点, 这样可以降低功耗, 达到一个均衡, 比如穿戴设备连接上的时候, 可能需要快速把本地数据发给手机, 这个时候就可以把连接间隔设置小点, 传送完毕后间隔设置大点, 这样功耗就不会太大.
slave latency
Slaver设备没有数据要发时, 跳过一定数目的 ConnectionEvent的值, Rang: 0-499.
应用: 在距离远或者干扰大的时候 无数据通信的时候, 把这个值设大可以减少掉线概率
比如防丢器: 放在口袋里面假如这个参数设置为0 表示规定时间内必须响应从机, 不然就以为是蓝牙断开了, 假如设置为5, 假如信号不好的时候, 即使中间丢了4个, 只接受了1个就表示连接了, 因为他会跳过其中4个 , 保证了不掉线的概率
timeout
超时时间, 就是两个设备在连接的这段时间没有发生通讯而导致连接自动断开的值, Range(10ms—–32s)
连接超时时间, 用在信号不太好的情况下, 给对方一点时间, 超过这个时间通信就建立失败
主机与从机
主机决定连接参数的值 (connection interval, slave latency, timeout),从机可以请求更新这些参数,主机决定是不是接受,接受的值是多少。所以是会出现手机接受参数后和从机请求的参数有偏差,或者甚至是拒绝(ios)