连接参数详解:连接间隔、从机延迟与监督超时

BLE 连接建立之后,三个参数决定了这条连接的“心跳节奏”——连接间隔(Connection Interval)、从机延迟(Slave Latency)、监督超时(Supervision Timeout)。很多人背过它们的取值范围,但一到实际调优就懵了。我刚开始做 BLE 项目时也踩过坑,今天咱们把这几个参数掰开揉碎讲清楚。

一、三个参数的基本定义

先看官方定义,我用大白话翻译一下:

参数 BLE 规范范围 通俗理解
连接间隔 7.5 ms ~ 4 s(步长 1.25 ms) 主机多久来找从机一次
从机延迟 0 ~ 499(次) 从机最多可以偷懒多少次不回复
监督超时 100 ms ~ 32 s(步长 10 ms) 主机多久没收到回复就认为连接断了

核心公式(必须记住):

有效连接间隔 = 连接间隔 × (从机延迟 + 1)

监督超时 > 有效连接间隔

为什么要有这个公式?我举个例子你就明白了。

二、数学关系:一条看不见的锁链

假设连接间隔是 30 ms,从机延迟是 3。那么从机可以连续跳过 3 次连接事件不回复,直到第 4 次才必须应答。这时候主机要等多久才能确认从机还活着?

答案是:30 ms × (3 + 1) = 120 ms。这就是有效连接间隔。

监督超时必须大于这个值。如果监督超时设成 100 ms,那主机在第 100 ms 就判定连接丢失了——但从机还在合法延迟期内,这就造成了误判。

我曾经犯过的错:在一个低功耗传感器项目里,我把监督超时设成了 150 ms,连接间隔 50 ms,从机延迟 2。算一下有效间隔是 150 ms,刚好等于监督超时。结果设备在信号弱的地方频繁断连。后来才意识到,规范要求监督超时必须严格大于有效连接间隔,不能等于。

所以安全做法是:监督超时 ≥ 有效连接间隔 × 2。我个人习惯留 2~3 倍余量。

三、配置策略:不同场景怎么选

这三个参数不是独立调的,它们是一个三角关系。你动一个,另外两个就得跟着调。

场景 1:低功耗优先(电池供电的传感器)

  • 连接间隔:设大一些,比如 100 ms ~ 400 ms
  • 从机延迟:设大,比如 4 ~ 9 次
  • 监督超时:设到 2~3 秒

这样从机大部分时间都在睡觉。有效连接间隔可能达到 1~2 秒,但功耗能降到微安级。

小技巧:如果数据上报频率是每 5 秒一次,可以把连接间隔设成 500 ms,从机延迟设成 9。这样从机在 5 秒内只需要醒来一次,其他连接事件全部跳过。我在一个温湿度计项目里用这个配置,纽扣电池撑了两年。

场景 2:低延迟优先(遥控器、游戏手柄)

  • 连接间隔:设小,7.5 ms ~ 15 ms
  • 从机延迟:设 0
  • 监督超时:设 500 ms ~ 1 s

从机延迟必须为 0,否则按键按下到主机收到会有额外延迟。连接间隔越小,延迟越低,但功耗也越高。

场景 3:吞吐量优先(OTA 升级、大数据传输)

  • 连接间隔:设小,7.5 ms ~ 20 ms
  • 从机延迟:设 0
  • 监督超时:设 500 ms 左右

这里要注意,连接间隔越小,每个连接事件能传的数据包越少(因为要留时间给射频切换)。实际吞吐量不是简单反比关系,我后面会专门讲。

四、参数配置的避坑指南

避坑 1:从机延迟不是越大越好

从机延迟大了,功耗确实低,但数据延迟会变大。而且有些蓝牙芯片的从机延迟实现有 bug,设太大可能导致连接不稳定。我建议从 3~5 开始试,不要一上来就设 499。

避坑 2:监督超时不要设太小

有些工程师为了快速检测断连,把监督超时设成 100 ms。这在信号好的地方没问题,但一旦有干扰,主机就会频繁触发断连重连,反而更耗电。我一般设 2 秒以上,除非有特殊需求。

避坑 3:连接间隔必须能被 1.25 ms 整除

BLE 规范规定连接间隔的单位是 1.25 ms。所以 10 ms 是合法的(8 × 1.25),但 11 ms 就不合法。很多 SDK 会帮你取整,但最好自己算清楚。

五、知识体系总览

下面这张图把三个参数的关系和配置路径串起来了,建议你保存下来对照着看。

BLE 连接参数三角关系 连接间隔 从机延迟 监督超时 有效连接间隔 = 连接间隔 × (延迟 + 1) × (延迟 + 1) 必须大于 配置原则: 低功耗 → 大间隔 + 大延迟 + 大超时 低延迟 → 小间隔 + 零延迟 + 小超时

六、实际项目中的调参步骤

说了这么多理论,咱们落地到实际操作。我一般按这个流程来:

  1. 先定业务需求:数据上报频率是多少?允许的最大延迟是多少?
  2. 算连接间隔:根据延迟要求,选一个合适的连接间隔。比如要求延迟 ≤ 50 ms,那连接间隔就不能超过 50 ms。
  3. 定从机延迟:如果功耗敏感,从机延迟设成 (上报周期 ÷ 连接间隔) - 1。比如上报周期 1 秒,连接间隔 100 ms,延迟就是 9。
  4. 算监督超时:用公式 有效连接间隔 × 2 打底,再留 500 ms 余量。
  5. 验证:用抓包工具(比如 Ellisys 或 Nordic 的 nRF Sniffer)看实际连接参数是否生效。

我的习惯:调参时先写一个 Excel 表,把连接间隔、延迟、有效间隔、超时四列算好,再挑最优组合。这样不会漏掉边界情况。

七、常见问题 Q&A

Q:从机延迟设成 0 和设成 1 有什么区别?

A:设成 0 表示每个连接事件都必须回复,功耗最高但延迟最低。设成 1 表示可以跳过 1 次,功耗降低但延迟增加一个连接间隔。如果你做的是交互式设备,建议设 0。

Q:监督超时设太大有什么坏处?

A:坏处是断连后主机要等很久才能发现,用户体验差。但设太小又容易误判。我一般取 2~6 秒,具体看应用场景。

Q:连接间隔能动态改变吗?

A:可以。BLE 规范支持连接参数更新请求(L2CAP Connection Parameter Update Request)。比如设备在传输大文件时用短间隔,空闲时用长间隔。但要注意,不是所有手机都支持动态更新,iOS 就有一些限制。