想象一下这样的场景:你戴着无线耳机听音乐,左耳和右耳的声音必须严格同步,否则音乐就会变得支离破碎;或者在一个大型会议室里,多个听众的助听器需要同时接收同一声源,不能有丝毫延迟。这些场景对蓝牙提出了一个传统BLE难以满足的要求——等时(Isochronous)传输。
蓝牙5.2引入的等时物理信道(Isochronous Physical Channel)正是为这类“时间敏感”的数据传输而设计的。而承载这些数据的,就是本文要深入剖析的主角——等时物理信道PDU。
1. 什么是等时传输?
在深入了解PDU之前,先搞清楚一个概念:等时(Isochronous)到底是什么意思?
蓝牙协议中有三种数据传输方式:
| 传输类型 | 特点 | 典型应用 |
|---|---|---|
| 异步(Asynchronous) | 数据必须可靠送达,时间不重要 | 文件传输、网页浏览 |
| 同步(Synchronous) | 数据有固定的时间约束,速率恒定 | 传统蓝牙语音 |
| 等时(Isochronous) | 数据有时间约束,但速率可以变化 | LE Audio音频流 |
等时传输的核心是:数据有“保质期”——如果在规定时间内没有成功发送,数据就会被丢弃,因为“过期的数据”对接收端已经没有意义。
等时物理信道正是为实现这种传输而设计的专用信道,它独立于传统的广播信道和数据信道
2. PDU的整体结构
等时物理信道PDU的格式与数据信道PDU类似,但也有自己的特点。它的基本结构是:
Header(16位):包含控制信息,具体格式取决于PDU用于CIS还是BIS
Payload(0-251字节):实际传输的等时数据
MIC(可选,32位):当数据需要加密时存在,用于消息完整性检查
等时物理信道PDU分为两种类型:
| PDU类型 | 全称 | 适用场景 | 通信方式 |
|---|---|---|---|
| CIS PDU | Connected Isochronous PDU | 连接型等时流 | 点对点,双向 |
| BIS PDU | Broadcast Isochronous PDU | 广播型等时流 | 一对多,单向 |
3. CIS PDU
CIS(Connected Isochronous Stream)是在已建立BLE连接的两个设备之间传输等时数据的逻辑传输方式。它最典型的应用就是LE Audio的“多流音频”——比如手机同时向左耳机和右耳机发送同步的音频流。
3.1 CIS PDU头部格式
CIS PDU的头部为16位,布局如下:
各字段的含义如下:
| 字段 | 位数 | 描述 |
|---|---|---|
| LLID | 2 bits | 链路层标识符,指示PDU类型 |
| SN | 1 bit | 序列号,类似数据信道PDU |
| NESN | 1 bit | 下一个期望的序列号,用于ACK/重传 |
| CIE | 1 bit | 关闭等时事件(Close Isochronous Event) |
| NPI | 1 bit | 空PDU指示(Null PDU Indicator) |
| RFU | 2 bits | 保留供未来使用 |
| Length | 8 bits | 有效载荷长度 |
3.2 LLID:区分数据类型
与数据信道PDU类似,CIS PDU也使用LLID来区分载荷类型:
3.3 SN与NESN:有确认的重传机制
CIS支持双向通信,使用确认协议。SN和NESN的作用与数据信道PDU完全相同:
发送端每发一个新包,
SN翻转一次接收端通过
NESN告诉发送端期望的下一个SN如果
NESN与期望不符,发送端会重传数据包
这意味着CIS在保证时间约束的同时,也提供了可靠性。
3.4 CIE:提前结束事件的“快捷开关”
CIE(Close Isochronous Event)是CIS PDU独有的控制位。当接收端在某个子事件中成功收到数据后,可以将CIE置1,告诉发送端这个等时事件可以提前结束,不需要等待所有预定的子事件都执行完。这有助于节省功耗和空口资源。
3.5 NPI:识别“空包”
NPI(Null PDU Indicator)用于指示这是一个空PDU。当设备需要发送ACK但没有实际数据时,可以发送一个带NPI=1的空包,既完成了确认,又节省了空口带宽。
4. BIS PDU
BIS(Broadcast Isochronous Stream)用于一对多的广播等时通信。它的典型应用是Auracast广播音频——一个音频源设备可以向无数个接收设备同时广播音频流。
BIS与CIS最根本的区别是:BIS没有确认机制。数据从广播源单向发出,接收端不会回复任何ACK。这降低了复杂性,但也意味着无法保证每个接收端都能成功收到数据。
4.1 BIS PDU头部格式
BIS PDU的头部也是16位,但布局比CIS简单得多:
4.2 LLID:与CIS相同,但用途略有不同
BIS PDU的LLID同样用于区分数据类型,但由于BIS没有ACK机制,SN和NESN这些流控位都不需要了。
4.3 CSSN与CSTF:广播控制的“信号灯”
BIS引入了两个CIS中没有的控制位:
CSSN(Control Subevent Sequence Number,3位):控制子事件的序列号
CSTF(Control Subevent Transmission Flag,1位):控制子事件传输标志
这两个字段用于在BIS事件中指示是否存在控制子事件(Control Subevent)
为什么BIS需要控制子事件?
在连接型的CIS中,控制信息(如信道映射更新)可以通过ACL连接来传输。但BIS是无连接的广播,广播源无法通过ACL告诉所有接收端“我要换信道了”。因此,BIS需要通过控制子事件来向所有接收端广播控制信息。
CSTF标志告诉接收端:“这个BIS事件后面跟着一个控制子事件,请注意接收”。CSSN则帮助接收端识别控制信息的版本变化。
5. 子事件(Subevent)
无论是CIS还是BIS,等时物理信道的数据传输都是以事件(Event)和子事件(Subevent)为单位组织的。
一个等时事件包含一个或多个子事件。每个子事件是在特定时间点上的一段传输机会:
CIS中:中央(Central)在子事件中发送一次,外设(Peripheral)响应一次
BIS中:广播源在子事件中发送数据,接收端只收不发
子事件的数量是可配置的,更多的子事件意味着更多的重传机会,但也意味着更高的功耗和空口占用。
5.1 CIS的刷新超时(Flush Timeout)
在CIS中,每个数据载荷都有一个刷新超时(Flush Timeout, FT)参数。它定义了该数据包在多少个CIS事件内必须被成功发送(收到ACK)。如果在FT个事件内没有成功,这个数据包就会被丢弃(Flush)——因为它已经“过期”了。
这正是等时传输的精髓:宁可丢弃过期的数据,也不要让接收端等到“迟到的数据”。
5.2 BIS的预传输(Pre-transmission)
BIS由于没有ACK,无法通过重传来提高可靠性。但它可以通过预传输(Pre-transmission)来弥补——在数据实际需要的时刻之前,提前多次发送同一个数据包,增加接收端成功收到的概率。
6. CIS与BIS对比
| 特性 | CIS PDU | BIS PDU |
|---|---|---|
| 通信方式 | 点对点,双向 | 一对多,单向 |
| 确认机制 | 有(SN/NESN) | 无 |
| 头部控制位 | SN、NESN、CIE、NPI | CSSN、CSTF |
| 典型应用 | 手机→耳机多流音频 | Auracast广播音频 |
| 可靠性 | 有重传保证 | 靠预传输提升概率 |
7. 总结
等时物理信道PDU是蓝牙LE Audio的基石。它的设计体现了对时间敏感性的深刻理解:
CIS PDU通过
SN/NESN提供可靠的双向等时传输,CIE让事件可以提前结束,FT机制确保过期的数据被及时丢弃BIS PDU通过
CSSN/CSTF支持单向广播等时传输,控制子事件弥补了无连接场景下控制信息无法传递的问题子事件机制让等时传输拥有了“时间切片”的精细调度能力,重传和预传输则在可靠性和时效性之间找到了平衡
无论是手机与耳机之间的多流音频,还是Auracast的公共广播音频,这些看似简单的用户体验背后,都依赖于等时物理信道PDU在链路层的精密设计。理解了它,你就理解了LE Audio的底层密码。