连接建立之后,BLE通信便从广播信道切换到了数据物理信道。数据物理信道(Data Physical Channel)PDU是蓝牙通信中的核心组成部分,它负责在已建立的连接上高效、可靠地传输数据。
本文将深入拆解数据物理信道PDU的结构,并解释它是如何通过精巧的头部设计,实现对数据(LL Data PDU)和控制(LL Control PDU)的统一承载与管理。
1. 数据包 vs. 广播包
在BLE链路层中,无论哪种类型的空中包(Air Interface Packet),其外层结构都是一致的:前导码(Preamble)、接入地址(Access Address)、PDU和CRC。然而,正是接入地址(Access Address) 这个字段,决定了这个包是发给所有人的"广播包",还是只给特定对象的"数据包"。
-
广播包 :接入地址是固定值
0x8E89BED6,主要在3个广播信道(37、38、39)上传输,用于设备发现和广播数据。 -
数据包 :接入地址是一个32位的随机值 ,由连接发起方(Initiator)在建立连接时生成,并在数据信道(除37/38/39外的其余37个信道)上传输。每建立一次连接,这个接入地址都会重新生成,确保了连接的隐私性和唯一性。
一旦连接建立,通信双方便开始在数据信道上交换数据包。这时,PDU本身的结构就决定了它承载的是用户数据还是链路层控制信息。
2. PDU的整体结构
数据物理信道PDU由头部(Header) 、可变长度的有效载荷(Payload) ,以及可选的消息完整性检查(MIC) 字段组成。其头部可能是16位或24位,这取决于是否包含CTEInfo字段。

3. PDU头部(Header)
数据PDU头部的核心是16位(2字节) 的固定部分,之后可能紧跟着可选的CTEInfo字段。这16位的布局如下:


各字段含义如下:
| 字段 | 位数 | 描述 |
|---|---|---|
| LLID | 2 bits | 链路层标识符,这是最关键的字段,用于区分有效载荷的类型。 |
| NESN | 1 bit | 下一个期望的序列号,用于实现ACK和重传双重功能。 |
| SN | 1 bit | 序列号,用于区分是新数据包还是重传包。 |
| MD | 1 bit | 更多数据,指示发送端是否还有数据要发。 |
| CP | 1 bit | CTEInfo是否存在,为1时表示头部后紧跟CTEInfo字段。 |
| RFU | 2 bits | 保留供未来使用。 |
| Length | 8 bits | 有效载荷长度,范围0-255字节,但有效载荷实际最长251字节。 |
| CTEInfo | 8bits | 指示恒音扩展的类型及长度 |
3.1 LLID:区分"数据"与"控制"的关键
LLID(链路层标识符)决定了有效载荷的解析方式。根据LLID的值,数据物理信道PDU的有效载荷可以分为两种类型:
| LLID值 | 类型 | 描述 |
|---|---|---|
01 |
LL Data PDU | L2CAP消息的延续片段(Continuation fragment),或空PDU。 |
10 |
LL Data PDU | L2CAP消息的起始片段(Start of L2CAP message),或完整的非分片消息。 |
11 |
LL Control PDU | 链路层控制PDU,包含各种控制命令。 |
- LL Data PDU
当头部中 LLID 字段设为0b10时,LL数据PDU的长度字段不得设为0,也不得设为小于4的值。
- LL Control PDU

由Opcode和CtrData字段组成。对于给定的opcode,CtrData字段的长度是固定的。
其中Opcode包括:




3.2 NESN/SN:无额外ACK包的ARQ重传机制
BLE链路层通过NESN和SN两个1-bit字段,巧妙地实现了确认(ACK)和重传(Retransmission)的双重功能,而无需专门的ACK包。
-
SN(Sequence Number) :发送端使用。每发送一个新的 数据包,
SN翻转一次(0→1或1→0)。如果重传,SN保持不变。 -
NESN(Next Expected Sequence Number) :接收端使用。接收端通过
NESN告诉发送端,它期望 收到的下一个数据包的SN值。
其工作原理如下:
-
发送端发送 :发送一个
SN=X的数据包。 -
接收端回复 :如果成功收到,接收端在回复包中将
NESN设置为1-X(即期望下一个SN为1-X)。如果没收到,则NESN保持为X。 -
发送端判断 :发送端检查收到的回复包中的
NESN:-
如果
NESN == 1-X,说明包已成功接收,SN翻转,发送新包。 -
如果
NESN == X,说明包未被接收,SN不变,重传该包。
-
工作流如下图所示:

3.3 MD:让一个连接事件传输多个数据包
MD(More Data)位用于实现在一个连接事件(Connection Event)中传输多个数据包。
当一个设备还有数据要发送时,它会在当前数据包的头部将MD位置为1。接收端看到MD=1后,会继续保持射频窗口打开并回复一个包(可能是空包),从而允许发送端继续发送下一个数据包。这大大提高了单个连接事件内的数据吞吐量。

3.4 CP与CTEInfo:为"方向定位"预留的接口
CP(CTEInfo Present)位指示头部之后是否紧跟着一个CTEInfo(恒定音调扩展信息)字段。
-
CP=0:头部为16位,不包含CTEInfo字段,数据包也没有恒定音调扩展。 -
CP=1:头部扩展为24位,包含CTEInfo字段,并且数据包会包含恒定音调扩展(CTE)。


这个设计为蓝牙5.1引入的到达角(AoA)和离开角(AoD) 等高精度定位功能提供了支持。
4. 数据长度扩展(DLE)
在蓝牙4.2之前,数据信道PDU的有效载荷最大仅为27字节 。蓝牙4.2引入了数据长度扩展(Data Length Extension, DLE) 功能,将这一限制提升至251字节。
DLE通过LL_LENGTH_REQ和LL_LENGTH_RSP等控制PDU进行协商,允许连接双方动态调整各自发送和接收的最大数据包长度。这一特性显著提升了BLE的数据吞吐量。

5. 总结
数据物理信道PDU是BLE连接通信的基石。它的设计体现了极简与高效的哲学:
-
统一的头部设计 :通过
LLID一个字段,优雅地区分了"数据"与"控制"两种截然不同的使命。 -
无额外开销的ARQ :利用
NESN和SN两个1-bit字段,在不增加额外ACK包的情况下,实现了可靠的数据传输。 -
灵活的扩展性 :
CP位和CTEInfo字段为高级功能(如方向定位)预留了接口,而Length字段的扩展(DLE)则让BLE能够适应更高吞吐量的应用场景。
掌握了数据物理信道PDU的结构,就理解了BLE连接通信的核心运作机制。无论是应用数据的传输,还是连接参数的更新,都建立在这个精巧的PDU格式之上。