在BLE通信中,我们讨论的PDU(协议数据单元)在通过天线发送之前,需要经历一个关键的"预处理"环节------比特流处理(Bit Stream Processing)。这个过程决定了数据包在空口传输的可靠性、安全性和物理兼容性。
1. 比特流处理流程
在链路层,PDU从组装完成到发送,以及从接收到还原,分别要经过一套完整的处理流水线。发送和接收的处理流程是互逆的。
LE Uncoded PHY(LE 1M / LE 2M)的处理流程如下:

LE Coded PHY的处理流程如下:

2. 错误检查:接入地址与CRC
在接收数据包时,链路层会依次进行两级错误检查:
第一步:检查接入地址(Access Address)
如果接入地址不正确,数据包直接被拒绝。这一步是物理层的"门禁",只有地址匹配的包才能进入后续处理。
第二步:检查CRC
如果CRC不正确,数据包被拒绝;只有CRC校验通过,数据包才被认为是有效的。唯一的例外是,即使CRC错误,接收机仍可能需要进行IQ采样(用于方向定位等场景)。
2.1 CRC生成
CRC是保证数据完整性的核心机制。BLE使用24位CRC,其生成多项式为:

CRC计算覆盖PDU中的所有比特,从最低有效位(LSB)开始按传输顺序处理 。CRC的计算在加密之后进行(如果PDU被加密的话)。
CRC初始值的设定因PDU类型而异:
-
数据信道PDU和CIS PDU :使用在
CONNECT_IND或AUX_CONNECT_REQ中传输的CRCInit值 -
AUX_SYNC_IND及其子集:使用SyncInfo字段中的CRCInit值
-
广播物理信道PDU :初始值固定为
0x555555 -
BIS PDU:初始值由BIGInfo中的BaseCRCInit和BIS_Number共同决定
-
BIG Control PDU:最低有效字节为0
CRC的传输顺序 是最高有效位(MSB)先传输,即从位置23到位置0。这与PDU其他字段的LSB-first传输顺序不同,需要特别注意。
3. 数据白化
3.1 为什么要白化?
如果原始数据中出现长串连续的0或1(如0b00000000或0b11111111),会导致:
-
载波频偏检测困难,降低接收端灵敏度
-
信号频谱能量分布不均,增加干扰
-
调制器在某些位模式下产生失真或功率峰值
白化(Whitening) 通过对数据进行随机化处理来解决这些问题。
3.2 白化的实现原理
白化使用一个7位线性反馈移位寄存器(LFSR),其生成多项式为:
工作原理:
-
发送端 :LFSR生成伪随机序列,与原始数据按位异或(XOR),达到数据"搅乱"的效果
-
接收端 :使用相同的LFSR和初始化参数,对接收数据再次XOR,即可恢复原始数据(去白化)
白化作用于PDU和CRC,在发送端CRC生成之后进行,在接收端CRC检查之前进行去白化

3.3 LFSR初始化
白化LFSR的初始化序列来源于物理信道索引:
-
位置0:固定设置为1
-
位置1~6:设置为发送或接收时使用的信道索引(MSB在位置1,LSB在位置6)
例如,信道索引为23(0x17)时,各位置设置为:
Position 0 = 1
Position 1 = 0
Position 2 = 1
Position 3 = 0
Position 4 = 1
Position 5 = 1
Position 6 = 1
这种信道相关的初始化确保了不同信道上使用不同的白化序列,进一步降低了信道间的干扰。
4. 编码(Coding)
编码(Coding)只在LE Coded PHY中应用 。它通过增加冗余信息,让接收端即使在信号较弱、存在较多比特错误的情况下,仍能恢复出原始数据,从而实现更远的通信距离。
编码分为两个阶段:
4.1 前向纠错(FEC)编码器
FEC编码器使用约束长度K=4 的非系统、非递归率1/2卷积编码。两个生成多项式为:
来自G₀的比特(a₀)首先被发送,来自G₁的比特(a₁)第二顺位发送。FEC编码器的初始状态设置为全0,连续输入三个0的序列会使编码器恢复到初始状态(终止序列)。

4.2 模式映射器(Pattern Mapper)
模式映射器将FEC编码器的每个比特转换为P个符号,P的值取决于使用的编码方案:
-
S=2编码:每个比特映射为2个符号(数据速率500 kb/s)
-
S=8编码:每个比特映射为8个符号(数据速率125 kb/s)
编码指示符(CI)在FEC Block 1中传输,告知接收端FEC Block 2使用的是S=2还是S=8编码。

5. 总结
| 处理阶段 | LE Uncoded PHY | LE Coded PHY | 主要作用 |
|---|---|---|---|
| CRC生成 | ✅ | ✅ | 24位校验,检测数据传输错误 |
| 加密 | 可选 | 可选 | 保护数据机密性 |
| 白化 | ✅ | ✅ | 避免长串0/1,改善频谱分布 |
| FEC编码 | ❌ | ✅ | 增加冗余,提升抗干扰能力 |
| 模式映射 | ❌ | ✅ | 将编码比特映射为射频符号 |
从PDU组装完成到最终从天线发出,数据包会依次经过CRC生成→加密→白化(→FEC编码→模式映射)的处理流水线。接收端则按照完全相反的流程进行解码还原。
理解比特流处理的每一个环节,不仅能帮助我们读懂BLE协议规范,更能指导我们在实际开发中排查链路层通信问题------无论是CRC校验失败、白化不同步,还是Coded PHY的编码配置错误。