当前位置: 首页 > news >正文

【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 连接

  • 建立过程

    1. Central 发起 LE Create Connection
    2. Peripheral 响应 LE Connection Complete
    3. 双方协商连接参数:
      • Connection Interval:多久进行一次连接事件 (7.5ms ~ 4s)。
      • Slave Latency:从机可以跳过的事件数。
      • Supervision Timeout:若在此时间内未收到任何有效数据包 → 断开。
  • 承载内容

    • 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

触发原因:

  1. 设备超出连接范围: Master 和 Slave 之间的距离过远,导致射频信号太弱,数据包无法被成功接收。

  2. 强烈射频干扰: 周围有强大的 2.4GHz 信号源(如 Wi-Fi、微波炉),干扰了 BLE 数据包的传输,导致数据丢失。

  3. 设备突然断电或重启: 任何一方设备突然断电,没有机会发送连接终止信号,另一方设备会因为收不到心跳包而超时。

  4. 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 为单位。

  • 重要规则:

    1. Supervision Timeout > (1 + Slave Latency) * Connection Interval * 2

    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 的“心跳保活”机制,用来判断链路是否断开。

  • 触发原因通常是:

    1. 无线信道丢包严重

    2. 参数设置不合理(Timeout 太短)

    3. LL 控制过程未完成(如 Data Length Update 卡住)

    4. 设备异常(firmware/host 问题)

  • btsnoop log 中,确认方法是:

    • Disconnection Complete event → Reason=0x08

    • 时间差 ≈ Supervision Timeout

http://www.dtcms.com/a/362612.html

相关文章:

  • 无人机系统理论基础(有课件)
  • 无人机小尺寸RFSOC ZU47DR板卡
  • 无人机传感器技术要点与难点解析
  • 【无人机三维路径规划】基于遗传算法GA结合粒子群算法PSO无人机复杂环境避障三维路径规划(含GA和PSO对比)研究
  • 基于YOLOv4的无人机视觉手势识别系统:从原理到实践
  • C++面试题
  • 股指期货是股市下跌的原罪,还是风险对冲好帮手?
  • 什么是 DNSSEC?
  • 面试tips--MySQLRedis--Redis 有序集合用跳表不用B+树 MySQL用B+树作为存储引擎不用跳表:原因如下
  • 278-基于Django的协同过滤旅游推荐系统
  • 详解Grafana k6 的阈值(Thresholds)
  • os.path:平台独立的文件名管理
  • sql执行过程
  • Tomcat 全面指南:从目录结构到应用部署与高级配置
  • Java-Spring入门指南(一)Spring简介
  • WPF曲线自定义控件 - CurveHelper
  • 大模型是如何“学会”思考的?——从预训练到推理的全过程揭秘
  • 【完整源码+数据集+部署教程】PHC桩实例分割系统源码和数据集:改进yolo11-Faster-EMA
  • 无需服务器,免费、快捷的一键部署前端 vue React代码--PinMe
  • 搭建分布式Hadoop集群[2025] 实战笔记
  • 【golang长途旅行第36站】golang操作Redis
  • 【自记】Python 中 简化装饰器使用的便捷写法语法糖(Syntactic Sugar)示例
  • ARM汇编记忆
  • 【53页PPT】华为制造行业数字化转型工业互联网智能制造解决方案(附下载方式)
  • MySQL事务+MVCC(精简版,包教包废)
  • 2025华为最值得入的耳机,真的赢麻了!
  • 结构抗震与土木工程研究
  • SylixOS 下的信号系统
  • Vue 3 + TypeScript 现代前端开发最佳实践(2025版指南)
  • Chrome浏览器调用ActiveX控件之allWebOffice在线编辑控件