蓝牙协议系列之(八)BLE 报文结构

8 BLE报文结构

BLE报文结构如下,它由下图所示的各个域组成。因为有的域的长度超过了一个字节,所以在传输的过程中就涉及到多字节域中哪个字节先传输的问题,BLE报文传输时的字节序和比特序如下:


字节序:大多数多字节域是从低字节开始传输的。注意,并不是所有的多字节域都是从低字节开始传输的。

比特序:各个字节传输时,每个字节都是从低位开始。

蓝牙协议系列之(八)BLE 报文结构


8.1 BLE报文结构(前导/接入地址)

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

2 接入地址
  接入地址有两种类型:广播接入地址和数据接入地址。
广播接入地址:固定为0x8E89BED6,在广播、扫描、发起连接时使用。
数据接入地址:随机值,不同的连接有不同的值。在连接建立之后的两个设备间使用。
  对于数据信道,数据接入地址是一个随机值,但需要满足下面几点要求:
     1)  数据接入地址不能超过6个连续的“0”或“1”。
     2)  数据接入地址的值不能与广播接入地址相同。
     3)  数据接入地址的4个字节的值必须互补相同。
     4)  数据接入地址不能有超24次的比特翻转(比特0到1或1到0,称为1次比特翻转)。
     5)  数据接入地址的最后6个比特需要至少两次的比特翻转。

     6)  符合上面条件的有效随机数据接入地址大概有231个。


8.2 BLE报文结构(报头-1)

1 报头
报头的内容取决于该报文是广播报文还是数据报文。


1.1 广播报文报头
    广播报文的报头包含4bit广播报文类型、2bit保留位、1bit发送地址类型和1bit接收地址类型。
      1) 广播报文类型

          Core_v4.2的Core_v4.2的第2583页描述了广播报文类型,共有7种类型,如下图所示。

蓝牙协议系列之(八)BLE 报文结构

8.3 BLE报文结构(报头-2)

广播报文例子

1. 通用广播指示

蓝牙协议系列之(八)BLE 报文结构

2. 定向连接指示

蓝牙协议系列之(八)BLE 报文结构

2) 发送地址类型和接收地址类型

          发送地址类型和接收地址类型指示了设备使用公共地址(Public Address)还是随机地址(Random Address)。公共地址和随机地址的长度一样,都包含6个             字节共48位。BLE设备至少要拥有这两种地址类型中的一种,当然也可以同时拥有这两种地址类型。

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

随机地址:
随机地址有包含两种:静态地址(Static Device Address)和私有地址(PrivateDevice Address)。


8.4 BLE报文结构(长度)

广播报文:长度域包含6个比特,有效值的范围是6~37。
数据报文:长度域包含5个比特,有效值的范围是0~31。
  广播报文和数据报文的长度域有所不同,主要原因是:广播报文除了最多31个字节的数据之外,还必须要包含6个字节的广播设备地址。6+31=37,所以需要6比特的长度域。

  再次强调:广播时必须要包含6个字节的广播设备地址。


8.5 BLE报文结构(数据)

广播和扫面响应的数据格式如下图所示,由有效数据部分和无效数据部分组成。

蓝牙协议系列之(八)BLE 报文结构

1)  有效数据部分:包含N个AD Structure,每个AD Structure由Length,AD Type和AD Data组成。其中:
Length:AD Type和AD Data的长度。
AD Type:指示AD Data数据的含义。

  问题来了,我们怎么知道有哪些AD Type?他们又表示什么意义? 请看下一页。


8.6 BLE报文结构(Adv Data Types)

AD type的定义在程序的“gap.h”头文件中。定义如下:

蓝牙协议系列之(八)BLE 报文结构


8.7 BLE报文结构(校验)

BLE采用的是24位CRC校验。CRC对报头、长度和数据进行计算。24位CRC的生成多项式如下:

蓝牙协议系列之(八)BLE 报文结构


8.8 BLE报文结构(adv data分析)

接下来就是广播包最重要的部分了,称之为AdvData,前面我们说过AdvData是N个AD Structure组层成,每个AD Structure的格式都是Length |AD Type|AD Data组成。

蓝牙协议系列之(八)BLE 报文结构

0201061BFF570100A2E20AE20A75A161A187c7967856E24977C02EA055D085078

第一个字节02表示第一个AD Structure的长度是2个字节,即第一个AD Structure是由02加上紧跟着02后面的2个字节组成,因此,第一个AD Structure是:020106

蓝牙协议系列之(八)BLE 报文结构