蓝牙连接配对过程分析
1.经典蓝牙连接的过程
1.1 两个角色
master:拿着slave的连接地址,通过page (寻呼)发起对slave的连接
slave:处于page scan状态,收到连接事件后响应连接
耳机和手机都可以是master和slave,谁主动谁是master
1.2 page的设备在干嘛?
发送状态:往外发送固定频率的电磁波
接收状态:设置了固定的滤波器只接受固定的频率的电磁波
page的间隔固定是312.5us
可以简单的理解 master 的page 就是往外发送固定频率的电磁波,发完之后会进入接收状态
而slave的设置了固定的滤波器只接受固定的频率的电磁波,在接收到消息后进入回应状态
我们的bes对应的page 参数
#define BTIF_BT_DEFAULT_PAGE_SCAN_WINDOW 0x12
#define BTIF_BT_DEFAULT_PAGE_SCAN_INTERVAL 0x800
#define BTIF_BT_DEFAULT_INQ_SCAN_WINDOW 0x12
#define BTIF_BT_DEFAULT_INQ_SCAN_INTERVAL 0x800
#define BTIF_BT_DEFAULT_PAGE_TIMEOUT_IN_MS 5000
蓝牙协议文档中的说明,bes的设置 page scan interval 是1.28s
#define CFG_PAGE_TYPE 1
也就是说我们的bes的page是在1.28s的interval内有两次11.25ms的在固定频率持续扫描状态
连接的初步建立和Page Scan interval、Page Scan window、Page Scan Type的选择(为什么有的设备跟手机配对100次失败0-1次,有的确失败3-5次)-CSDN博客
假如master知道slave 的scan interval就会 128次的重复 train A,
1.3 page和page scan的电磁波频率是什么情况?
寻呼和寻呼扫描的跳频的32个频道是有寻呼扫描(耳机的地址决定的)
寻呼会按照1.28s内重复跳频128次16个频道(先根据之前的连接信息,推测一个目标设备的一个频道,以这个频道为中心的16个频道(train A),概率比较大),寻呼128次没有找到寻呼扫描的 设备,就会更换另外16个频道(train B)(概率比较小)
寻呼扫描会在1.28s内维持一个频道,按照32个频道的顺序来循环
1.4寻呼和寻呼扫描是如何保证一定能连接上的?
a. 寻呼和寻呼扫描的跳频的32个频道是有寻呼扫描(耳机的地址决定的)
b.寻呼会按照1.28s内重复跳频128次16个频道(先根据之前的连接信息,推测一个目标设备的一个频道,以这个频道为中心的16个频道,概率比较大),寻呼扫描会在1.28s内维持一个频道,按照32个频道的顺序来循环
寻呼128次没有找到寻呼扫描的设备,就会更换另外16个频道(概率比较小),在两个周期内必然会搜寻到
1.5 master和slave频率对上了后续会有什么通讯?
连接建立阶段的步骤如下图所示(与上图的step1-6对应):
(1)master处于page子状态,slave处于page scan子状态,master发送page message;
(2)当salve接收到page message后,会进入slave response状态,slave会发送response(接收到page message以后625us),salve发送response后的312.5us,slave会开始监听来自master的FHS数据包
(3)当master接收到response以后,master会进入master response状态,master会发送FHS数据包(包含了master的时钟、地址、COD等信息);发送FHS后,master会监听来自slave的response
(4)slave接收到来自master的FHS数据包,slave会回复一个response通知master接收到了FHS数据包。
(5)slave进入CONNECTION状态,master接收到slave的response后也会进入CONNECTION状态,然后master发送一个POLL数据包
(6)slave接收到POLL数据包后,可能回复任何类型的数据包。
————————————————
原文链接:https://blog.csdn.net/sui1005316018/article/details/118071872
1.6 如何避免两个不同的设备连上?
当master和slave 碰上了之后后续还要按照 slave addr的跳频序列来进行通讯,用两次三个通道的交互来确定
1.7 配对的过程是什么样子的?
配对对应的两个状态:
1.inquiry: 扫描状态,在我们的耳机使用场景中,只有手机会处在这种状态。会扫出附近的可配对设备
2.inquiry scan:被扫状态即我们平时说的耳机进入配对状态
过程与寻呼基本上一样,有以下区别
1.配对过程的固定频率是由0x9E8B33用于生成通用探询访问码(GIAC)生成
2.序列A ,B分别重复256次,时间最长的情况就是2.56x2s 约等于5s,虽然是这样但是在周围还有其他设备的情况下,在探寻(inquiry)到之后还要进行响应探寻到的设备,所以在多个蓝牙设备的环境中,扫描特定设备可能需要更长的时间
1.8 经典蓝牙连接和配对的理论最大时间
连接最差的情况是,寻呼在A序列的时候的最后一轮循环,寻呼扫描正好进入A序列的范围内,但是寻呼已经跳过这个频了,开始了B序列的循环,这种情况需要到寻呼这次B序列的第128次的循环才能匹配上,就是2.56s
.序列A ,B分别重复256次,时间最长的情况就是2.56x2s 约等于5s
在实际环境中可能其他page 的master 扫到了 slave,或者是由于电磁干扰导致没有扫到或者扫到之后的通信有问题,连接和配对需要更长的时间
1.9如何缩连接时间?
通过缩短page scan interval可以缩短时间,但会增大功耗,通常经典蓝牙一直处在可连接状态,要平衡功耗和连接时间
参考网站:
经典蓝牙基带技术规范(三): 寻呼扫描物理信道 - 知乎 (zhihu.com)
蓝牙连接时间的长度-CSDN博客
经典蓝牙(BR/EDR)控制器状态(三): 寻呼与寻呼扫描 - 知乎 (zhihu.com)
蓝牙模式-Inquiry and Page详细解析含参数_page timeout-CSDN博客
蓝牙设备发现与同步(page and page scan详解)-CSDN博客
蓝牙核心规范(V5.2)7.3-深入详解之GAP-云社区-华为云 (huaweicloud.com)
https://blog.csdn.net/sui1005316018/article/details/118071872
http://blog.chinaunix.net/uid-21411227-id-5715874.html