【android bluetooth 协议分析 21】【ble 介绍 3】【ble acl Supervision Timeout 介绍】
1. BLE ACL 链路简介(基于 Bluetooth Core 5.3)
在 BLE 中,ACL(Asynchronous Connection-Less)链路 是主机(Central)与从机(Peripheral)之间的逻辑数据通道,承载了所有上层协议(如 L2CAP、ATT、GATT)的数据交互。它对应的物理载体是 LE Link Layer 连接。
-
建立过程
- Central 发起
LE Create Connection
。 - Peripheral 响应
LE Connection Complete
。 - 双方协商连接参数:
- Connection Interval:多久进行一次连接事件 (7.5ms ~ 4s)。
- Slave Latency:从机可以跳过的事件数。
- Supervision Timeout:若在此时间内未收到任何有效数据包 → 断开。
- Central 发起
-
承载内容
- L2CAP 信令
- ATT/GATT 数据(读写服务、特征值)
- Link Layer Control PDUs(如 Version Exchange、Data Length Update、PHY Update 等)
换句话说,BLE 世界里的所有有用数据都走 ACL link。
2. BLE Supervision Timeout 的机制
2.1 定义
-
Supervision Timeout 是在连接建立时由双方约定的一个定时器,用来检测“链路是否还存活”。
-
单位:10 ms
-
范围:100 ms ~ 32 s(0x000A ~ 0x0C80)
-
规范要求:
Supervision Timeout > (1 + Slave Latency) * Connection Interval * 2
2.2 触发条件
当在 Supervision Timeout 时间内,控制器没有收到来自对方的 任何数据包(即使是 LL_EMPTY_PDU 也算),就会判定连接丢失,自动断开 ACL,并上报 Disconnection Complete Event。
HCI Event 的 Reason 字段:
- 0x08 = Connection Timeout
这就是 btsnoop 中你看到的现象。
3. 造成 Supervision Timeout 的原因
Supervision Timeout 触发的根本原因就是:设备在监管超时时间内,没有接收到任何有效数据包。这个数据包可以是真实的应用数据,也可以是空数据包(用于维持连接的心跳)。
假设:
-
Connection Interval = 100ms
-
Slave Latency = 4
-
Supervision Timeout = 1s (1000ms)
正常工作: 在正常情况下,每隔 100ms,Master 和 Slave 都会进行一次连接事件。即使 Slave Latency 设置为 4,Slave 也可以在它需要发送数据的时候响应 Master,从而让连接保持活跃。每次成功的数据交换后,Supervision Timeout 的计时器都会被重置为 0。
触发原因:
-
设备超出连接范围: Master 和 Slave 之间的距离过远,导致射频信号太弱,数据包无法被成功接收。
-
强烈射频干扰: 周围有强大的 2.4GHz 信号源(如 Wi-Fi、微波炉),干扰了 BLE 数据包的传输,导致数据丢失。
-
设备突然断电或重启: 任何一方设备突然断电,没有机会发送连接终止信号,另一方设备会因为收不到心跳包而超时。
-
CPU 休眠或挂起: 如果设备的 CPU 进入深度休眠,并且没有配置正确的唤醒机制来处理连接事件,它就会错过多次连接事件,最终导致超时。
触发过程:
-
Master 发送一个数据包,但由于上述原因,Slave 没有收到。
-
Master 在下一个 Connection Interval 再次发送,Slave 依然没有收到。
-
这个过程一直持续,Master 的 Supervision Timeout 计时器持续累加。
-
当计时器累加到 1000ms 时,Master 会认为 Slave 已经断开连接,并主动终止连接。同样,如果 Slave 在超过 1000ms 的时间内没有收到 Master 的任何数据,它也会主动断开连接。
总结:
Supervision Timeout 是一个为了保证连接可靠性而设计的容错机制。理解并正确设置这三个参数对于优化 BLE 设备的功耗和性能至关重要。如果你的设备经常出现 Supervision Timeout,就需要检查连接环境、射频信号质量以及设备的软件逻辑,特别是休眠和唤醒机制是否正常工作。
根据规范和实际系统实现,可能原因有以下几类:
(1)物理层问题
- 距离过远 → 信号衰减,收不到包。
- 干扰严重 → 例如 2.4GHz Wi-Fi 干扰,导致连续丢包。
- 天线/硬件问题 → 硬件链路质量差,丢包率高。
(2)连接参数设置不合理
-
Connection Interval 太大 + Supervision Timeout 设置偏小:
如果 Supervision Timeout 刚好等于 2~3 个 Interval,很容易在几次丢包后就触发。 -
Slave Latency 较大:
Peripheral 合法跳过多个连接事件,如果 Timeout 设置得太短,会误判为链路断开。
(3)Link Layer 控制过程未完成
-
BLE 在连接存续期间可能会触发一些链路层过程:
- Data Length Update
- PHY Update
- Channel Map Update
- Encryption Procedure
-
如果在这些过程中,某一方没能按时回应,或者回应丢失 → 超过 supervision timeout → 断开。
-
车机收到了 LE Meta: LE Data Length Change(说明 Data Length Update 程序开始了)。
-
之后没有再收到任何 LL 包。
-
可能原因:
-
对方(手机)没有继续发包(例如进入省电、异常退出)。
-
车机的回应未被对方收到,导致双方“对话中断”。
-
最终超时,控制器判定失联 → reason=0x08。
-
(4)设备异常
-
手机或车机的 BLE 控制器 firmware crash / reset。
-
Host 层主动停止调度 LL 包(比如系统休眠 Bug)。
4. 关键参数讲解
在 BLE(低功耗蓝牙)ACL(异步无连接)连接中,Supervision Timeout(监管超时) 是用来判断连接是否中断的关键参数。当设备在预设的时间内没有收到任何数据包时,它会认为连接已经断开,从而触发 Supervision Timeout。
下面我们来详细解释一下这三个核心参数。
4.1 Connection Interval(连接间隔)
Connection Interval 是指两个设备(Master 和 Slave)之间定期交换数据包的时间间隔。这个时间间隔是由 Master 设备在建立连接时设置的。
-
含义: 它是两次连接事件(Connection Event)之间的时间间隔。在每个连接事件中,Master 和 Slave 都有机会互相发送数据。
-
参数范围: 7.5ms 到 4s,以 1.25ms 为单位。
-
使用场景:
-
短连接间隔(如 10-50ms): 适用于需要低延迟、高吞吐量的应用,比如实时游戏或传感器数据流。缺点是功耗会更高。
-
长连接间隔(如 1s-4s): 适用于只需要偶尔发送数据的应用,比如智能门锁或温度计。这样可以显著降低功耗,延长电池寿命。
-
4.2 Slave Latency(从机延迟)
Slave Latency 是一个非常重要的省电参数。它允许 Slave 设备在指定的连接事件中跳过(不响应)Master 的数据包,从而进入休眠状态。
-
含义: Slave 设备可以跳过的连接事件的最大次数。
-
参数范围: 0 到 499。
-
使用场景:
-
Slave Latency = 0: Slave 必须在每个连接事件中响应 Master。这提供了最低的延迟,但功耗也最高。
-
Slave Latency > 0: 适用于那些数据发送不频繁的 Slave 设备。例如,一个温度传感器每 10 秒才需要更新一次数据。即使连接间隔是 100ms,它可以设置一个较高的 Slave Latency,只在需要时才唤醒并响应,其余时间保持休眠。
-
4.3 Supervision Timeout(监管超时)
Supervision Timeout 是连接的心跳监测器。它定义了设备可以容忍的、在没有任何数据包(包括空数据包)交换的情况下,连接被视为断开的最长时间。
-
含义: Master 或 Slave 认为连接断开的时间阈值。
-
参数范围: 100ms 到 32s,以 10ms 为单位。
-
重要规则:
-
Supervision Timeout > (1 + Slave Latency) * Connection Interval * 2
-
Supervision Timeout >= 100ms
-
-
使用场景: 这是一个容错机制,用于处理各种异常情况,如设备突然断电、超出连接范围或受到强信号干扰。
5. 如何在 btsnoop 中确认
Step 1. 查连接参数
在 LE Connection Complete
中找:
Connection Interval: 50 ms
Slave Latency: 0
Supervision Timeout: 720 (7.2s)
Step 2. 找最后一包数据
在你 case 中:
Rcvd LE Meta (LE Data Length Change)
Step 3. 看 Disconnection Complete
> HCI Event - Disconnection Complete (0x05)Reason: 0x08 (Connection Timeout)
Step 4. 计算时间差
最后一包数据时间戳 → Disconnection Complete 时间戳 ≈ 7.2s → 对应 Supervision Timeout → 说明链路确实是因为超时断开。
6. 例子
6.1 建立连接
9934 2025-08-21 15:22:53.915592 controller host HCI_EVT 34 Rcvd LE Meta (LE Enhanced Connection Complete) SuccessFrame 9934: 34 bytes on wire (272 bits), 34 bytes captured (272 bits)
Bluetooth
Bluetooth HCI H4
Bluetooth HCI Event - LE MetaEvent Code: LE Meta (0x3e)Parameter Total Length: 31Sub Event: LE Enhanced Connection Complete (0x0a)Status: Success (0x00)Connection Handle: 0x000aRole: Currently the Master for specified BD_ADDR (0x00)Peer Address Type: Public Device Address (0x00)BD_ADDR: 64:f0:ad:44:42:8e (64:f0:ad:44:42:8e)Local Resolvable Private Address: 00:00:00_00:00:00 (00:00:00:00:00:00)Peer Resolvable Private Address: 00:00:00_00:00:00 (00:00:00:00:00:00)Connection Interval: 24 (30 msec)Connection Latency: 0 (number events)Supervision Timeout: 500 (5 sec)Master Clock Accuracy: 251-500 ppm (0x00)
6.2 最后一包数据
10316 2025-08-21 15:24:09.851322 controller host HCI_EVT 14 Rcvd LE Meta (LE Data Length Change) Frame 10316: 14 bytes on wire (112 bits), 14 bytes captured (112 bits)
Bluetooth
Bluetooth HCI H4
Bluetooth HCI Event - LE MetaEvent Code: LE Meta (0x3e)Parameter Total Length: 11Sub Event: LE Data Length Change (0x07)Connection Handle: 0x000aMax TX Octets: 27Max TX Time: 328µsMax RX Octets: 125Max RX Time: 2120µs
6.3 timeout
10317 2025-08-21 15:24:14.822037 controller host HCI_EVT 7 Rcvd Disconnect Complete SuccessFrame 10317: 7 bytes on wire (56 bits), 7 bytes captured (56 bits)
Bluetooth
Bluetooth HCI H4
Bluetooth HCI Event - Disconnect CompleteEvent Code: Disconnect Complete (0x05)Parameter Total Length: 4Status: Success (0x00)Connection Handle: 0x000aReason: Connection Timeout (0x08)
7. 总结
-
ACL link 是 BLE 连接的基础,承载所有数据交互。
-
Supervision Timeout 是 BLE 的“心跳保活”机制,用来判断链路是否断开。
-
触发原因通常是:
-
无线信道丢包严重
-
参数设置不合理(Timeout 太短)
-
LL 控制过程未完成(如 Data Length Update 卡住)
-
设备异常(firmware/host 问题)
-
-
在 btsnoop log 中,确认方法是:
-
Disconnection Complete
event → Reason=0x08 -
时间差 ≈ Supervision Timeout
-