怎样在低功耗蓝牙音频Le Audio识别出来一对TWS耳机?CSIP/CSIS(协调组识别)功能加持buff

在无线音频的世界里,一场静默却深刻的革命正在进行。

它,就是LE Audio。

这不仅仅是一次技术迭代,而是从底层重新定义声音如何被创造、传输和体验的范式转移。其复杂性令人敬畏------它并非单一技术,而是一套精密的生态系统:全新的LC3编解码器以超凡效率重塑音质与功耗的平衡,多重串流音频让真无线立体声达到前所未有的稳定与同步,而音频广播功能则打破了"一对一"连接的百年窠臼,让声音如电台般自由播撒。

然而,正是这种复杂性,构成了我们必须深入学习它的不可辩驳的理由。未来的声音图景将由它绘制:从下一代真无线耳机、无障碍助听设备到公共场所的沉浸式音频导览、多语言广播,乃至元宇宙中清晰无缝的语音交互。不了解LE Audio,将意味着在即将到来的音频浪潮中失去对话的基石。

这不仅仅关乎技术本身,更关乎我们如何连接彼此,如何感知世界。让我们共同开启这段探索之旅,揭开LE Audio的复杂面纱,看清它为何必将成为未来数年里,每一个科技从业者、音频爱好者乃至普通用户都无法忽视的关键命题。

接下来的系列文章,我们将逐步拆解这座精妙的技术大厦。

同时我也录制了一系列的Le audio视频,有兴趣的可以咨询,我会带领你们入门Le audio!翻过大山,眼下皆是风景!!!


视频链接: https://item.taobao.com/item.htm?id=1001969040805&mi_id=000032T4qZX9WZoRwX6YbxlNUaZOfOI6XoxDx0jxsfnwlEc&spm=a21xtw.29178619.0.0


一. 概念

1. 概念

先说这个协议产生的背景,你们就更好的理解这个协议本身了,想象一下,耳机进入TWS时代后,手机跟耳机连接后,TWS的两个耳机是声音同步的,但是怎样做到的呢?我们都知道目前有两种方案:

  • 主耳机做声音转发,也就就是主耳机通过A2DP sink跟手机连接,然后主耳机作为A2DP source或者私有频段/协议转发
  • 主耳机跟手机连接,副耳机通过monitor模式抓取air package,并进行播放

所以哪怕有跟两个设备的链接,但是并没有一个标准协议来规范这个事情,但是le audio有多音频的方案,为了避免大家各自造轮子,所以出来了一个多音频流的unicast的规范,核心点就是为了解决:

假设你是TWS(左右耳)甚至更多的组合功放(比如车内有6音响环绕音),怎么知道这个是一组音频设备,播放一样的声音呢?所有就由来了CSIP/CSIS的协调组识别协议!

协调组识别配置文件CSIP(Coordinated Set Identification Profile)用于设备被识别为一个或多个协调组的组成部分。

协调组定义为配置为支持特定场景的一组设备。协调组示例包括一对助听器、一对耳塞,或一个能接收多声道音频并以协调方式响应控制指令(如音量调高和调低)的扬声器组。其他协调组示例还包括一组传感器节点(如心电图导联、胎压传感器等),这些节点可在客户端设备指令下触发特定测量。

CSIP 对协调组成员设备实际实现的特性和功能不作具体规定。其核心目的是规定一种发现协调组及其成员的机制,并明确设备如何被识别为一个或多个协调组的组成部分。此外,CSIP 还规定了向客户端授予协调组独占访问权限的方式,以避免多个客户端同时访问协调组时发生竞争条件。

对应的服务就是CSIS( Coordinated Set Identification Service)

此配置文件定义了两个角色:协调组控制器角色(Set Coordinator)协调组成员角色( Set Member)

协调组控制器角色由发现协调组及其成员设备的装置实现。一个协调组包含一个或多个协调组成员。

协调组成员角色是指属于协调组组成部分的设备。该角色与组内其他成员共享统一的组标识信息,并根据其他配置文件或高层规范的定义,参与协调用例的运行。

  • 协调组控制器角色必须为GATT客户端。
  • 协调组成员角色必须为GATT服务器。

CSIP/CSIS在整个le audio的架构如下:

2. 特征属性

|--------------------------------------|--------|--------------------------------|-------------|----------------------------|
| 特性名称 | 需求 | 强制性属性 | 可选属性 | 安全权限 |
| 集身份解析密钥 (Set Identity Resolving Key) | M | 读取 (Read) | 通知 (Notify) | 需要加密 (Encryption required) |
| 协调集大小 (Coordinated Set Size) | O | 读取 (Read) | 通知 (Notify) | 需要加密 (Encryption required) |
| 集成员锁 (Set Member Lock) | O | 读取、写入、通知 (Read, Write, Notify) | 无 (None) | 需要加密 (Encryption required) |
| 集成员等级 (Set Member Rank) | C.1 | 读取 (Read) | 无 (None) | 需要加密 (Encryption required) |
| 协调集名称 (Coordinated Set Name) | O | 读取 (Read) | 通知 (Notify) | 需要加密 (Encryption required) |

其中CSIS的primary service的UUID为

CSIS包含的服务属性的UUID为:

3. 错误码

|-------------------------------------------------|----------|-------------------------------------------------------------------------------------------------------------------------------------------|
| 名称 (Name) | 错误代码 | 描述 (Description) |
| 锁定被拒绝 (Lock Denied) | 0x80 | 由于服务器已被锁定,无法授予锁。 (The lock cannot be granted because the server is already locked.) |
| 不允许释放锁 (Lock Release Not Allowed) | 0x81 | 由于其他客户端已锁定协调集,无法释放锁。 (The lock cannot be released because another client has locked the Coordinated Set.) |
| 无效锁定值 (Invalid Lock Value) | 0x82 | 客户端尝试向集成员锁特性值写入一个RFU值。 (The client attempts to write an RFU value to the Set Member Lock characteristic value.) |
| 仅限带外SIRK (OOB SIRK Only) | 0x83 | 服务器仅支持通过带外(OOB)过程暴露集身份解析密钥。 (The server only supports exposing the Set Identity Resolving Key (SIRK) via an out-of-band (OOB) procedure.) |
| 锁已授予 (Lock Already Granted) | 0x84 | 发出请求的客户端是锁的当前所有者。 (The client that made the request is the current owner of the lock.) |
| 长读取过程中值已更改 (Value Changed During Read Long) | 0x85 | 在"长读取特性值"子过程正在进行时,特性值已发生更改。 (A characteristic value has changed while a Read Long Characteristic Values sub-procedure is in progress.) |

4. 广播数据

a. RSI(Resolvable Set Identifier) AD Type

一个可解析集标识符 标识广播设备属于某个协调集。一个RSI必须 通过使用可解析集标识符生成操作 成,并必须 通过使用可解析集标识符解析操作进行解析。格式如下:

ⅰ. RSI生成

设备通过使用一个24位随机数prand和用于对prand进行哈希处理的SIRK来生成一个RSI(可解析集标识符)。

随机数prand必须满足以下要求:

  • 其最高两位有效位(MSB)必须等于0和1,如图4.1所示。
  • prand随机部分中至少应有一位为0。
  • prand随机部分中至少应有一位为1。

该哈希值通过RSI哈希函数sih生成,其输入参数k设置为设备的SIRK,输入参数r设置为prand
hash = sih(SIRK, prand)

prandhash进行拼接,以以下方式生成RSIresolvableSetIdentifier
resolvableSetIdentifier = hash || prand

其中||表示拼接。

ⅱ. RSI解析

如果拥有对应的SIRK,则可使用可解析集标识符解析操作来解析一个RSI。

将RSI分为一个24位的随机部分prand和一个24位的哈希部分hash。RSI的最低有效八位成为hash的最低有效八位,RSI的最高有效八位成为prand的最高有效八位。随后,通过使用哈希函数sih来生成一个localHash值,其输入参数k设置为已知设备的SIRK,输入参数r设置为从RSI中提取出的prand值:
localHash = sih(SIRK, prand)

接着,将localHash值与从RSI中提取出的hash值进行比较。如果localHash值与提取出的hash值匹配,则表示该RSI已被解析。

b. Service Data

服务数据同时暴露了广播设备所属的协调集实例的可读名称,以及包含此CSIS实例的服务的UUID。

服务数据应列出所有包含此CSIS实例的服务的UUID。

服务数据中的协调集名称字符串,应与服务数据所含UUID所引用的服务中所包含的CSIS实例内的协调集名称特性值相同。格式如下:

我们来贴几个示例:

**示例一:**一个UUID为0x1853(CAS)的通用音频服务包含了一个CSIS实例,其协调集名称为"Amy's Earbuds"。该集成员通过在相同的服务数据结构中设置16位UUID值0x1853和协调集名称"Amy's Earbuds",来暴露协调集与包含服务之间的关联。

示例二: 一个虚构的128位UUID为0x42DC30535BBD4761A0C6C5237E572E83的服务包含了另一个CSIS实例,其协调集名称为"Björn's Set"。因此,一个同时属于这两个协调集成员身份的设备,会将两个服务数据实例添加到广播数据或扫描响应数据中:第一个实例是包含16位UUID值0x1853的实例,第二个实例是包含128位UUID值0x42DC30535BBD4761A0C6C5237E572E83和协调集名称"Björn's Set"的实例。

5. 加密box介绍

a. 加密函数e(Encryption function e)

安全函数 e 使用 FIPS-197 定义的 AES-128 位分组密码,从 128 位密钥和 128 位明文数据生成 128 位加密数据:encryptedData = e(key, plaintextData)

根据 FIPS-197 中使用的表示法,密钥的最高有效八位元对应于 key[0],明文数据的最高有效八位元对应于 in[0],加密数据的最高有效八位元对应于 out[0]

注: 安全函数 e 可以在主机中实现,或使用 HCI_LE_Encrypt 命令实现。

b. 可解析集标识符哈希函数 sih(Resolvable Set Identifier hash function sih)

RSI哈希函数 sih 用于生成RSI中使用的哈希值。

以下是RSI哈希函数 sih 的输入变量:

  • k 为 128 位
  • r 为 24 位
  • padding 为 104 位,全部设置为 0

rpadding 拼接以生成 r',r' 被用作安全函数 e 的 128 位输入参数 plaintextData
r' = padding || r

其中 r 的最低有效八位变为 r' 的最低有效八位,padding 的最高有效八位变为 r' 的最高有效八位。

例如,如果24位值 r0x3A98B5,那么 r' 就是 0x000000000000000000000000003A98B5

可解析集标识符函数 sih 的输出为:
sih(k, r) = e(k, r') mod 2^24

安全函数 e 的输出被截断为24位,取 e 的输出结果的最低有效24位 作为 sih 的结果。

c. 算法推导

CSIS中有一个 sample data,有兴趣的人可以自己推导下,验证下算法,尤其是大小端的验证

二. 特征介绍

1. Set Identity Resolving Key

集身份解析密钥(SIRK)特性 暴露了与该协调集相关联的SIRK。属于同一协调集的所有服务器必须使用相同的SIRK。

该SIRK必须是一个128位长的随机数。一个协调集由其SIRK唯一标识。

当本文件中使用术语"SIRK"时,它指的是前一段描述的128位随机数。当提及该特性时,则使用术语"集身份解析密钥特性"。

集身份解析密钥特性的值必须按照表进行格式化。

当客户端读取时,集身份解析密钥特性将返回其关联值。

服务器必须以加密形式、明文形式或通过带外程序暴露SIRK。更高层规范定义服务器何时可以加密形式、明文形式或通过带外程序暴露SIRK。当使用带外程序时,除非更高层规范另有规定,SIRK可以明文或加密形式发送。

如果服务器以加密形式暴露SIRK,则服务器必须 将类型字段值设置为0x00(加密SIRK)。值字段必须设置为加密形式的SIRK,使用第4.5节规定的SIRK加密函数计算得出。

如果服务器在值字段中暴露明文SIRK,则服务器必须将类型字段值设置为0x01(明文SIRK)。

如果一个服务器以加密形式暴露SIRK,则该服务器不得以明文形式暴露同一SIRK。

仅通过带外程序暴露SIRK的服务器必须 拒绝读取SIRK的请求,并回复一个错误码为OOB SIRK Only的错误响应给请求PDU。

该特性可以通过在客户端特性配置描述符 上使用GATT写入特性描述符子过程来配置通知功能。

如果服务器在连接状态下被配置了新的SIRK,并且客户端特性配置描述符的值已配置为通知,则服务器必须将新的特性值通知给客户端。

如果服务器在未连接状态下被配置了新的SIRK,并且客户端特性配置描述符的值已配置为通知,则服务器在重新连接到已配对的客户端时必须通知该特性值。

2. Coordinated Set Size

协调集大小特性暴露了构成该协调集的设备数量。

协调集大小特性的允许值是0x01至0xFF范围内的整数。值0x00是禁止的

协调集大小特性的值必须按照表进行格式化。

3. Set Member Lock

集成员锁特性允许客户端对服务器进行独占访问,以最小化当多个客户端同时访问同一协调集的多个服务器时可能发生的竞态条件。

更高层规范定义了何时可以使用集成员锁特性,以及哪些资源受制于独占访问。

集成员锁特性的允许值为已解锁 (对应数值0x01)和已锁定(对应数值0x02);所有其他值均为RFU(保留待用)。

集成员锁特性的值必须按照表进行格式化。

客户端可以写入集成员锁特性

如果客户端尝试向集成员锁特性 写入一个RFU值,服务器必须 回复一个错误码为Invalid Lock Value的错误响应(见表1.2)。

当客户端读取时,集成员锁特性 返回其关联值。服务器必须 向所有客户端暴露相同的集成员锁特性值。

该特性可以通过在客户端特性配置描述符 上使用GATT写入特性描述符子过程来配置通知功能。

如果该特性值在连接状态下发生改变,并且客户端特性配置描述符的值已配置为通知,则服务器必须将新的特性值通知给客户端,除非该特性值是由于该客户端写入新值而发生改变的。

如果该特性值在未连接状态下至少发生一次改变,并且客户端特性配置描述符的值已配置为通知,则服务器在重新连接到已配对的客户端时必须通知当前的特性值。

如果服务器和客户端已配对,则集成员锁特性的值应在TCSIS(lock_timeout)超时内(见第5.3.1.1节)跨连接保持持久性。

集成员锁特性 的值设置为Unlocked时,该CSIS实例被称为处于"解锁状态 ";当集成员锁特性 的值设置为Locked时,该CSIS实例被称为处于"锁定状态"。

a. 锁定请求

如果客户端请求向集成员锁特性 写入Locked(即客户端请求锁定),并且集成员锁特性 的值等于Unlocked,则服务器必须写入请求的值,回复写入响应(即服务器向客户端授予锁),并设置一个计时器为TCSIS(lock_timeout)。

如果客户端请求向集成员锁特性 写入Locked,且集成员锁特性 的值等于Locked,并且锁已授予该客户端,则服务器必须 回复一个错误码为Lock Already Granted的错误响应),并且不得重置TCSIS(lock_timeout)计时器。

如果客户端请求向集成员锁特性 写入Locked,且集成员锁特性 的值等于Locked,但锁并未授予该客户端,则服务器必须 回复一个错误码为Lock Denied的错误响应,并且不得重置TCSIS(lock_timeout)计时器。

如果计时器TCSIS(lock_timeout)到期,则服务器必须集成员锁特性 的值设置为Unlocked。计时器TCSIS(lock_timeout)的值应为60秒,或可由更高层规范定义。过高或过低的TCSIS(lock_timeout)值可能导致不良行为。例如,如果客户端锁定协调集以更改服务器上的音量,而TCSIS(lock_timeout)设置为1秒,则可能在客户端更改完协调集中所有服务器上的音量之前,TCSIS(lock_timeout)就已到期。另一方面,如果TCSIS(lock_timeout)设置为360秒,若前一个客户端未解锁协调集,则其他客户端在6分钟内都无法更改协调集中服务器上的音量。

当服务器和客户端未配对,并且在集成员锁特性 的值设置为Locked时断开连接,服务器应在断开连接后立即将集成员锁特性 的值设置为Unlocked

b. 锁释放

如果客户端请求向集成员锁特性 写入Unlocked(即客户端请求释放锁),且集成员锁特性 的值等于Locked,并且锁已授予该客户端,则服务器必须 写入请求的值并回复写入响应。服务器必须停止TCSIS(lock_timeout)计时器。

如果客户端请求向集成员锁特性 写入Unlocked,且集成员锁特性 的值等于Locked,但集成员锁 并未授予该客户端,则服务器不得 写入该值,并且必须 回复一个错误码为Lock Release Not Allowed的错误响应。

如果客户端请求向集成员锁特性 写入Unlocked,且集成员锁特性 的值已设置为Unlocked,则服务器应回复写入响应。

4. Set Member Rank

集成员等级特性 暴露一个数值,该数值在协调集内部必须是唯一的,并允许客户端按照定义的顺序(例如,按等级递增的顺序)对属于协调集一部分的服务器执行操作。

集成员等级特性的允许值是从0x01开始的正整数。

属于同一协调集的服务器所暴露的集成员等级特性必须是从0x01开始到协调集大小为止的连续整数。

集成员等级特性的值必须按照表进行格式化。

5. Coordinated Set Name

协调集名称特性应为协调集的名称。该特性值为一个UTF-8字符串,最小长度为0个八位组,最大长度为128个八位组。

三. 连接流程梳理

我们以CSIP跟CSIS的过程来介绍下流程,如果你对协议的角色把控不好,可以把CSIP想象为手机,把CSIS想象为TWS耳机(左右耳)

1. CSIP流程

这个你可以考虑成手机连接耳机的场景,然后再来看下以下的流程图可以更容易理解点

a. 初始化发现阶段

  • BLE扫描: Set Coordinator持续扫描寻找包含RSI AD类型的广播数据
  • 连接首个设备: 发现首个设备后,建立GATT连接

我们来截图一个btsnoop来看下广播

b. 属性发现与基本信息读取

这里面其实SIRK如果set size为1,那么其实没有多大的作用

SIRK的读取

Set Size的读取

Rank的读取

下面分别是左右耳的Rank

c. 单设备场景处理 (Set Size = 1)

  • 直接完成: 无需进一步发现
  • 建立协调集: 即使只有一个设备,也将其视为一个协调集
  • 应用控制: 可以直接开始控制操作

d. 多设备场景处理 (Set Size ≥ 2)

ⅰ. 重新扫描阶段
  • 基于SIRK的过滤: 使用首个设备的SIRK作为过滤条件
  • RSI解析: 对扫描到的每个RSI进行解析验证
  • 连接策略: 有序连接新发现的设备
ⅱ. SIRK验证流程

2. CSIS流程

这个你可以理解为我们作为TWS耳机角色,做一些前置的动作,以便被手机连接

我们通过几个阶段来介绍下

a. 初始化阶段

这个阶段主要做以下事情:

  • SIRK分配: 左右耳机在生产时被赋予相同的128位SIRK
  • Rank分配: 左耳分配Rank=1,右耳分配Rank=2
  • Set Size设置: 固定为2(一对耳机)
  • GATT服务配置: 实现完整的CSIS服务,包含所有5个特性

b. 广播阶段

c. 连接第一个设备阶段

以其中一个耳机来举例,比如左耳机

d. 连接另外一个设备阶段

以连接另外一个耳机来举例

相关推荐
Wireless_Link3 天前
蓝牙低功耗音频 Le audio音量偏移控制协议(VOCS)剖析
ble audio·le audio·蓝牙低功耗音频·le audio vocs·volume offset
Wireless_Link7 天前
Android Le audio hardware native接口
le audio·le audio安卓·安卓le audio api
Wireless_Link11 天前
蓝牙低功耗音频 Le audio音频输入控制协议(AICS)剖析
le audio·le audio aics·低功耗蓝牙音频aics·低功耗音频aics·lea aics
Wireless_Link17 天前
蓝牙低功耗音频 Le audio麦克风控制协议(MICP/MICS)剖析
le audio·低功耗蓝牙音频·le audio micp·le audio mics·micp/mics
byte轻骑兵17 天前
【LE Audio】BAP协议精讲[1]: 开启低功耗音频新纪元
人工智能·音视频·蓝牙·le audio·bap
Wireless_Link24 天前
Le audio也有通话功能了!Le audio之通话控制介绍,涵盖CCP/TBS的技术细节
le audio·le audio通话·lea tbs·lea ccp·低功耗音频通话
Wireless_Link1 个月前
Le audio之媒体控制(Media control)介绍,涵盖MCP/MCS的技术细节
le audio·le audio mcp·le audio mcs·le audio媒体控制·mcp/mcs
墨染倾城殇2 个月前
蓝牙模块低功耗革命:LE Audio多通道音频技术详解(TWS同步/家庭影院/VR音效)
蓝牙模块·低功耗蓝牙模块·le audio
jiang_bluetooth1 年前
Bluetooth LE AUDIO架构概述
架构·蓝牙·ble audio·le audio