BLE入门 13 广播

广播流程(理论过程)

蓝牙有三个广播信道37,38和39,主机在这个三个信道上扫描是否存在从机广播广播数据,并可以提出扫描请求,流程图如下:


ADV_IND 广播数据
SCAN_REQ 扫描请求,由主设备(MASTER DEVICE)向从设备(SLAVE DEVICE)发出,目的是为了获得从设备的响应以得到更多的从设备广播数据信息(包括设备名字,或者服务UUID,及其它如厂家特定格式的信息(如硬件版本,软件版本号,设备系列号等等)。
SCAN_RSP 从设备对就主设备发起的SCAN_REQ的响应,作为广播包的补充,从设备可以给主设备更多的广播数据。比如说,有些设备在广播包里面没有设备名字,这个时候就可以把设备名字放在这个包里面发给主设备。

广播流程(实际数据)

打开 Btool (TI官方主机调试工具,下一篇文章会用到))或者 BLE调试工具箱 (无线技术联盟微信小程序,适用所有安卓和IOS系统)扫描从机设备:

打开微信公众号,点击 BLE调试工具箱,开启扫描功能。

利用TI抓包工具抓取空中蓝牙蓝牙数据包:

广播设备0x6EA7C219E3C9设备处于广播模式
广播数据为02 02 1A 0A FF 4C 00 10 05 0B 10 CE 27 2F
主机扫描请求SCAN_REQ,主机MAC地址为0x13AB0B272109
从机回应SCAN_RSP,回应的数据为空。
这就是一个完整的蓝牙广播和扫描流程。

协议分析

先从Sinffer图先来讲解蓝牙广播协议的专有名词:

  1. Channel 信道 抓包工具抓到空中的哪一个信道上的数据,0x25说明是37信道(蓝牙广播信道是37,38,39)。
  2. Access Address 访问地址

所有广播信道的访问地址是 10001110100010011011111011010110b(0x8E89BED6)
访问地址是一个非常有用一串字符串
射频TX,RX数据需要进行白化抗噪声处理,白化处理中在一段用原始数据亦或运算访问地址字符串,在另一端亦或运算还原数据。

  1. Adv PUD type 广播类型

    详细类型如下表所示:
  2. Adv PUD Header 广播数据头,负责管理说明广播数据。
  3. Adv A 从设备MAC地址。

公共地址由两部分组成,如下图。

公共地址由制造商从IEEE申请,由IEEE注册机构为该制造商分配的机构唯一标识符OUI(Organizationally Unique Identifier)。这个地址是独一无二,不能修改的。

还有一种随机地址,不是蓝牙MAC地址,是蓝牙4.2协议栈规定,防止设备被追踪设计的AdvA地址,但使用的很少。
  1. AdvData 从设备广播数据,数据类型自行定义,ibeacon和eddystone有对该广播数据的格式有特定要求。

  2. CRC效验。

上面是使用抓包工具抓出来的分析数据,真实数据我们可以通过工具下面的子菜单栏看到:

我们可以看到蓝牙广播的真实空中数据格式如下所示:
  1. Preamble 前导码。

前导是一个8比特的交替序列。他不是01010101就是10101010,取决于接入地址的第一个比特。若接入地址的第一个比特为0:01010101,若接入地址的第一个比特为1:10101010。接收机可以根据前导的无线信号强度来配置自动增益控制。

  1. Length 数据包长度 整个蓝牙一包广播数据的长度。

  2. Access Address,访问地址 0x8E89BED6。

  3. BLE Header 广播数据包头

解释说明该条数据为广播数据还是扫描数据,广播数据是可连接广播还是不可连接广播,还是定向广播类型。

  1. Paylod 广播数据。
  2. CRC效验。

    所以真实的主从数据交互流程如下:

蓝牙5广播数据

蓝牙4.x协议规定蓝牙广播数据包每包数据最大只支持31字节数据传输,广播信道限制在37,38,39三个信道。在原有的用于传输广播数据的PDU(ADV_IND、ADV_DIRECT_IND、ADV_NONCONN_IND以及ADV_SCAN_IND,称作legacy PDUs)的基础上,蓝牙5增加了扩展的PDU(ADV_EXT_IND、AUX_ADV_IND、AUX_SYNC_IND以及AUX_CHAIN_IND,称作extended advertising PDUs),同时也允许蓝牙在除开37,38,39三个通道之外的其他37个信道上发送长度介于0-255字节的数据。

蓝牙5.0把广播信道抽象为两类,一种叫主广播信道(primary advertisement channels),另一种叫次广播信道,或者第二广播信道(Secondary Advertising Packets)。

主广播信道只工作在37,38,39三个信道,最大广播字节为31字节,广播的数据类型增加了一个ADV_EXT_IND指令,ADV_EXT_IND指令即为告知监听设备,我要广播大数据包广播了。

ADV_EXT_IND指令包含要在第二类次广播信道上发送的内容,第二广播信道发送广播数据的信道,物理PHY层,1M PHY,Coded PHY,2M PHY 等。

其示意如下图所示,首先在主广播信道广播ADV_EXT_IND信息,然后利用次广播信道(0-36 channel)广播255byte 数据。

所以蓝牙5主从的广播交互流程可以用以下框图描述:

结论

无论是蓝牙4还是蓝牙5,广播的流程都是一样,广播,扫描请求,扫描相应的数据包格式也是一模一样,只是蓝牙5可以在非广播信道发送数据,蓝牙4.x只能在广播信道发送数据,蓝牙4.2广播数据只有31字节,蓝牙5广播有255字节。

参考:

https://mp.weixin.qq.com/s/J1iUnG44m0vI9Tc-tmmZpA

你可能感兴趣的:(BLE入门 13 广播)