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

一句话总纲:连接间隔 = 理论多久通信一次;从机延迟 = 从机可以跳过多少个连接事件不回复;监督超时 = 多久收不到包就断连

1. 连接间隔 Connection Interval

单位:1.25ms,范围 0x0006 ~ 0x0C80 → 7.5ms ~ 4000ms 公式: 实际间隔 = 值 × 1.25 ms

含义: 主机会按这个周期发起连接事件,每到一个连接事件窗口,主从机都打开射频,交换数据包。

连接事件:建立连接后,主机和从机约定好的一个「射频通信窗口」,就到这个时间点双方才打开射频,交换链路层包;其余时间可以关射频休眠(就是在每个连接间隔到了的时候,主机会发送一个 LL 包(可以是空包、或者带 ATT/GATT 数据),从机收到主机包后,在同一个连接事件窗口里,回复一个 LL 包(带 ACK / 数据))

 

2. 从机延迟 Slave Latency

单位:连接事件个数,范围 0 ~ 499

含义: 从机可以跳过 N 个连接事件,不用应答主机,继续休眠。 只有当第 N+1 个连接事件到来时,才必须起来和主机通信。

从机延迟 = 允许连续忽略多少个连接事件。

有效通信间隔公式

有效间隔 = 连接间隔 × (Slave Latency + 1)

举例: 连接间隔 = 20ms,Slave Latency=4

  • 每 20ms 一次连接事件
  • 从机可以跳过 4 次,第 5 次才唤醒应答
  • 实际主动通信周期 = 20 × (4+1) = 100ms

 发

3. 监督超时 Supervision Timeout

单位:10ms,范围 0x000A ~ 0x0C80 → 100ms ~ 32000ms 公式: 超时时间 = 值 × 10 ms

含义: 主机持续超过这个时长没有收到从机有效的应答包 → 判定链路丢失,断开 BLE 连接。

重点:不是每一次连接事件丢包就断,是连续足够久收不到一次有效应答才断。

规则约束(核心坑): SupervisionTimeout > (ConnInterval × (SlaveLatency +1)) ×1.25 一般工程上建议:监督超时 ≥ 有效间隔 × 2~3 倍,防止单次丢包直接断连。

例子: Conn=20ms,Latency=4 → 有效间隔 100ms SupervisionTimeout 设 300ms(0x1E)

如果超过 300ms,主机一次从机应答都没收到,直接断连。

 

Active 模式:主机一直在轮询你,轮到你的时隙,你必须应答,不能睡觉

Sniff 嗅探模式:跟主机约定好,平时深度睡觉,只每隔一段时间短暂醒一小会儿,听主机有没有消息;其余时间主机轮询你的时候,你听不到、也不用应答

经典蓝牙默认是 Active,想省电必须主动切换到 Sniff

 

 Active 模式(播放音乐、通话时的状态)

微微网是 Master(手机)调度所有时隙。 每个 625μs slot,master 轮流点名网里的 slave。 点名方式:发 POLL 包。

Active 规则

✅ Master 轮到你的时隙 → 发 POLL ✅ 你(从机)必须在本 slot 内回复:可以是 NULL 空包,或者带数据的包。 ❌ 不能假装没听见、不能跳过这次点名睡觉。

时序极简例子:

slot0:master 发 POLL 给耳机 A → 耳机 A 立刻回复 slot1:master 发 POLL 给耳机 B → 耳机 B 立刻回复 slot2:master 发 POLL 给耳机 A → 耳机 A 立刻回复 slot3:master 发 POLL 给耳机 B → 耳机 B 立刻回复

一直轮询,永不间断

  • 优点:随时发数据,延迟极低,适合 A2DP 音乐、HFP 通话
  • 缺点:射频几乎一直打开,功耗很高

只要在 Active,每一次轮到你的时隙,你都要起来应答,不存在 “睡过几次” 的选项

 Sniff 嗅探模式(暂停音乐、待机保连,省电模式)

当音乐暂停,耳机和手机通过 LMP 协商,切换进入 Sniff 模式。 不再每个 slot 都点名。 约定两个核心参数:

  1. Sniff Interval:嗅探周期。多久唤醒一次(单位:slot,625μs)
  2. Sniff Attempt(Sniff 窗口长度):每次醒来,连续监听多少个 slot,等待 master 发数据。

Sniff 工作规则

  1. 在两个 Sniff 窗口之间的漫长时间:耳机深度休眠,射频关闭
  2. 到约定时间点,耳机醒来,打开射频,进入 Sniff Attempt 窗口,等待 master 发包
  3. 在这个窗口内,master 可以给耳机发 ACL 数据;耳机收到就应答
  4. Sniff Attempt 窗口时间耗尽 → 耳机立刻关掉射频,继续睡觉,直到下一个 Sniff Interval 到来
  5. 不在 Sniff 窗口的所有 POLL 点名,耳机都听不到,不会应答

假设: Sniff Interval = 100 slots(100 × 625μs = 62.5ms) Sniff Attempt = 4 slots(每次醒来监听 4 个 slot)

  1. 0~99 slot:耳机睡觉,射频 OFF。master 即使发 POLL,耳机收不到
  2. slot100 开始:耳机唤醒,打开射频,监听 4 个 slot(slot100,101,102,103),这 4 个 slot 内 master 可以发 POLL / 数据包,耳机正常应答
  3. slot104:Sniff 窗口结束 → 耳机重新休眠
  4. 等待下一次 slot200,再次唤醒监听 4 个 slot

 

posted @ 2026-10-09 10:16  踏浪而来的人  阅读(39)  评论(0)    收藏  举报