物理层基础:2.4GHz ISM 频段、GFSK 调制、数据包结构、Coded PHY 的 S=2 和 S=8 模式
好,咱们进入第二章。这一章讲的是物理层,说白了就是 BLE 通信的「地基」。你盖楼地基不稳,上层再花哨也没用。我个人习惯,做无线通信项目,第一件事就是先把物理层吃透。尤其是 BLE 5.0 的长距离方案,核心秘密就藏在这里。
2.1 2.4GHz ISM 频段:拥挤的「高速公路」
BLE 工作在 2.4GHz ISM 频段。这个频段是国际通用的,不需要授权。听起来很美好对吧?但问题也来了——太拥挤了。
你想想看,Wi-Fi、蓝牙、ZigBee、甚至微波炉,全挤在这个频段里。我做过一个智能家居项目,设备在实验室跑得好好的,一放到客户家里就频繁断连。查了半天,原来是客户家 Wi-Fi 信道正好和我们的 BLE 信道重叠了。
BLE 5.0 在这个频段上做了优化。它引入了「信道选择算法 #2」(CSA #2),能更智能地避开干扰。嗯,这里要注意,这个算法不是可选的,是 5.0 强制要求的。
2.2 GFSK 调制:简单但可靠
GFSK,全称是高斯频移键控。名字听着唬人,其实原理很简单。
传统的 FSK 用两个频率代表 0 和 1。比如 2.400GHz 代表 0,2.4001GHz 代表 1。但这样有个问题——频率切换太生硬,会产生高频分量,浪费频谱。
GFSK 就是在 FSK 前面加了一个「高斯滤波器」。这个滤波器把数字信号的边沿磨圆了,频率切换变得平滑。好处有两个:
- 频谱效率高:占用带宽更窄,能容纳更多设备
- 抗干扰强:平滑的切换不容易产生杂散
我记得第一次用示波器看 GFSK 波形时,感觉就像看一个温柔的波浪线,而不是方波。这玩意儿虽然简单,但可靠性极高。BLE 选择它,说白了就是图个稳。
2.3 数据包结构:每一比特都有意义
BLE 的数据包结构,我闭着眼睛都能画出来。它分为几个部分:
| 字段 | 长度 | 说明 |
|---|---|---|
| 前导码 | 1 字节 | 用于接收端同步时钟 |
| 访问地址 | 4 字节 | 区分不同连接,避免串扰 |
| PDU | 2-257 字节 | 实际数据,包含头部和载荷 |
| CRC | 3 字节 | 循环冗余校验,检测错误 |
这里我要强调一下前导码。在 BLE 4.x 里,前导码是固定的 0xAA 或 0x55。但在 BLE 5.0 的 Coded PHY 模式下,前导码变成了 80 微秒的「恒定频率信号」。为什么?因为长距离模式下信号弱,接收端需要更长的时间来锁定频率。
访问地址也很重要。每个连接都有一个唯一的访问地址。我曾经遇到过一个 bug,两个设备用了一样的访问地址,结果数据互相串扰。查了两天才发现是代码里写死了地址,没有随机生成。
2.4 Coded PHY:长距离的秘密武器
好,终于到了重点。BLE 5.0 最大的亮点就是 Coded PHY。它让通信距离从原来的几十米,提升到了几百米甚至上公里。
原理其实不复杂。Coded PHY 在原始数据上加了「纠错编码」。接收端即使收到有错误的信号,也能通过编码恢复出原始数据。这就像你说话时重复三遍,对方即使没听清一遍,也能从另外两遍猜出来。
Coded PHY 有两种模式:S=2 和 S=8。这里的 S 代表「符号数」。什么意思呢?
- S=2:每个数据比特用 2 个符号表示。有效数据速率是 500 kbps。
- S=8:每个数据比特用 8 个符号表示。有效数据速率是 125 kbps。
你可能会问:为什么 S=8 比 S=2 传得更远?
因为 S=8 用了更多的冗余。接收端有更多的信息来纠正错误。代价就是速度慢。125 kbps 听起来很慢,但对于传感器数据、开关控制这类应用,完全够用。
我做过一个项目,需要在工厂里监控几百个传感器。用 S=2 模式,距离大概 200 米。换成 S=8 模式,直接干到 600 米。当然,数据上报频率从每秒一次降到了每三秒一次。但客户说没问题,只要不断连就行。
2.5 编码细节:Pattern Mapper 和 FEC
Coded PHY 用了两种编码技术:
- FEC(前向纠错):使用卷积码,编码率是 1/2。也就是说,每输入 1 比特,输出 2 比特。
- Pattern Mapper:把 FEC 输出的比特映射成符号序列。S=2 时,每个比特映射成 2 个符号;S=8 时,每个比特映射成 8 个符号。
举个例子。假设你要发送一个比特「1」:
- FEC 先把它变成「11」
- S=2 模式下,Pattern Mapper 把「11」映射成「1100」
- S=8 模式下,Pattern Mapper 把「11」映射成「11001100」
接收端收到符号序列后,反向操作就能恢复出原始比特。即使中间有几个符号错了,也能通过多数投票或维特比解码纠正回来。
2.6 实际部署中的选择
做产品时,怎么选 S=2 还是 S=8?我一般按这个原则:
| 场景 | 推荐模式 | 理由 |
|---|---|---|
| 室内、短距离(<50米) | 1M PHY(不编码) | 速度快,功耗低 |
| 室内、中等距离(50-200米) | S=2 | 平衡距离和速率 |
| 室外、长距离(>200米) | S=8 | 距离优先,速率可牺牲 |
嗯,这里要注意。S=8 虽然距离远,但数据包长度有限制。BLE 5.0 的 Coded PHY 最大 PDU 长度是 255 字节。如果你要传大文件,还是用 2M PHY 吧。
好了,这一章就到这里。物理层是基础,但也是决定成败的关键。下一章我们会讲链路层,看看数据是怎么在设备之间可靠传输的。