HCI 功能规范【4.7. LE Host and Controller synchronization】

发布时间:2026/7/5 13:36:43
HCI 功能规范【4.7. LE Host and Controller synchronization】 这部分是4.7 LE Host and Controller synchronization讲的是LE Host 和 LE Controller 在传输 ISO 等时数据时如何进行时间同步。这一节内容很短但它涉及的是 BLE 中比较新的能力主要和LE Isochronous Channels / LE Audio相关不是普通 BLE GATT 通信的重点。1. 这部分整体表述了哪些知识这一节主要表达了 3 个知识点1. LE ISO 数据对时间非常敏感所以 Host 和 Controller 之间需要同步时间信息。 2. Controller 可以在 HCI ISO Data Packet 中携带时间戳让 Host 知道这份 ISO 数据在 Controller/空口侧对应的时间。 3. Host 也可以在发给 Controller 的 SDU 中携带时间戳让 Controller 知道这份 SDU 应该对应什么发送时间。另外Host 还可以使用HCI_LE_Read_ISO_TX_Sync command读取最后一个计划发送的 SDU 的时间戳 以及 packet sequence number2. 这部分主要和 ISO 数据有关这里反复出现了几个关键词isochronous data HCI ISO Data packet SDU time stamp HCI_LE_Read_ISO_TX_Sync这些都说明它不是在讲普通 BLE GATT 数据。普通 BLE GATT 通信主要走ATT L2CAP HCI ACL Data Packet Link Layer Data Channel PDU而这一节讲的是HCI ISO Data PacketISO 数据主要用于等时传输典型场景是LE Audio CIS BIS 语音数据 音频数据 需要稳定时间节奏的数据流所以这一节属于 BLE ISO / LE Audio 相关内容。如果当前重点是 BLE 广播、扫描、连接、GATT、ATT、ACL 数据传输这一节可以先建立概念不需要深入。3. 什么是 isochronous dataisochronous可以理解为等时的 按固定时间节奏传输的 对时间同步有要求的例如音频数据就很典型。音频数据不是只要求“最终能到达”还要求什么时候采集 什么时候发送 什么时候播放 数据之间的时间间隔是否稳定 延迟是否可控 抖动是否可控所以 ISO 数据和普通 GATT 数据不一样。普通 GATT 数据更像这份数据要可靠传过去 晚一点通常还能接受ISO 数据更像这份数据必须按照特定时间节奏传输和处理 太早、太晚、抖动太大都会影响体验例如 LE Audio 中如果音频包到达时间不稳定就可能出现声音卡顿 延迟不稳定 丢帧 播放不同步 左右耳不同步因此 Host 和 Controller 之间需要同步时间信息。4. 为什么 Host 和 Controller 需要 synchronization原文说To synchronize the timing of isochronous data received in the Host with the timing of the isochronous data received in the Controller from the isochronous physical channel...意思是为了让 Host 中接收到的 ISO 数据时间与 Controller 从 ISO 物理信道接收到该数据的时间对应起来Controller 可以在 HCI ISO Data Packet 中包含时间戳。这里的关键是Host 看到数据的时间 不一定等于 Controller 在空口收到数据的时间中间还有Controller 接收 Controller buffer HCI Transport Host HCI 层 Host 上层处理所以 Host 如果只看自己“什么时候收到 HCI ISO Data Packet”并不能准确知道这份 ISO 数据在蓝牙空口上实际是什么时间接收到的而 ISO 数据又对时间敏感所以 Controller 可以把时间戳一起带给 Host。这样 Host 就能把数据内容和空口接收时间对应起来。5. Controller 在 HCI ISO Data Packet 中携带 timestamp原文说the Controller can include a time stamp in each HCI ISO Data packet意思是Controller 可以在每个 HCI ISO Data Packet 中包含一个时间戳。这个时间戳的作用是告诉 Host这份 ISO 数据对应 Controller/空口侧的时间点可以理解为对端设备 ↓ ISO 物理信道 本机 Controller 收到 ISO 数据 ↓ 给数据打上 timestamp HCI ISO Data Packet ↓ Host 收到数据并根据 timestamp 做同步处理所以这个 timestamp 不是普通业务时间也不是 App 层时间而是为了 ISO 数据同步服务的底层时间信息。6. Host 也可以在发送给 Controller 的 SDU 中携带 timestamp原文说Similarly, the Host can include a time stamp in each SDU sent to the Controller.意思是类似地Host 发给 Controller 的每个 SDU 中也可以包含时间戳。这里是反方向Host → ControllerHost 要发送 ISO 数据时可能需要告诉 Controller这个 SDU 对应什么时间 应该按什么时间节奏进行发送可以理解为Host 准备音频 SDU ↓ 携带 timestamp Controller 收到 SDU ↓ 根据 ISO 调度安排发送 空口发送给对端设备这对于音频这类等时数据很重要因为 Controller 不是简单地“收到就立刻发”而是要按照 ISO interval、CIS/BIS 时序进行调度。7. SDU 是什么这里的 SDU 可以简单理解为上层交给下层的一份完整数据单元在 ISO 场景里Host 交给 Controller 的 SDU 可能是一段音频数据或等时数据单元。它会进一步被 Controller 按照 ISO 传输规则进行调度、分片或封装。简单理解Host 上层的一份 ISO 数据 SDU Controller/HCI 层传输时使用 HCI ISO Data Packet 空口侧再按 Link Layer ISO 机制发送不要把 SDU 和 HCI Packet 完全等同。SDU 是上层语义上的数据单元HCI ISO Data Packet 是 Host 和 Controller 之间承载 ISO 数据的 HCI 数据包格式。8. HCI_LE_Read_ISO_TX_Sync command 的作用第二段说A Host can use the HCI_LE_Read_ISO_TX_Sync command at any time to read the time stamp and packet sequence number of the last SDU scheduled for transmission.意思是Host 可以在任何时候使用 HCI_LE_Read_ISO_TX_Sync 命令读取最后一个已经被安排发送的 SDU 的时间戳和包序号。这个命令返回的信息主要包括time stamp packet sequence number它们用于让 Host 知道最后一个被 Controller 安排发送的 SDU 是哪个 它对应的发送时间戳是什么这对 Host 判断 ISO 发送进度、同步状态、音频调度非常有帮助。9. “last SDU scheduled for transmission” 怎么理解这里不是说最后一个已经成功被对端收到的 SDU而是说最后一个已经被 Controller 安排用于发送的 SDUschedule for transmission的重点是“计划发送 / 已进入发送调度”。也就是说Host 可以通过这个命令了解 Controller 当前 ISO 发送调度推进到了哪里。例如 Host 不断给 Controller 送 ISO SDUSDU 100 SDU 101 SDU 102 SDU 103Controller 根据 ISO 时序安排发送。Host 调用HCI_LE_Read_ISO_TX_SyncController 可能告诉 Host最后一个 scheduled for transmission 的 SDU 是 SDU 102 对应 timestamp xxx packet sequence number 102这样 Host 就能知道 Controller 当前发送调度已经推进到哪个 SDU。10. packet sequence number 的作用packet sequence number可以理解为包序号 SDU / ISO 数据发送顺序标识它用于帮助 Host 区分不同 ISO 数据单元。因为 ISO 数据是连续流只有 timestamp 还不够有时还需要序号来判断当前是哪一包 有没有跳包 发送进度到哪里 时间戳和包序号是否匹配在音频、语音等连续数据场景下序号非常重要。11. 这部分和普通 BLE GATT 的关系这部分和普通 BLE GATT 通信关系不大。普通 BLE GATT 数据一般关注MTU ATT 分包 L2CAP HCI ACL Data 连接间隔 Data Length PHY Write Request Write Without Response Notify Indicate而这一节关注的是HCI ISO Data Packet ISO physical channel SDU timestamp ISO TX sync所以它属于另一条技术线BLE ISO / LE Audio / 等时通道如果当前学习目标是掌握常见 BLE App 通信比如广播 扫描 连接 GATT 服务发现 读写特征值 Notify OTA BLE 透传那么这一节不是主线内容。可以先记住这是 LE ISO 数据同步机制相关内容。12. 这部分的关键信息总结12.1 这一节讲的是 LE ISO 数据的 Host-Controller 时间同步它不是普通 ACL/GATT 数据流控内容。12.2 ISO 数据对时间敏感ISO 数据用于等时传输典型场景是音频因此需要时间戳来保证数据流的时间关系。12.3 Controller 可以在 HCI ISO Data Packet 中携带 timestamp目的是让 Host 知道这份 ISO 数据在 Controller / 空口侧对应的接收时间。12.4 Host 也可以在发给 Controller 的 SDU 中携带 timestamp目的是让 Controller 能够按正确的时间节奏调度发送 ISO 数据。12.5 HCI_LE_Read_ISO_TX_Sync 用于读取发送同步信息Host 可以使用这个命令读取最后一个已安排发送的 SDU 的 timestamp 最后一个已安排发送的 SDU 的 packet sequence number12.6 “scheduled for transmission” 不等于“对端已经收到”它表示该 SDU 已被 Controller 安排进入发送调度不等于对端应用层已经处理完成。13. 最核心的一句话这一节可以总结为LE Host and Controller synchronization 主要用于 LE ISO 等时数据传输Controller 可以在 HCI ISO Data Packet 中携带时间戳Host 也可以在发送给 Controller 的 SDU 中携带时间戳从而让 Host、Controller 和 ISO 物理信道之间的数据时间关系保持同步Host 还可以通过 HCI_LE_Read_ISO_TX_Sync 查询最后一个已安排发送 SDU 的时间戳和包序号。对当前 BLE 学习来说最重要的判断是这部分是 LE ISO / LE Audio 相关内容不是普通 BLE GATT 通信主线。普通 BLE 透传、OTA、Notify、Write 主要还是看 HCI ACL Data、ATT、GATT、L2CAP 和 Link Layer 连接事件。