介绍
蓝牙技术联盟(Bluetooth SIG)为不同的应用场景定义了两种蓝牙数据结构,经典蓝牙(Bluetooth Classic)与低功耗蓝牙(BLE)。
经典蓝牙
Bluetooth Classic无线电,也被称为Bluetooth 基本速率/增强数据速率(BR/EDR),是一种低功率无线电,在2.4GHz非授权工业、科学和医疗(ISM)频段的79个频道上进行数据流。支持点对点设备通信,Bluetooth Classic主要用于实现无线音频流,已成为无线扬声器、耳机和车载娱乐系统背后的标准无线电协议。Bluetooth Classic无线电还能实现数据传输应用,包括移动打印。
低能耗蓝牙
Bluetooth 低能耗(LE)无线电是为非常低的功率操作而设计的。Bluetooth LE无线电在2.4GHz非授权ISM频段的40个信道上传输数据,为开发者提供了巨大的灵活性,以构建满足其市场独特连接要求的产品。Bluetooth LE支持多种通信拓扑结构,从点对点扩展到广播,最近又扩展到广播。 mesh,使Bluetooth 技术能够支持创建可靠的、大规模的设备网络。虽然最初以其设备通信功能而闻名,但Bluetooth LE现在也被广泛用作设备定位技术,以满足对高精度室内定位服务日益增长的需求。Bluetooth LE现在包括一些功能,使一个设备能够确定另一个设备的存在、距离和方向。
低功耗蓝牙数据包结构
蓝牙LE未编码物理层(Uncoded PHY)
数据包包含四个必选字段Preamble(前导码), AccessAddress(接入地址),PDU(数据),CRC。其中Constant Tone Extension是可选的。
前导码(Preamble):前导码是0,1交替的位数据,如01010101(0x55) 或者10101010(0xAA),长度为1字节或者2个字节,由传输模式确定。LE 1M PHY 模式前导码为1个字节,LE 2M PHY前导码分别为2字节。
这段序列之所以非常重要,是因为芯片必须能够应对输入信号强度的可能范围。接收机需要应付 -10dBm到-90dBm的信号强度,也就是80dB的动态范围。从接收机的角度讲,也就是1pW到0.1pW的能量。自动增益控制器必须检测出输入信号的能量等级,并调整增益,使得信号刚好处于接收机能够轻容工作的范围之中。
访问地址(Access address):接入地址的第一个比特决定了前导是01010101还是10101010。如果接入地址的第一个比特为0,则使用01010101序列;如果是1则使用10101010序列。这保证了任一报文的前9个比特都是交替的,即要么为101010101要么为010101010。
LL层使用接入地址来区分当前发送的数据是广播包还是数据包,广播包接入地址固定为0x8E89BED6,数据包使用是在连接时生成的接入地址。
- 连接时主设备分配一个32位的随机数并发送给从设备,这就是接入地址。
- 接入地址被用来表示一个连接,在连接期间保持不变。
- 对于同一个从设备,断开从新连接接入地址也会重新生成。
协议数据单元(PDU):根据使用的通道不同可以分为广播报文和数据报文。广播报文在广播通道上传输(37, 38, 39), 数据报文在数据通道上传输(0到36)。
协议上对于BLE4.0/BLE4.1 上层协议(LL)最大可以包含39字节,但是更新后的BLE4.2/BLE5.0 直接升级硬件,将这一长度扩展到257。但是默认了兼容BLE4.0/4.1还是采用了上面的39设计。
注意:PDU的最大长度直接由硬件决定,也是限制我们BLE 数据包大小的根本原因。
CRC:校验
广播通道PDU
下图为广播通道数据格式
数据包由16位的头和1~255字节的载荷组成
PDU Type(4bit) 广播报文类型
- ADV_IND,通用广播,外设发出的一般称为通用广播,广播中包含mac地址设备名字等信息。
- ADV_DERECT_IND,定向广播,某个外设在工作的时候就希望某个主设备来连接它,就可以向这个中央设备发起一个定向广播。
- ADV_NONCONN_IND,不可连接的广播,比如货架上的广告机,会不断的向外发送广播信息。
- SCAN_REQ,扫描请求,当中央设备发现通用广播中包含的信息并不全,这个时候主设备可以发一个扫描请求。
- SCAN_RSP,外设响应主设备的扫描请求,返回给中央设备更多的信息。
- CONNECT_REQ,连接请求,当主设备得到足够的信息之后就可以发送一个连接请求。来建立连接。
- ADV_SCAN_IND,可发现广播,包含了比通用广播更加丰富的信息。
- ADV_EXT_IND, 通用扩展广播
- AUX 开头的广播类型和ADV_EXT_IND是蓝牙5.0新引入的,暂且不表。
数据通道PDU
包头(header)
- LLID(2bit),逻辑链路标识符,用来判断数据报文属于下列哪种类型
0b00, 保留
0b01, 来自L2CAP的延续帧,或者是一个空包。
0b10, 来自L2CAP的开始帧,或者是一个完整的报文。
0b11, 控制报文。 - NESN(1bit),预期序列号
- SN(1bit),序列号
- MD(1bit),更多数据
- CP(1bit),是否包含CTEinfo
- RFU(3bit),保留
- length(8bit),长度
- CTEinfo(8bit), 指明Constant Tone Extension的类型和长度
数据载荷(Payload)
消息完整性检查(message integrity check,MIC)
标准蓝牙数据包结构
数据包结构
BR模式数据包格式如下
EDR模式数据包格式如下
访问码(Access Code)
头(Header)
名词解释
Uncoded PHY:传送数据的时候,数据实打实的,未经过额外的编码的
空口包:在空中传输的数据(Air Interface packets)
参考
BLE 链路层(LL)的数据结构
https://ww2.mathworks.cn/help/bluetooth/ug/bluetooth-packet-structure.html#mw_a3c3f34d-47e4-4b1f-ab96-1a66a338c335
BLE 蓝牙抓包分析