3、BLE连接参数调优:连接间隔、从机延迟与监督超时

好,咱们进入BLE功耗调优最核心的部分——连接参数。说实话,我见过太多工程师在这上面栽跟头。明明硬件设计没问题,电池却撑不过一天。一查,全是连接参数没调好。

连接参数有三个关键:连接间隔从机延迟监督超时。它们就像三兄弟,互相牵制。你动一个,另外两个就得跟着调。咱们一个一个说。

3.1 连接间隔(Connection Interval)对功耗的影响

连接间隔,说白了就是主机和从机之间「约好多久聊一次天」。单位是1.25ms的倍数。比如你设了100,那就是125ms聊一次。

这个值直接影响功耗,道理很简单:

  • 间隔越短:设备醒来的次数越多,功耗越高
  • 间隔越长:设备睡得更久,功耗越低

我在一个智能手环项目里遇到过这种情况。客户要求续航30天,但数据要每秒钟更新一次。我一开始把连接间隔设成7.5ms(最小值),结果功耗直接炸了——电池撑不过3天。

后来我做了个测试,数据如下:

连接间隔 每秒唤醒次数 平均电流(μA) 适用场景
7.5ms 133次 450 音频、高速数据
30ms 33次 180 传感器实时上报
100ms 10次 65 周期性数据
500ms 2次 22 低功耗传感器
1000ms 1次 12 温湿度、电池监测

看到了吧?从7.5ms到1000ms,功耗差了将近40倍。你想想看,如果你的应用只是传个温度值,完全没必要用7.5ms。

核心原则:连接间隔 = 满足业务需求的最长值。别贪快,够用就行。

但这里有个坑——连接间隔不是你想设多少就设多少。它受限于两个因素:

  1. 主机的调度能力:手机蓝牙芯片通常支持7.5ms到4s的间隔
  2. 从机的数据缓存:间隔太长,数据积压可能溢出

我个人习惯的做法是:先确定业务需要多快的数据更新,然后把这个时间除以2作为连接间隔。比如需要每秒更新一次,我就设500ms。为什么?因为留了余量给重传。

3.2 从机延迟(Slave Latency)的妙用

从机延迟,这玩意儿很多人不理解。我换个说法你就懂了——它允许从机「偷懒」几次不回复。

正常情况下,每个连接事件从机都得响应。但有了从机延迟,从机可以连续跳过几个连接事件,继续睡觉。比如你设了延迟为4,那从机最多可以连续4次不醒来。

这有什么用?我举个例子。

之前做一款智能门锁,用户希望电池用一年。门锁大部分时间没动静,但开门时要立刻响应。如果只用连接间隔,要么功耗高,要么响应慢。

我的方案是这样的:

  • 连接间隔:100ms
  • 从机延迟:9
  • 有效监听间隔:100ms × (9+1) = 1000ms

什么意思?从机平时每1秒才醒一次,功耗极低。但主机随时可以发数据,从机最晚1秒内能收到。这就是「低功耗 + 快速响应」的平衡。

小技巧:从机延迟的公式是「有效间隔 = 连接间隔 × (从机延迟 + 1)」。你算算看,延迟设得越大,省电效果越明显。

但要注意,从机延迟不是越大越好。我曾经在一个项目中把延迟设成了499(最大值),结果出事了——

警告:从机延迟过大,会导致数据延迟过高。如果主机发了紧急命令,从机要等好几个连接事件才能收到。我建议延迟值不要超过有效间隔需求的2倍。

另外,从机延迟对功耗的节省效果,取决于你的数据发送模式:

  • 周期性上报:延迟效果明显,因为大部分时间没数据
  • 持续流数据:延迟几乎没用,因为每个连接事件都要发数据

嗯,这里要注意——从机延迟只节省了从机的功耗,主机该醒还是得醒。所以如果你做主从一体设备,两边都要考虑。

3.3 监督超时(Supervision Timeout)设置

监督超时,是连接的生命线。它定义了「多久没收到包就算断连」。单位是10ms的倍数,范围100ms到32s。

这个参数怎么设?我直接给经验值:

连接间隔 推荐监督超时 说明
7.5ms - 50ms 1s - 2s 快速断连检测
50ms - 500ms 3s - 6s 平衡稳定性
500ms - 4s 6s - 12s 容忍短暂干扰

为什么不能随便设?我踩过一个坑。

有一次做蓝牙门禁,连接间隔设了1秒,监督超时设了2秒。结果用户把手机放口袋里,信号被遮挡了1.5秒,连接就断了。用户每次都要重新配对,体验极差。

后来我把监督超时改成了6秒,问题解决了。为什么?因为蓝牙协议规定:监督超时 ≥ (连接间隔 × (从机延迟 + 1)) × 3。这是最低要求,但实际项目中我建议留更多余量。

我的经验公式:监督超时 = 连接间隔 × (从机延迟 + 1) × 5。这样既能容忍短暂干扰,又不会等太久才断连。

但监督超时也不能太大。我记得有个同事设了30秒,结果设备掉线了半分钟才发现,用户投诉说「数据停了半天」。所以要根据场景来:

  • 交互式设备(遥控器、键盘):监督超时设短些,1-2秒
  • 传感器节点(温湿度、电量):可以设长些,10-15秒
  • 关键设备(医疗、安防):建议5-8秒,兼顾稳定和响应

3.4 三个参数的联动调优

这三个参数不是孤立的。我画个简单的逻辑图给你看:

连接间隔 ↑ → 功耗 ↓,但延迟 ↑
从机延迟 ↑ → 功耗 ↓,但响应延迟 ↑
监督超时 ↑ → 连接更稳定,但断连检测变慢

约束关系:
监督超时 ≥ 连接间隔 × (从机延迟 + 1) × 3
连接间隔 × (从机延迟 + 1) ≤ 监督超时 / 3

实际调优时,我一般按这个步骤来:

  1. 先定连接间隔:根据数据更新频率,选最长的可行值
  2. 再加从机延迟:在满足响应时间的前提下,尽量大
  3. 最后算监督超时:用公式算出最小值,再乘以1.5-2倍作为安全余量

举个例子。假设你要做一个智能灯泡,要求:

  • 开关响应时间 ≤ 2秒
  • 电池续航尽量长

我的调优过程:

  1. 连接间隔选500ms(满足2秒响应,功耗低)
  2. 从机延迟设3(有效间隔 = 500ms × 4 = 2秒,刚好满足)
  3. 监督超时 = 500ms × 4 × 5 = 10秒

最终参数:连接间隔500ms,从机延迟3,监督超时10秒。实测功耗比默认参数降低了60%。

避坑指南:我曾经在量产前才发现,某个手机品牌的蓝牙芯片对监督超时有限制——不能超过8秒。所以调优时一定要查目标平台的规格书,别想当然。

好了,连接参数这块就这些。记住一句话:参数没有最优,只有最合适。根据你的业务场景,找到那个平衡点,功耗自然就降下来了。