物理层(PHY):BLE 的“地基”

各位同学,咱们今天聊聊 BLE 协议栈最底层的东西——物理层。说白了,就是信号怎么发出去、怎么收回来。我刚开始接触蓝牙时,总觉得上层协议才叫技术,物理层不就是调个频、发个波嘛。后来被现实狠狠教育了一回——有一次产品在实验室跑得好好的,一到客户现场就断连,查了三天才发现是信道干扰问题。从那以后,我再也不敢小看物理层了。

物理层决定了 BLE 的通信距离、抗干扰能力、功耗上限。你上层协议写得再漂亮,物理层不行,一切都是白搭。咱们这一章就把物理层的几个核心知识点掰开揉碎讲清楚。

2.4GHz ISM 频段与 40 个信道

BLE 工作在 2.4GHz ISM 频段。ISM 是啥?Industrial, Scientific, Medical——工业、科学、医疗。这个频段全球免费,不需要授权。但代价是:谁都能用。Wi-Fi、Zigbee、微波炉、无线鼠标……全挤在这一块。你想想看,这环境有多嘈杂。

BLE 把 2.4GHz 频段(2400–2483.5 MHz)划分成了 40 个信道,每个信道带宽 2MHz。这 40 个信道又分成三类:

信道类型 信道编号 用途
广播信道 37、38、39 设备发现、广播数据、连接建立
数据信道 0–36(共 37 个) 连接后的数据传输

为什么是 3 个广播信道?我个人的理解是:既要保证设备能被快速发现,又要避开 Wi-Fi 的常用频段。37 信道在 2402MHz,38 在 2426MHz,39 在 2480MHz——刚好避开了 Wi-Fi 的 1、6、11 信道中心频点。这不是巧合,是设计者故意留的“安全通道”。

关键点:广播信道只有 3 个,但数据信道有 37 个。连接建立后,双方会通过跳频算法在 37 个数据信道间快速切换,避开干扰。

我在项目中遇到过一个问题:某个智能门锁在商场里死活搜不到手机。后来用频谱仪一看,37、38、39 三个广播信道全被 Wi-Fi 占满了。最后靠调整广播信道的发射功率和重传次数才勉强解决。嗯,物理层的问题,有时候得用物理层的办法。

调制方式:GFSK

BLE 用的调制方式是 GFSK——高斯频移键控。名字听着唬人,其实原理不复杂。

FSK 就是用两个不同的频率代表 0 和 1。比如频率 f1 表示 1,频率 f2 表示 0。GFSK 呢?在 FSK 前面加了一个“高斯滤波器”,让频率切换变得平滑,减少频谱的旁瓣能量。说白了,就是让信号更“干净”,不容易干扰别人。

BLE 的 GFSK 参数:

  • 调制指数:0.45–0.55
  • 频偏:±185kHz(标称值)
  • 数据速率:1 Mbps(BLE 4.x/5.0 的 LE 1M PHY)

为什么选 GFSK?因为它实现简单、功耗低。你想想看,BLE 设备大多用纽扣电池,要是用复杂的调制方式,功耗根本扛不住。GFSK 的接收机结构简单,解调也容易,非常适合低功耗场景。

个人经验:调试 BLE 射频时,我习惯先用频谱仪看 GFSK 的频偏。频偏偏大或偏小,都会导致接收灵敏度下降。有一次我调一个模块,发现通信距离只有 10 米,查了半天——频偏偏了 30kHz。校准后直接干到 50 米。

物理层数据包格式

BLE 物理层的数据包结构,我画了一张图,大家先看个整体印象:

BLE 物理层数据包结构 前导码 1 字节 访问地址 4 字节 PDU 2–257 字节 CRC 3 字节 各字段说明: • 前导码:固定为 0xAA 或 0x55,用于接收机同步时钟 • 访问地址:广播信道固定为 0x8E89BED6;数据信道由链路层分配 • PDU:协议数据单元,包含报头 + 有效载荷 + 可能的消息完整性校验(MIC) • CRC:24 位循环冗余校验,用于检测数据包是否出错

物理层数据包由四个部分组成:

  1. 前导码(Preamble):1 字节,固定为 0xAA 或 0x55。作用是让接收机锁定时钟和数据速率。没有它,接收机连数据从哪开始都不知道。
  2. 访问地址(Access Address):4 字节。广播信道用固定地址 0x8E89BED6。数据信道由链路层在连接建立时随机生成,用于区分不同的连接。
  3. PDU(Protocol Data Unit):2–257 字节。这是真正的数据内容。广播信道的 PDU 包含广播数据;数据信道的 PDU 包含用户数据。
  4. CRC(Cyclic Redundancy Check):3 字节。24 位校验,接收方用它判断数据包是否完整。

注意:我曾经调试过一个 BLE 模块,发现它老是丢包。用逻辑分析仪抓包一看,CRC 校验失败率高达 30%。最后发现是 PCB 天线匹配没做好,导致信号反射严重。物理层的问题,有时候得从硬件设计上找原因。

发射功率与接收灵敏度

这两个参数直接决定了 BLE 的通信距离和可靠性。

参数 典型值 说明
发射功率 -20 dBm 到 +10 dBm 大多数 BLE 芯片可配置,每增加 3 dBm,距离约翻倍
接收灵敏度 -90 dBm 到 -97 dBm(LE 1M) 数值越低,接收能力越强。每降低 6 dBm,距离约翻倍

发射功率好理解——功率越大,信号传得越远。但 BLE 是低功耗协议,你不能无脑开最大功率。我个人的经验是:室内场景用 0 dBm 就够了,空旷室外可以开到 +8 dBm。再高?电池扛不住,而且可能违反各国法规。

接收灵敏度是个容易被忽略的参数。它表示接收机能识别的最小信号强度。比如灵敏度 -95 dBm,意味着信号强度低于 -95 dBm 时,接收机就解不出来了。

避坑指南:我曾经在一个项目中,把发射功率从 0 dBm 调到 +8 dBm,结果通信距离只增加了 30%。为什么?因为接收灵敏度成了瓶颈。发射端信号再强,接收端解不出来也是白搭。所以,优化链路预算时,发射功率和接收灵敏度要一起看。

链路预算的简单估算公式:

链路预算 = 发射功率 (dBm) + 发射天线增益 (dBi) + 接收天线增益 (dBi) - 路径损耗 (dB)

路径损耗(自由空间)≈ 32.4 + 20 × log10(距离(m)) + 20 × log10(频率(MHz))

举个例子:发射功率 0 dBm,接收灵敏度 -95 dBm,天线增益各 0 dBi,频率 2450 MHz。那么最大路径损耗 = 0 - (-95) = 95 dB。代入公式算一下,理论距离大约 80 米。实际嘛……墙、人体、干扰都会打折,能到 30 米就算不错了。

小技巧:调试时我习惯用手机 App(比如 nRF Connect)看 RSSI。RSSI 越接近接收灵敏度阈值,说明链路越紧张。如果 RSSI 在 -85 dBm 以下,基本可以放心;如果到了 -92 dBm 以上,就要考虑加功率或优化天线了。