第二章 BLE硬件基础:射频、频段、物理层与链路层

各位同学,欢迎来到第二章。这一章我们得聊聊硬件基础了。说实话,很多做软件的朋友一听到「射频」、「物理层」就头大,觉得这是硬件工程师的事。但我个人的经验是——不懂硬件底层的BLE开发,就像蒙着眼睛开车。你调了一整天连接参数,结果发现是频偏问题,那才叫崩溃。

好,我们开始。这一章我会把射频基础、频段信道、物理层和链路层状态机串起来讲。你跟着我的节奏走,保证不晕。

2.1 射频基础概念

先聊几个最基础的概念。你不需要成为射频专家,但下面这几个词必须懂。

  • 频率(Frequency):单位Hz,表示信号每秒振荡次数。BLE工作在2.4GHz频段,也就是每秒振荡24亿次。
  • 带宽(Bandwidth):信号占用的频率范围。BLE每个信道带宽2MHz。
  • 发射功率(TX Power):通常用dBm表示。0dBm对应1mW,+4dBm约2.5mW。BLE典型范围-20dBm到+10dBm。
  • 接收灵敏度(RX Sensitivity):接收机能正确解码的最小信号强度。BLE一般要求-70dBm到-97dBm,视PHY模式而定。
  • 路径损耗(Path Loss):信号在空气中传播会衰减。距离每增加一倍,损耗大约增加6dB(自由空间模型)。

核心公式速记:
自由空间路径损耗 (dB) = 20log₁₀(距离) + 20log₁₀(频率) - 147.55
频率单位Hz,距离单位m。2.4GHz下,10米距离损耗约60dB。

我在项目中遇到过最典型的坑:产品做出来,隔一堵墙就断连。查了半天,发现是天线匹配没做好,实际发射功率比配置值低了6dB。嗯,硬件上的1dB差异,到用户手里就是「这破玩意儿信号真差」。

2.2 BLE频段与信道

BLE工作在ISM 2.4GHz频段,具体范围是2400MHz到2483.5MHz。这个频段全球免费,但也是Wi-Fi、Zigbee、微波炉的共用频段——拥挤得很。

2.2.1 信道划分

BLE把整个频段分成40个信道,每个信道2MHz宽。编号从0到39。

信道类型 信道编号 中心频率 (MHz) 用途
广播信道 37, 38, 39 2402, 2426, 2480 设备发现、广播、连接建立
数据信道 0-36 2404~2478 (步进2MHz) 连接后的数据通信

为什么广播信道只有3个?你想想看,如果40个信道都用来广播,扫描设备得累死。BLE的设计哲学是:广播要快,数据要稳。3个广播信道分布在频段的两端和中间,就是为了避开Wi-Fi的常用信道(1、6、11)。

个人建议:做产品时,广播信道37、38、39的频点一定要测。我遇到过某款芯片在信道39上灵敏度差3dB,结果就是手机离得稍远就搜不到广播包。这种问题在规格书上根本看不出来。

2.2.2 跳频机制

BLE在连接状态下使用自适应跳频(AFH)。什么意思呢?就是通信双方在37个数据信道里来回跳,每次连接事件换一个信道。如果某个信道干扰太大,就把这个信道标记为「坏信道」,跳过去不用。

跳频的好处很明显:抗干扰、提高可靠性。Wi-Fi占着信道1?没关系,我们跳到信道10去。微波炉在2.45GHz附近狂轰?信道39可能受影响,但数据信道可以避开。

注意:跳频是链路层自动完成的,应用层不需要操心。但如果你发现连接后吞吐量忽高忽低,大概率是信道质量波动导致的重传。这时候可以检查一下信道映射(Channel Map),看看是不是有太多坏信道被跳过了。

2.3 BLE物理层(PHY)介绍

物理层是BLE的最底层,负责把数据变成无线电波发出去,再把收到的电波变回数据。BLE 4.0/4.2只有一种PHY,但从BLE 5.0开始,引入了多种PHY模式。

2.3.1 三种PHY模式

PHY模式 速率 调制方式 典型灵敏度 适用场景
1M PHY (LE 1M) 1 Mbps GFSK -97 dBm 兼容性最好,默认模式
2M PHY (LE 2M) 2 Mbps GFSK -93 dBm 高吞吐量,短距离
Coded PHY (LE Coded) 125 kbps / 500 kbps GFSK + 编码 -103 dBm ~ -106 dBm 远距离,低速率

这里有个关键点:速率和灵敏度是反比关系。2M PHY速率翻倍,但灵敏度差了4dB。Coded PHY速率降到125kbps,但灵敏度提升了近10dB——说白了,就是用时间换距离。

我记得有个项目要做室内定位,要求覆盖半径50米。用1M PHY死活只能到30米,换了Coded PHY S=8编码后,直接干到60米。当然,代价是数据包传输时间长了8倍,功耗也上去了。没有免费的午餐。

2.3.2 GFSK调制

BLE使用高斯频移键控(GFSK)。简单说就是:用频率变化表示0和1。比特1对应一个频率偏移,比特0对应另一个方向的偏移。加上高斯滤波器是为了让频率变化更平滑,减少带外辐射。

调制指数是0.5,这意味着频率偏移是比特率的一半。1M PHY下,频偏约250kHz。这个参数在射频测试中很关键——频偏太大或太小,接收机都可能解错。

避坑指南:我曾经遇到过一批产品,量产时发现连接成功率从99%掉到85%。查了三天,最后发现是晶振频偏超标。BLE要求晶振精度在±50ppm以内,但那批晶振实际到了±80ppm。GFSK对频偏很敏感,晶振不准,接收机就解不出正确的比特。从那以后,我每次选型都要求供应商提供频偏测试报告。

2.4 BLE链路层(LL)状态机

链路层是BLE协议栈的核心。它定义了设备在通信过程中的五种状态,以及状态之间的转换规则。你写BLE应用可以不直接操作链路层,但理解状态机是调试连接问题的基本功。

2.4.1 五种状态

  • Standby(待机):初始状态,不发送也不接收。省电模式。
  • Advertising(广播):设备在广播信道上发送广播包。角色是广播者(Advertiser)。
  • Scanning(扫描):设备在广播信道上监听广播包。角色是扫描者(Scanner)。
  • Initiating(发起连接):扫描到特定广播包后,发送连接请求。角色是发起者(Initiator)。
  • Connection(连接):连接建立后,双方在数据信道上通信。分为主设备(Master)和从设备(Slave)。

状态转换其实不复杂。我画了一张图,你一看就明白。

BLE链路层状态机 BLE 链路层状态机 Standby Advertising Scanning Initiating Connection 开始广播 开始扫描 停止广播 停止扫描 收到可连接广播 连接失败 连接成功 断开连接 收到连接请求 实线:主动转换 | 虚线:被动转换(由对端触发)

从图里你能看到:Standby是唯一一个可以从任何状态进入的状态(除了Connection需要先断开)。广播和扫描是平行关系,不能同时进行。Initiating是Scanning的一个特殊子状态——它也在监听广播,但只关心特定设备。

2.4.2 连接状态详解

连接建立后,主设备和从设备按照连接事件(Connection Event)的节奏通信。每个连接事件包含:

  • 连接间隔(Connection Interval):7.5ms到4s,步进1.25ms。两个连接事件之间的时间。
  • 从设备延迟(Slave Latency):从设备可以跳过最多N个连接事件而不回复,用于省电。
  • 监控超时(Supervision Timeout):如果超过这个时间没收到任何包,连接被认为断开。范围100ms到32s。

调参经验:连接间隔设得越小,延迟越低,但功耗越高。我一般这样选:
- 数据采集类(温度、湿度):100ms~500ms
- 实时控制类(遥控器、鼠标):7.5ms~30ms
- 低功耗传感器(电池供电):500ms~4s
从设备延迟建议设为连接间隔的1~3倍,能显著省电。

2.4.3 链路层数据包格式

链路层的数据包结构很清晰:

| 前导码 (1字节) | 访问地址 (4字节) | PDU (2~257字节) | CRC (3字节) |
  • 前导码:用于接收机同步时钟。1M PHY下是0xAA或0x55,取决于访问地址第一位。
  • 访问地址:广播信道固定为0x8E89BED6。数据信道由连接时协商生成,每个连接唯一。
  • PDU:协议数据单元,包含报头、有效载荷和可能的MIC(消息完整性校验)。
  • CRC:24位循环冗余校验,确保数据完整性。

这里有个细节:广播信道的访问地址是固定的,所以任何BLE设备都能收到广播包。但数据信道的访问地址是随机生成的,只有连接双方知道——这本身就是一种安全机制。

注意:如果你在做抓包分析,看到访问地址不是0x8E89BED6,那一定是数据信道包。Wireshark或Ellisys会根据访问地址自动关联到对应的连接。但如果你自己写代码解析,记得区分广播包和数据包。

2.5 本章小结

好,这一章的内容就这些。我们覆盖了:

  • 射频基础:频率、带宽、功率、灵敏度、路径损耗
  • BLE频段与信道:40个信道,3个广播+37个数据,跳频机制
  • 物理层:1M/2M/Coded三种PHY,GFSK调制,速率与灵敏度的权衡
  • 链路层状态机:Standby、Advertising、Scanning、Initiating、Connection五种状态及转换