1. BLE 并发连接基础概念

1.1 连接间隔(Connection Interval)

连接间隔是 BLE 链路层在两个连接事件之间等待的时间,由主设备(Central)在连接请求中设定,从设备(Peripheral)必须遵循。连接间隔以 1.25 ms 为步长,取值范围 7.5 ms ~ 4.0 s。较小的连接间隔缩短响应延迟但增加功耗与信道占用,较大的连接间隔降低功耗但增大数据到达时延。多个并发连接时,各个连接间隔必须合理安排,防止连接事件在时间上重叠导致丢包。

参数最小值最大值步长
连接间隔6 × 1.25 ms = 7.5 ms3200 × 1.25 ms = 4.0 s1.25 ms
扫描窗口0 ms(无扫描)10.24 s0.625 ms
扫描间隔2.5 ms10.24 s0.625 ms
设计提示:当连接间隔 < 30 ms 时,连接事件频率较高,主设备应预留至少 2 ms 的 RF 切换保护时间,避免与扫描窗口冲突。

1.2 扫描窗口与扫描间隔

扫描窗口(Scan Window)是每个扫描周期内收听广播信道的持续时间,扫描间隔(Scan Interval)是两个扫描起始点之间的时间。窗口必须 ≤ 间隔。并发连接中,主设备在连接事件与扫描事件之间分时切换。若扫描窗口过大,可能挤压连接事件的可用时间片,导致连接超时。

  • 主动扫描:发送扫描请求获取附加数据,占用更多 RF 时间。
  • 被动扫描:只接收广播包,不发送请求,并发场景下更省时。

典型并发配置推荐扫描窗口 ≤ 间隔的 50%,例如扫描间隔 100 ms 时,窗口 ≤ 50 ms。剩余时间可均匀分配给多个连接事件。

1.3 延时容忍(Latency Tolerance)

BLE 连接提供从设备延迟(Peripheral Latency)参数,允许从设备跳过指定次数的连接事件来省电。延时容忍值范围 0~499,乘上连接间隔即为从设备可忽略的最大连续事件数。主设备必须等待最多“连接间隔 ×(1 + 从设备延迟)”时间才能收到从设备数据。高并发场景下,利用从设备延迟可错开多个从设备的回报时刻,降低主设备的中断频率。

公式:最大响应延迟 = 连接间隔 × (1 + 从设备延迟)

例如:连接间隔 50 ms,从设备延迟 4,则主设备最多等待 250 ms 后可收到数据。设计系统时,应用层延迟容忍应大于等于此值。

1.4 并发数上限(Maximum Concurrent Connections)

BLE 规格未明确定义并发连接上限,实际由主设备硬件资源、协议栈实现和 RF 调度能力共同决定。常见上限如下:

平台/协议栈典型并发数限制因素
nRF52840 + SoftDevice20RAM 连接上下文、调度器时间片
ESP32 + NimBLE9链路层缓冲区、CPU 中断处理能力
BlueZ + Linux7~10内核蓝牙子系统调度、USB/总线延迟
STM32WB + 专用栈8~16RF 内核与 M4 核间通信开销
注意事项:并发数超过平台建议值时,连接事件调度将出现微秒级抖动,导致链损率上升。建议预留 20% 余量。

1.5 四大参数的依赖关系

下面内联 SVG 展示了连接间隔、扫描窗口、延时容忍与并发数上限之间的调度时序关系,帮助理解并发依赖。

BLE 并发连接参数依赖关系图 并发连接调度时序依赖 连接间隔 (CI) 扫描窗口 (SW) 扫描间隔 (SI) 从设备延迟 (LAT) 并发连接数 (N) 依赖说明: • 扫描窗口 + 扫描间隔 必须 ≤ 连接间隔的倒数时间片; • 连接间隔 × (1 + 从设备延迟) 决定了最大响应延时; • 并发连接数受可用空闲时间片数 = floor( (扫描间隔 - 扫描窗口) / 连接事件最小可用时间 ) 约束。

1.6 配置示例:并发连接参数设定

以下蓝色协议栈参数示例展示了 4 个并发连接时的关键配置,实际数值需根据应用延迟要求和功耗预算调整。

/* 连接间隔:30 ms (24 x 1.25 ms) */
#define CONN_INTERVAL_MS  30
/* 从设备延迟:允许跳过 2 次连接事件 */
#define PERIPHERAL_LATENCY  2
/* 扫描窗口:15 ms,扫描间隔:30 ms */
#define SCAN_WINDOW_MS     15
#define SCAN_INTERVAL_MS   30
/* 最大并发连接数(应用层限制) */
#define MAX_CONNECTIONS    4
关键点:当连接间隔较小(< 20 ms)时,建议将扫描窗口缩至连接间隔的 40% 以下,避免连接事件丢包。从上例看,30 ms 连接间隔搭配 15 ms 扫描窗口(50%)基本安全,但需验证实际 RF 环境。

1.7 调试与验证方法

使用逻辑分析仪或 BLE 协议分析器(如 Ellisys、nRF Sniffer)捕获空中包,观察连接事件是否重叠。检查要点:

  • 每个连接事件是否在预期时间窗内开始和结束;
  • 扫描窗口是否与连接事件冲突(发生 CRC 错误或连接超时);
  • 从设备延迟后的首次连接事件是否被正确调度。

日志输出示例(基于 Zephyr BLE 栈):

D: [BT] conn[0] interval 30 ms latency 2
D: [BT] conn[1] interval 40 ms latency 0
D: [BT] scan window 15 ms scan interval 30 ms
D: [BT] next connection event in 2.1 ms (slot idle)

1.8 常见错误与优化

错误场景现象根因优化方向
扫描窗口 > 扫描间隔扫描事件无法开始参数越界确保扫描窗口 ≤ 扫描间隔
连接间隔过小 + 多连接连接事件频繁丢失RF 时间片不足增大连接间隔或减少并发数
从设备延迟过高应用层响应超时延迟容忍设置不当降低延迟或放宽应用层超时
并发数超硬件限制协议栈内存分配失败系统资源耗尽使用 bt_conn_get_info() 检查可用连接槽
调试建议:如果并发连接出现随机断连,优先检查连接间隔与扫描窗口比例,使用协议分析器抓取连接事件重叠时刻。通常将扫描窗口降低至连接间隔的 30% 即可恢复稳定链接。