1. 通道(channel)
对于无线通信,数据是在某一频率上传输的,BLE采用频率是2.4GHz,频段范围是2.4000 GHz - 2.4835GHz,在这个范围内,又为40个通道,其中37,38,39通道是广播通道。其余37个通道是数据通道,如下图所示:
从图中可以看到,40个通道并不是线性递增分布的,3个广播通道是分散的,BLE数据传输过程中采用跳频技术,而跳频的计算要就要考虑跳过广播通道,3个广播分散的另一个好处就是有利于避开干扰。
如下图所示,广播通道避开了部分802.11WIFI信道,其仍然有9个数据通道和802.11不重合。
2. BLE设备之间交互的数据
在BLE设备建立连接之前,他们之间可以通过广播通道上(37,38,39 channel)交互数据,例如发送广播,扫描以及扫描回应,在建立连接之后,BLE设备之间在数据通道上交互数据。
BLE的数据可以概括为广播通道上传输的数据和数据通道上传输的数据:
-
广播通道PDU:在广播通道上传送的数据。
-
数据通道PDU:在数据通道上传送的数据。
3. BLE数据包结构
BLE规范中只有一个固定的包结构:
每一个包都有四个部分组成:
-
1-2字节的前导码preamble
-
4个字节的接入地址Access Address,
-
2-257个字节数据包PDU,
-
3个字节的PDU校验码 CRC
Preamble:用于频率的同步,时间估计以及自动增益控制(AGC)等,对于广播通道的数据,前导码为:0xAA,对于数据通道,前导码为0xAA 或者0x55,当接入地址的最低位是1时,前导码是0x55,否则为0xAA.
当是1M PHY时,preamble是一个字节;
当是2M PHY时,preamble是两个字节;
接入地址(Access Address):对于广播通道的数据,接入地址定义为0x8E89BED6,而对于数据通道的接入地址,每次设备建立连接时都不同,具体需要满足一定的规则,可以参考Version 4.2 [Vol 6, Part B] 2.1。接入地址和蓝牙地址是两个不同的概念,接入地址是为了同步用的,真正建立连接时使用的地址才是蓝牙地址。PDU: 分为两类:广播类型PDU (在广播通道上传送的PDU) 和数据类型PDU (在数据通道上传输的PDU) CRC: 是一个针对PDU校验的24位数据,CRC的算法定义可以参考PACKET FORMAT。4. BLE的PDU分类
BLE的PDU分为两类,广播类型PDU和数据类型PDU,结构如下:
PDU中前两个字节的是header,通过header的内容,就可展开PDU类型,分析具体的payload,在后面的章节中逐渐展开,例如,广播通道PDU进一步展开:
广播通道上的PDU数据总共有7个类型,分别为4 Advertising + 2 Scanning +1 Connect-request。
以此类推,就能分解出BLE所有的包。
我们先看看一个大的BLE PDU展开图:
进一步的,要分析广播通道上的PDU,先分析这个包属于哪一类PDU,在找到该类型的PDU数据结构,进而解析具体含义。