BLE中GAP层的广播数据格式

发布时间 2023-09-05 10:46:16作者: 不回本不改名

BLE中GAP层的广播数据格式

数据结构

广播包数据结构比较简单,示例结构如下:

Length Type Value
0x02 0x01 0x06
0x03 0x19 0x123456
......... ......... .........
0x04 0x08 0x54455354

为了方便理解,我们换个形式:

数据长度 类型
2个字节 广播类型 可连接非定向广播
3个字节 服务UUID 0x123456
......... ......... .........
4个字节 广播名 "TEST"

这里就看出来,每一层的{长度、类型、值}基本的格式组成了数据单位,一个广播数据包中通过多个这种数据组合而成。

这里要注意,Length算的是Type+Value的长度

总长度计算

在Legacy广播中,广播包长度固定为31个字节。这里的计算是要包括数据包所有内容的,计算方法为:

一个数据(1+Length个字节)=Length(1个字节)+Type(1个字节)+Value(Length-1个字节)

这里有一种快速计算广播数据长度的方法就是将每一层的Length的值加起来,再加上有多少层就可以得出总的广播数据长度,这个值要小于等于31字节。要注意这里是只算广播数据长度,如果你用某些手机软件直接搜蓝牙,读到的广播包数据超过了31个字节,而类型却还是属于legacy。那就说明他包含了扫描响应包的数据。

Type定义

​ 对于Advertising data type,他的具体定义不在core specification里,而是在Core Specification Supplement(CSS)文件中定义,他的序号分配在Assigned Numbers文件中划分。

​ 在Assigned Numbers文件中2.3 Common Data Types,他的部分划分如下:

​ 在CSS文件中Part A 1 DATA TYPES DEFINITIONS AND FORMATS中,对上面这些数据类型进行了说明。我们与Type值为0x01,代表Flag的类型举例:

​ 像上面举的例子,当Flags的值为0x06时,则Bit1和2置位,说明这个蓝牙广播属于LE广播,而且不支持BR/EDR。