BLE(低功耗蓝牙)的 PHY(物理层)帧结构根据传输模式(广播、数据)和 PHY 类型(1M、2M、Coded PHY)有所差异,但基本框架一致。以下是 BLE PHY 帧的通用结构及各部分含义:
一、BLE PHY 帧的基本结构
BLE PHY 帧由 4 个核心部分组成,从发送到接收的顺序为:
前导码(Preamble)→ 接入地址(Access Address)→ PDU(协议数据单元)→ CRC(循环冗余校验)
字段 | 长度(比特) | 作用 |
---|---|---|
前导码 | 8(1M/2M PHY)或 16(Coded PHY) | 用于接收端同步(频率、时钟),区分帧类型。 |
接入地址 | 32 | 标识帧的归属(广播、连接、特定设备),用于帧同步和设备识别。 |
PDU | 可变(最长 255 字节,即 2040 比特) | 包含实际数据(广播信息、用户数据等),分广播 PDU 和数据 PDU。 |
CRC | 24 | 用于检测传输错误,接收端通过 CRC 校验判断帧是否有效。 |
二、各字段详解
1. 前导码(Preamble)
- 长度:
- 1M PHY 和 2M PHY:8 比特
- Coded PHY(S=2 或 S=8 编码):16 比特(因编码扩展,实际传输时对应 32 或 128 符号)
- 内容:
- 广播帧:前导码为
0xAA
(10101010),用于所有设备识别广播信号。 - 连接帧:前导码由接入地址的最低位(LSB)决定,若接入地址 LSB 为 0,则前导码为
0x00
(00000000);若为 1,则为0xFF
(11111111)。
- 广播帧:前导码为
- 作用:帮助接收端快速实现频率同步和符号定时同步。
2. 接入地址(Access Address)
- 长度:32 比特,无符号整数。
- 类型与含义:
- 广播接入地址:固定为
0x8E89BED6
,所有广播帧(如 ADV_IND、SCAN_REQ)均使用此地址,用于标识广播信道的帧。 - 连接接入地址:每个连接唯一,由主设备在建立连接时随机生成(32 比特),仅主从设备知晓,用于区分不同连接的帧,增强安全性。
- 定向接入地址:用于定向广播(如 ADV_DIRECT_IND),由目标设备的 BD_ADDR(MAC 地址)生成,确保仅目标设备响应。
- 广播接入地址:固定为
- 作用:帧同步(接收端通过匹配接入地址确认帧的开始)和设备 / 连接识别。
3. PDU(Protocol Data Unit,协议数据单元)
- 长度:可变,由 1 字节的 “长度字段”(Length)决定,最长 255 字节(即 2040 比特)。
- 结构:
- PDU 头(Header):2 字节(16 比特),包含类型(Type)、预留位(RFU)、长度(Length)等控制信息。
- PDU 载荷(Payload):0~255 字节,具体内容取决于帧类型:
- 广播 PDU(如 ADV_IND):包含设备名称、UUID、广播数据等。
- 数据 PDU(如 ATT、GATT 消息):包含用户数据或控制指令。
- 编码:在 Coded PHY 中,PDU 会经过卷积编码(S=2 或 S=8)扩展符号长度,提升抗干扰能力。
4. CRC(Cyclic Redundancy Check)
- 长度:24 比特。
- 生成方式:基于接入地址和 PDU 内容,通过多项式
0x00065B
(蓝牙规范定义)计算得出。 - 作用:接收端对接收的接入地址 + PDU 重新计算 CRC,与发送端的 CRC 比对,若不一致则判定帧错误并丢弃。
三、不同 PHY 类型的帧结构差异
PHY 类型 | 前导码长度 | PDU 编码方式 | 传输速率 | 适用场景 |
---|---|---|---|---|
1M PHY | 8 比特 | 无编码(1:1 映射) | 1Mbps | 通用低功耗场景(如智能手环) |
2M PHY | 8 比特 | 无编码(1:1 映射) | 2Mbps | 高速短距离传输(如耳机) |
Coded PHY | 16 比特 | S=2(500kbps)或 S=8(125kbps) | 500kbps/125kbps | 远距离 / 强干扰场景(如传感器) |
总结
BLE PHY 帧结构通过 “前导码 - 接入地址 - PDU-CRC” 的分层设计,实现了高效的同步、识别、数据传输和错误检测。不同 PHY 类型通过调整前导码长度和编码方式,平衡了传输速率、距离和抗干扰能力,适配多样化的低功耗蓝牙应用场景。具体细节可参考蓝牙核心规范(Core Specification)中 “PHY Layer” 章节。