第4章 连接参数角色边界:Connection Interval、Slave Latency、Supervision Timeout在不同角色下的取值范围与权衡

在 Bluetooth LE 多连接场景中,三个核心连接参数——Connection Interval、Slave Latency 和 Supervision Timeout——直接决定了系统的能效、数据吞吐量、响应延迟与连接稳定性。这些参数的取值范围不仅受蓝牙核心规范约束,更因设备角色(Central / Peripheral / Broadcaster / Observer)不同而存在显著的边界差异。本章围绕角色边界,从参数基线、协商控制流、风险权衡到落地验收进行完整剖析。

4.1 参数取值范围与规范边界

蓝牙核心规范 v5.x 对三个参数的定义与范围如下表所示。所有取值必须在设备初始化或连接参数更新阶段协商一致,超出边界将导致连接拒绝或链路中断。

参数 单位 规范范围 最小步长 角色限制
Connection Interval 1.25 ms 6~3200(即 7.5 ms~4.0 s) 1(1.25 ms) 只能由 Central 发起更新,Peripheral 可请求但必须经 Central 确认
Slave Latency 事件次数 0~499 1 仅适用于 Peripheral(Slave),Central 固定为 0
Supervision Timeout 10 ms 10~3200(即 100 ms~32.0 s) 1(10 ms) Central 与 Peripheral 均需维护,但 Central 负责超时检测与断开
关键边界规则:Supervision Timeout 必须大于 (1 + Slave Latency) × Connection Interval,否则 Central 会因过早超时而误断连接。该不等式是参数协商的首要约束,任何不符合此条件的参数组合都会被协议栈拒绝。

4.2 角色边界与职责分层

在 BLE 连接模型中,设备角色决定了参数的提议权、决策权与容忍阈值。下图展示了 Central 与 Peripheral 在参数协商中的分层关系及影响要素。

连接参数角色边界与权衡 Central (Master) Connection Interval 决策者 Slave Latency 固定为 0 Supervision Timeout 发起方 Peripheral (Slave) 可提议 Connection Interval Slave Latency 0~499 必须满足超时不等式 通过 LL_CONNECTION_PARAM_REQ/RSP 协商 高吞吐场景 小 Interval + 0 Latency 低功耗场景 大 Interval + 高 Latency 低延迟场景 小 Interval + Latency=0 超时不等式约束 Supervision Timeout > (1 + Slave Latency) × Connection Interval 若违反,Central 会立即断开连接

4.3 参数权衡与选型决策

实际系统设计需要在功耗、延迟、吞吐量之间做平衡,不同角色对这三个指标的优先级截然不同。下表总结了常见场景下的参数选型推荐。

用户场景 Central 策略 Peripheral 策略 典型 Interval Latency 主导风险
实时数据采集(如心率) 接受低 Interval 请求 请求 7.5~20 ms 7.5~15 ms 0 Central 处理负载高
周期性传感器上报(如温度) 允许高 Latency 请求 100~500 ms 100~400 ms 5~50 丢失多个事件后超时
低功耗外设(如按钮) 接受大 Interval 请求最大可达 4 s 1~4 s 0~10 响应延迟不可接受
多连接 Central(Hub) 平衡各 Peripheral 周期 容忍调度抖动 15~50 ms 0~2 调度冲突导致丢包
设计建议:当 Peripheral 同时作为 Central 与其他设备连接时(即多角色设备),Slave Latency 应优先设置为低值(≤2),以免因自身延迟过高而错过对其他 Central 的响应。

4.4 数据流与控制流:参数协商过程

参数更新由 Central 发起,但 Peripheral 可通过 LL_CONNECTION_PARAM_REQ 提议新参数。控制流如下:

  1. Peripheral 提议:发送 LL_CONNECTION_PARAM_REQ,包含 Interval、Latency、Timeout 的期望值。
  2. Central 评估:检查是否满足超时不等式,并根据自身调度能力接受或拒绝。
  3. Central 回应:返回 LL_CONNECTION_PARAM_RSP(接受)或忽略(隐式拒绝)。
  4. 参数生效:若接受,双方立即切换至新参数;若拒绝,Peripheral 可重试,但需遵守重试间隔。

数据流方面,Connection Interval 直接决定每个连接事件中可交换的数据包数量。Interval 越小,单位时间可用事件数越多,吞吐量线性提升,但 Central 的调度开销也越大。

4.5 风险点与常见陷阱

  • 超时不等式导致的隐性断连:若 Peripheral 请求的 Latency × Interval 接近 Supervision Timeout,短时干扰即可触发超时断开。建议将 Timeout 设为不等式右侧值的 2~3 倍。
  • Central 拒绝参数更新后无反馈:部分协议栈不发送拒绝消息,Peripheral 必须依靠超时回退,避免无限重试导致功耗飙升。
  • 多连接 Central 的 Interval 冲突:当 Central 连接多个 Peripheral 时,不同 Interval 可能导致调度周期无法对齐,建议使用 connEventCounter 错开连接事件。
  • Broadcaster/Observer 角色误用连接参数:广播状态不存在 Connection Interval,若应用层错误地将连接参数配置写入广播场景,将导致参数无效或未定义行为。
高风险场景:当 Peripheral 的 Slave Latency 设置为 499(最大值),且 Connection Interval 为 100 ms 时,Central 可能长达 49.9 秒(499×100 ms)收不到任何数据。若 Supervision Timeout 同时设置为接近的 5 秒,实际上只需 5 秒无数据就断开——这反而与预期背道而驰。务必在配置时同步验证不等式裕量。

4.6 落地步骤

以 TI CC13xx / Nordic nRF5 SDK 为例,参数配置与更新流程如下:

// 定义 Peripheral 期望的参数(单位:1.25 ms / 10 ms)
uint16_t conn_interval_min = 80;   // 100 ms
uint16_t conn_interval_max = 200;  // 250 ms
uint16_t slave_latency      = 10;   // 10 个事件
uint16_t supervision_timeout = 2000; // 2000 * 10 ms = 20 s

// 发起参数更新请求(Peripheral 调用)
sd_ble_gap_conn_param_update(conn_handle,
                             &conn_interval_min,
                             &conn_interval_max,
                             slave_latency,
                             supervision_timeout);

// Central 端接收并检查不等式
if (supervision_timeout <= (1 + slave_latency) * conn_interval_max) {
    // 拒绝并保持现有参数
    return BLE_ERROR_INVALID_PARAM;
}
// 接受并应用新参数

在实际产品中,建议将参数请求封装成状态机,包含重试退避。关键时序参数可存入非易失存储,避免每次连接都重新协商。

4.7 验收标准

连接参数调整后,必须通过以下检查项确认边界正确:

  • 参数值验证:使用 HCI 命令 LE Read Connection Update Complete 或协议分析仪抓取 LL_CONNECTION_PARAM_RSP,确认 Interval、Latency、Timeout 与配置一致。
  • 不等式合规:计算并断言 Supervision Timeout > (1 + Slave Latency) × Connection Interval,差值至少保留 10% 裕量。
  • 稳定性测试:在射频噪声环境中持续运行 30 分钟,连接不应无故断开(除人为触发外)。
  • 多角色边界:若设备同时充当 Central 和 Peripheral,需验证两个连接方向各自的参数不互相干扰,特别是连接事件调度无冲突。
架构审查要点:在多连接系统中,建议为每个 Peripheral 建立独立的连接参数配置文件(Profile),并强制 Central 侧在参数更新前做超时不等式复审。任何由 Peripheral 发起的参数变更请求,Central 都应在日志中记录变更前后的参数差,用于事后审计。