物理层基础: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 信道重叠了。

避坑指南: 2.4GHz 频段有 40 个 BLE 信道(0-39),其中 37/38/39 是广播信道,其余是数据信道。实际部署时,一定要考虑 Wi-Fi 的 1/6/11 信道干扰。我曾经因为没注意这个,被客户骂了三天。

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 选择它,说白了就是图个稳。

个人经验: GFSK 的调制指数是 0.5。这个值很关键。如果偏了,接收端解调就会出错。我建议你在量产前,一定要用频谱仪测一下调制指数,别信仿真数据。

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 米。当然,数据上报频率从每秒一次降到了每三秒一次。但客户说没问题,只要不断连就行。

注意: Coded PHY 不是万能的。它只能提高灵敏度,不能提高发射功率。如果你把发射功率从 0 dBm 提到 10 dBm,距离也能增加,但功耗会飙升。Coded PHY 的优势在于:不增加功耗,只靠编码增益来提升距离。

2.5 编码细节:Pattern Mapper 和 FEC

Coded PHY 用了两种编码技术:

  1. FEC(前向纠错):使用卷积码,编码率是 1/2。也就是说,每输入 1 比特,输出 2 比特。
  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」

接收端收到符号序列后,反向操作就能恢复出原始比特。即使中间有几个符号错了,也能通过多数投票或维特比解码纠正回来。

我的建议: 如果你用的是 Nordic 或 TI 的芯片,Coded PHY 的配置通常在广播包或连接参数里设置。但要注意,两端必须协商一致。我曾经遇到过发射端用 S=8,接收端却配置成 S=2,结果完全收不到数据。这种低级错误,排查起来很痛苦。

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 吧。

好了,这一章就到这里。物理层是基础,但也是决定成败的关键。下一章我们会讲链路层,看看数据是怎么在设备之间可靠传输的。