本帖最后由 285454480 于 2017-9-15 15:16 编辑
4.1基础理论
每次扫描,设备会打开接收器去监听广播数据,称为一个扫描事件。扫描事件交替地发生在三个特定的广播信道:37,38,39,即第一次开始扫描是在37信道,第二次开始扫描是在38信道,第三次开始扫描是在39信道,第四次开始扫描是在37信道……扫描还有2个重要的参数:
扫描间隔:相邻2次扫描开始的时间间隔。
扫描窗口:每次扫描事件的持续时间。
这些扫描参数与广播间隔的关系见下图:
对应着广播数据和扫描响应数据,扫描也分2种,被动扫描和主动扫描。接收对端设备的广播数据,使用的是被动扫描。使用主动扫描可以接收对端设备的扫描响应数据,主动扫描就是向对端设备发起扫描请求,对端收到扫描请求后会发出扫描响应数据。扫描的过程如下:
注意:
1、主机不一定要发送扫描请求。
2、从机接收到扫描请求后,也可以选择不发送扫描响应数据。
4.2gBM01蓝牙模块的扫描控制
开始扫描命令
序号 命令ID 命令数据
任意 0x42 无
开始扫描后,模块会将扫描到的设备通过命令0x60进行上报。持续扫描一段时间后,扫描会自动停止,然后通过命令0x61上报扫描停止。
例子,开始扫描:A5 5A 00 02 78 42 BA
应答:
应答包中不包含应答数据。
上报扫描到的广播数据
序号 命令ID 命令数据(最多为38 bytes)
任意 0x60 MAC地址 信号强度 广播数据
6 bytes 1 byte的有符号数 n段D格式数据
使用命令0x42开始扫描后,模块会将扫描到的广播数据(不包括扫描响应数据)通过该命令进行上报。
n段D格式数据其实就是广播包中的数据,目前我们只需要关心以下几个类型的D格式数据。类型为0x02,表示广播服务的UUID;类型为0x08或0x09,表示广播名;类型为0xFF,表示广播的自定义数据。其他类型暂不用考虑。广播数据最大为31字节。
上报扫描停止
序号 命令ID 命令数据
任意 0x61 无
当开始用命令0x42开始扫描,一段时间后,模块会自动停止扫描,然后通过该命令进行上报。如果是使用命令0x43进行停止扫描操作,也会通过该命令进行上报扫描停止。
停止扫描命令
序号 命令ID 命令数据
任意 0x43 无
停止扫描操作完成后,模块会通过命令0x61上报扫描已停止。
例子,停止扫描:A5 5A 00 02 AB 43 EE
应答:
如果应答结果是成功,则没有应答数据;如果应答结果是失败,则有1字节的应答数据,表示失败的原因,1表示设备没处于扫描状态,不能进行停止扫描操作,2表示命令执行出错。
|