BLE中GAP层的广播数据格式

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。

posted on   不回本不改名  阅读(382)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示