AI技术评估框架与行业应用实践解析
2026/7/25 3:23:08
BLE(Bluetooth Low Energy,低功耗蓝牙)广播包(Advertising Packet)是 BLE 设备在广播信道上发送的数据包,用于向周围设备宣告自身存在、提供服务信息或建立连接。其结构遵循 Bluetooth Core Specification(通常参考 5.x 及以上版本)。
BLE 广播包由PDU(Protocol Data Unit)构成,而 PDU 分为两类:
我们关注的是Advertising PDU,其格式如下:
| Preamble (1 octet) | | Access Address (4 octets) | | PDU (可变长度,最多39字节) | | CRC (3 octets) |注意:Preamble、Access Address 和 CRC 是物理层(PHY)字段,实际广播内容主要在PDU字段中。
Advertising PDU 由Header(2 字节) + Payload(0~37 字节)组成:
| Header (16 bits) | Payload (0~37 bytes) || Bit 位 | 字段名 | 说明 |
|---|---|---|
| 0~3 | PDU Type | 广播包类型(如 ADV_IND、ADV_NONCONN_IND 等) |
| 4 | RFU | 保留位(应为 0) |
| 5 | TxAdd | 发送方地址类型:0=公共地址,1=随机地址 |
| 6 - RxAdd | 接收方地址类型(仅在定向广播中有效) | |
| 7~15 - Length | Payload 长度(单位:字节,最大 37) |
0000:ADV_IND(可连接的无定向广播)0001:ADV_DIRECT_IND(可连接的定向广播)0010:ADV_NONCONN_IND(不可连接的无定向广播)0011:SCAN_REQ(扫描请求,由扫描设备发出)0100:SCAN_RSP(扫描响应,由广播设备回应)0101:CONNECT_IND(连接请求)0110:ADV_SCAN_IND(可扫描的无定向广播)注意:有些 Type 是由 Central(中心设备)发送的(如 SCAN_REQ),不是广播包,但属于 Advertising Channel PDU。
Payload 内容根据 PDU Type 不同而不同:
| AdvA (6 bytes) | AdvData (0~31 bytes) || AdvA (6 bytes) | TargetA (6 bytes) || AdvA (6 bytes) | ScanRspData (0~31 bytes) |广播数据(最多 31 字节)由一个或多个AD Structure组成,每个结构格式如下:
| Length (1 byte) | AD Type (1 byte) | AD Data (Length - 1 bytes) || AD Type (Hex) | 名称 | 说明 |
|---|---|---|
| 0x01 | Flags | 标志位(如 LE Limited Discoverable Mode) |
| 0x02, 0x03 | 16-bit Service UUIDs | 完整/不完整的服务 UUID 列表 |
| 0x06, 0x07 | 128-bit Service UUIDs | 128 位服务 UUID |
| 0x09 | Complete Local Name | 完整设备名称 |
| 0x08 | Shortened Local Name | 缩短的设备名称 |
| 0x0A | TX Power Level | 发射功率(dBm) |
| 0x16 | Service Data - 16-bit UUID | 附带服务数据 |
| 0x21 | Service Data - 128-bit UUID | 128 位服务数据 |
| 0xFF | Manufacturer Specific Data | 厂商自定义数据 |
示例:设备广播名称 “MyBLE”
AD Structure =06 09 4D 79 42 4C 45
- Length = 6(1 字节 Type + 5 字节 Name)
- Type = 0x09(Complete Local Name)
- Data = ASCII("MyBLE")
[ADV_IND PDU] ├── Header (2B): Type=ADV_IND, TxAdd=1, Length=37 └── Payload (37B) ├── AdvA (6B): 随机地址 └── AdvData (31B): 多个 AD Structure ├── Flags (3 bytes) ├── Complete Local Name (6 bytes) └── Manufacturer Data (22 bytes)