BLE 广播信道 37/38/39 选频设计解析:为什么 2402/2426/2480 MHz 专门避开 WiFi

BLE 在 2.4GHz 划了 40 个 2MHz 信道,广播却只占 3 个,且编号是排在最后的 37/38/39,频率分别落在 2402/2426/2480 MHz------正好卡在 WiFi 信道 1/6/11 的三处缝隙里。本文从频谱叠层、AFH 兜底差异、真实 HCI 抓包三个角度拆解这套"躲位"设计,并给出广播可靠性场景的工程建议。

1. 40 个信道的划分与广播信道的反直觉编号

BLE(Bluetooth Low Energy)的物理层在 2.4GHz ISM 频段(2400~2483.5 MHz)划出 40 个射频信道,每个 2MHz:

  • 数据信道 37 个:编号 0~36,用于连接后的跳频通信
  • 广播信道 3 个:编号 37/38/39,用于设备发现、连接建立、广播态传输

信道编号与频率的对应关系:

复制代码
RF 信道 k 的中心频率 = 2402 MHz + k × 2 MHz

广播信道的编号与频率对照:

广播信道编号 中心频率 对应频率序号
37 2402 MHz 0
38 2426 MHz 12
39 2480 MHz 39

也就是说,三个广播信道在频率轴上的位置是:频段最底端、正中间、最顶端------近似均匀覆盖整个 2.4G 频段。

2. 频谱叠层:为什么是这三个位置

2.4GHz 频段最大的占道者是 WiFi。WiFi 的 20MHz 信道理论上有十几个,但全球实际部署几乎只使用互不重叠的 信道 1、6、11:

WiFi 信道 中心频率 占用范围
1 2412 MHz 2401~2423 MHz
6 2437 MHz 2426~2448 MHz
11 2462 MHz 2451~2473 MHz

把 BLE 三个广播频率放进去对照:

BLE 广播信道 频率 相对 WiFi 的位置
37(2402) 2402 MHz WiFi ch1 下边缘(2401)之上,处于 ch1 与 ch6 的间隙带
38(2426) 2426 MHz 正好落在 ch1 结束(2423)与 ch6 开始(2426)之间的缝隙
39(2480) 2480 MHz ch11 结束(2473)之后的频段顶端,完全无 WiFi 占道

结论:三个广播信道全部避开 WiFi 1/6/11 的主占道区。这是协议设计时刻意的选择,不是巧合。

3. 为什么广播阶段没有 AFH 兜底

连接建立后,BLE 使用自适应跳频(AFH):控制器统计各数据信道的丢包率/RSI,把质量差的信道从跳频表里剔除(主机可通过 HCI_LE_Set_Host_Channel_Classification 参与指定)。数据信道撞上 WiFi,损失可控。

广播态则完全不同:

  1. 单向无连接:广播方不知道有没有人收到、质量如何,没有反馈环路
  2. 无跳频表可剔除:三个广播信道是协议固定的,不可重选
  3. 是设备的"第一面":扫描发现、回连、信标全部依赖这三个信道

因此设计者必须保证:广播信道的频率在任何 WiFi 部署形态下都先天最干净。ch1/ch6/ch11 之间的两处缝隙 + 频段顶端,是全频段仅有的三处"永久保留地"。

协议同时做了冗余:一个广播事件会在三个信道上各发一次,任一信道被干扰,另两个仍可收到------扫描发现的可靠性从"选对位置"和"多次冗余"两个维度保证。

4. 真实 HCI 抓包验证

以下摘自一份真实的 BLE SoC HCI 抓包(btsnoop 格式,1207 包,覆盖上电初始化到建立连接全程)。

先看广播参数是怎么配的。主机下发 HCI_LE_Set_Advertising_Parameters(0x2006),15 字节参数原文:

复制代码
a0 00 a0 00 00 00 00 00 00 00 00 00 00 07 00

逐字段拆:

字节 值 含义
a0 00 / a0 00 0x00A0 广播间隔 160 × 0.625ms = 100ms(最小=最大,固定间隔)
00 0 广播类型:可连接广播
00 0 自身地址类型:Public
00 + 6 字节 0 --- 对端地址类型 + 6 字节地址:全 0(只对定向广播有意义)
07 0x07 广播信道掩码:bit0/1/2 = 信道 37/38/39,三个全开
00 0 过滤策略:不过滤

倒数第二个字节值得单独说------协议连"用几个广播信道"都做成了可配字段。这颗 SoC 配 0x07,三信道全用;配 0x01 就只发信道 37。有些方案为了省电只开单信道,等于亲手扔掉协议给的三重冗余。

参数配好后,广播的开关序列:

复制代码
[ 90] CMD  HCI_LE_Set_Advertising_Enable (0x200A)  param: 00   # 关广播
[100] CMD  HCI_LE_Set_Advertising_Enable (0x200A)  param: 01   # 开广播
[102] EVT  LE Meta / Connection Complete (0x3E/0x01)            # 对端发起连接
[105] EVT  LE Meta / Long Term Key Request (0x3E/0x05)          # 加密流程

广播打开(包 100)后极短间隔内即出现 Connection Complete(包 102)------扫描方在三个广播信道之一上捕获到广播包,随即在该信道发起 CONNECT_IND,链路切换到数据信道跳频序列。按 100ms 间隔算,设备每秒广播 10 轮、每轮 37/38/39 各发一遍,扫描方碰到其中任意一遍就能发起连接。

值得注意的对比:连接完成后,连接参数(interval/latency/supervision timeout)由主机通过 HCI_LE_Connection_Update 动态调整(本抓包中连接建立后紧跟着一串 ConnUpdate 事件),跳频地图也可由主机侧更新------连接后的世界处处可调,广播信道的三个频率则是协议焊死的。这一"可调 vs 焊死"的分界,恰好说明广播阶段对这 3 个先天位置的依赖。

5. 现场排查:搜不到设备,先分清"没发"和"被压"

遇到"设备就在旁边,手机搜不到"的现场,第一件事不是猜,是用一条 HCI 抓包把两种故障分开:

  1. 找 HCI_LE_Set_Advertising_Enable------没有这条命令,协议栈压根没开广播,问题在软件配置
  2. 命令发出后看 Command Complete 的 Status------非零(如 0x07 内存不足、命令被拒绝),问题在协议栈或命令时序
  3. HCI 上一切正常但对端搜不到------才轮到射频环境:扫现场 WiFi 占用(1/6/11 之外注意非标信道 2/3/8/13),查微波炉、USB3.0 hub 近距辐射

没有 HCI 抓包条件时的旁证:手机装 nRF Connect 扫描,看该设备广播包是否出现、RSSI 是否正常。广播正常但 RSSI 异常低,多半是天线或发射端问题;广播时有时无,环境压制嫌疑最大。

6. 工程含义与建议

这套设计有效但非无敌。WiFi 的边带泄漏、微波炉(~2450 MHz,恰在信道 38/39 之间)仍会伤及广播信道。实际产品中的表现规律:

  • 连接后吞吐:AFH 剔除坏信道,速率损失有限
  • 扫描发现 / 回连:撞上强干扰源时明显变慢,因为广播信道不可绕

工程建议:

  1. 对发现/回连延迟敏感的产品(定位标签、快速回连耳机),广播间隔适当调密,并确保三个信道全部启用------协议给的冗余用满(对应抓包里那个掩码字节 0x07)
  2. 排查"设备搜不到"问题时,先按第 5 节的三步分清"没发"和"被压",再扫现场 WiFi 信道占用与 2.4G 干扰源
  3. 共存设计:SoC 内部 WiFi/BLE 共存机制(请求/仲裁信号)只优化共存时的时域避让,频域上的"躲位"依然靠这 3 个固定频率

7. 总结

数据信道靠 AFH 跳频躲 WiFi,广播信道靠"生在缝隙里"躲 WiFi。2402 / 2426 / 2480 MHz 是 2.4G 频谱上仅有的、任何 WiFi 1/6/11 部署都占不到的三个角落------BLE 把设备发现这件最早期、最脆弱的事,托付给了这三个被算计出来的数字。


BLE 低功耗蓝牙 广播信道 2402MHz 2426MHz 2480MHz WiFi 干扰 2.4GHz HCI 抓包

相关推荐
你的强来了9985 天前
WCHToolKit场景实战
网络·串口·调试·usb·ble·分析
K成长日志8 天前
BLE Host层L2CAP--数据包格式
网络·物联网·无线通信·蓝牙·iot·ble
K成长日志1 个月前
BLE链路层-隐私保护
网络·物联网·蓝牙·iot·ble
K成长日志1 个月前
BLE链路层-Feature Support
网络·嵌入式·无线通信·蓝牙·iot·ble
wotaifuzao1 个月前
(十)BLE GATT与ATT深度解剖-从属性表到CCCD-订阅收不到数据的终极答案
低功耗蓝牙·ble·nrf52·zephyr·gatt·cccd
YONYON-R&D1 个月前
[特殊字符] 解决:蓝牙鼠标从其他电脑切回后“能扫到但连不上”
ble·蓝牙鼠标
dozenyaoyida1 个月前
Zephyr BLE 上行链路源码拆解:一个空中报文怎么从 radio 跑到应用回调(NCS v3.2.1)
controller·嵌入式开发·ble·host·zephyr·协议栈·软链路层
dozenyaoyida1 个月前
Zephyr BLE GATT Server 注册到收发调用链源码解析(NCS v3.2.1)
ble·zephyr·gatt·ble协议栈
K成长日志2 个月前
BLE不可连接状态--广播态
物联网·网络协议·蓝牙·低功耗·iot·ble