首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从空中截获BLE数据包看蓝牙5协议流程第一部分:beacon广播

关注"无线技术联盟", 提供有价值的市场信息和最新的技术分析

今天Xcoder就尝试理论结合实践,讲一讲蓝牙协议的广播部分和beacon协议流程。(全文无一行代码...: ))

实验用到的工具:

蓝牙主机:TI BTool + CC2540 dongle

蓝牙从机:CC2541

抓包工具:TI Sniffer + CC2540 dongle

手机工具:BLE调试工具箱 (无线技术联盟微信公众号关联的蓝牙测试工具)

广播流程(理论过程)

蓝牙有三个广播信道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数据需要进行白化抗噪声处理,白化处理中在一段用原始数据亦或运算访问地址字符串,在另一端亦或运算还原数据。

3.Adv PUD type 广播类型,详细类型如下表所示。

4.Adv PUD Header 广播数据头,负责管理说明广播数据。

5.Adv A 从设备MAC地址。

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

还有一种随机地址,不是蓝牙MAC地址,是蓝牙4.2协议栈规定,防止设备被追踪设计的一直AdvA地址,但使用的很少。

6.AdvData 从设备广播数据,数据类型自行定义,ibeacon和eddystone有对该广播数据的格式有特定要求。

7. CRC效验。

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

到此,就可以看到蓝牙广播的真实空中数据格式如下所示::

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

2,Length 数据包长度整个蓝牙一包广播数据的长度。

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

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

5.Paylod广播数据。

6.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://kuaibao.qq.com/s/20180814G0R86R00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券