欢迎光临
我们一直在努力

le audio broadcast source的周期/BIG广播流程

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

它,就是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

Le Audio文章目录:

还在为蓝牙BLE Audio的学习苦恼吗?安排下,让你一文彻底了解Le Audio蓝牙低功耗音频的技术-CSDN博客

———————————————————————————————————————————

一. 周期广播流程

我们来拆解下流程,分别介绍下以下几个command

1. HCI_LE_Set_Extended_Advertising_Parameters 指令介绍

该命令是 蓝牙 5.0 引入的 HCI 命令(Opcode 0x0036),用于配置 扩展广告(Extended Advertising)的参数。与传统的 LE_Set_Advertising_Parameters 相比,它支持更多的广告类型、更灵活的 PHY(1M、CODED、2M)、更大的数据载荷以及多个广告集。

参数

长度

说明

Advertising_Handle

1 octet

广告集句柄,范围 0x00–0xEF。用于标识要配置的广告实例(可同时运行最多 240 个广告集)。

Advertising_Event_Properties

2 octets

位掩码,定义广告事件的属性。常用取值(Bit 0~15): • 0x0001:可连接扫描(Connectable + Scannable) • 0x0002:可扫描(Scannable) • 0x0004:可定向(Directed) • 0x0008:高通广播(High Duty Cycle) • 0x0010:传统广告(Legacy) • 0x0020:匿名广告(Anonymous) • 0x0040:包含 TX 功率(Include Tx Power)

Primary_Advertising_Interval_Min

3 octets

主广告间隔最小值,单位 0.625 ms范围 0x000020 到 0xFFFFFF,对应 20 ms ~ 10485.76 s。实际间隔为 Min ≤ 实际 ≤ Max

Primary_Advertising_Interval_Max

3 octets

主广告间隔最大值(同上,通常设置 Min = Max 以获得固定隔)。

Primary_Advertising_Channel_Map

1 octet

主广告使用的信道(37/38/39),位掩码: • 0x01 = 37 信道 • 0x02 = 38 信道 • 0x04= 39 信道 默认通常为 0x07(全部三个信道)。

Own_Address_Type

1 octet

本地设备地址类型: • 0x00:公开地址 • 0x01:随机地址 • 0x02:可解析私有地址(RPA,Controller 生成) • 0x03:可解析私有地址(Host 生成)

Peer_Address_Type

1 octet

对端地址类型(仅定向广告有效): • 0x00:公开地址 • 0x01:随机地址 • 0x02:可解析私有地址(仅当使用定向广告时)

Peer_Address

6 octets

对端蓝牙设备地址(定向广告的目标地址)。非定向广告时可全填 0。

Advertising_Filter_Policy

1 octet

过滤策略,控制响应哪些设备的扫描请求/连接请求: • 0x00:接受任何设备的扫描/连接 • 0x01:仅接受白名单中的设备 • 0x02:仅接受所有设备的扫描请求,但仅接受白名单设备的连接 • 0x03:仅接受白名单设备的扫描请求,但接受所有设备的连接 • 更高值用于扩展广告策略,参考规范。

Advertising_TX_Power

1 octet

广告发射功率(单位 dBm,有符号整数,范围 -127 ~ +20)。常用特殊值: • 0x7F:由 Controller 自动选择最优功率(推荐) • 其他值:实际发射功率(需 Controller 支持)。

Primary_Advertising_PHY

1 octet

主广告所采用的 PHY: • 0x01:LE 1M PHY • 0x02:LE CODED PHY(长距离) • 0x03:LE 1M PHY 与 LE CODED PHY 的混合(实际由Controller 选择) 注意:扩展广告的主通道依然在 37/38/39 上,但可使用 CODED PHY。

Secondary_Advertising_Max_Skip

1 octet

辅助广告同步时最大可跳过的 AUX 包数量(0~0xFF)。通常设为 0x00,表示不跳过;用于设备快速同步到辅助广告链路上。

Secondary_Advertising_PHY

1 octet

辅助广告所使用的 PHY: • 0x01:LE 1M PHY • 0x02:LE CODED PHY • 0x03:LE 2M PHY 扩展广告的数据包将在辅助信道上以该 PHY 发送。

Advertising_SID

1 octet

广告集 ID(0~0x0F),用于在扫描响应中标识广告集。同一设备的不同广告集可以设置相同的 SID,便于扫描端过滤。

Scan_Request_Notification_Enable

1 octet

是否使能扫描请求通知(通过 LE Scan Request Received

事件上报):

• 0x00:禁用通知 • 0x01:使能通知

2. LE Set Periodic Advertising Parameters

对于Le audio我们先来介绍V1了哈,就不介绍V2了

  • Advertising_Handle(广播句柄):
    • 含义:一个0x00至0xEF之间的标识符。这是关联扩展广播集与周期性广播集的唯一纽带。
    • 关键点:你必须先使用 LE Set Extended Advertising Parameters 命令创建一个具有相同 Advertising_Handle 的扩展广播集。周期性广播集是其附属。
  • Periodic_Advertising_Interval_Min / Max(最小/最大广播间隔):
    • 含义:定义广播事件之间的时间间隔范围,单位为0.625毫秒。
    • 关键约束:Min 必须 ≤ Max。控制器会在此范围内选择一个最优值。对于音频等实时流,此值通常非常小(如 7.5 ms ~ 10 ms)。
  • Periodic_Advertising_Properties(广播属性):
    • 含义:Include TxPower in the advertising PDU:如果第6位被设置(即值为1),则表示广播数据包中应包含传输功率值。传输功率值通常用于指示设备发送广播数据时的功率级别,这有助于接收方估计信号强度和可能的连接质量。

3. HCI_LE_Set_Extended_Advertising_Enable 指令介绍

该命令(Opcode 0x0039)是蓝牙 5.0 引入的 HCI 命令,用于启用或禁用一个或多个扩展广告集(Extended Advertising Sets)。通过该命令,可以同时控制多个广告实例的启动/停止,并且可以为每个广告实例指定运行时长(Duration)和最大发送事件数。

参数

长度

说明

Enable

1 octet

启用或禁用广告: • 0x00:禁用广告集(根据后续指定的句柄列表停止) • 0x01:启用广告集(根据后续指定的句柄列表启动) • 其他值保留。

Num_Sets

1 octet

指定本次操作的广告集数量,即后续参数中 Advertising_Handle

数组的长度。取值范围 0x01到 0x80

(最多 128 个集)。当 Enable = 0x00(禁用)时,可以设为 0x00

表示停止所有正在进行的广告(忽略后续数组)。

Advertising_Handle[i]

1 octet × N

广告集句柄数组(长度为 Num_Sets)。每个句柄由 LE_Set_Extended_Advertising_Parameters命令分配或指定(有效范围 0x00–0xEF)。

Duration[i]

2 octets × N

每个广告集的运行时长,单位 10 ms。取值范围:0x0001

到 0xFFFF(即 10 ms ~ 655.35 s)。 • 当 Duration = 0x0000时,表示无限期运行,直到被禁用。 • 控制器会在广告集启动后持续发送广告,直到达到 Duration 时间;超时后自动停止该广告集。 • 如果同时启用多个广告集,它们的计时器独立运行。

Max_Extended_Advertising_Events[i]

1 octet × N

每个广告集在 Duration时间内最多可发送的扩展广告事件数。 • 0x00:无限制(只要时间未到,就一直发送)。 • 0x01 ~ 0xFF:限制发送的事件数量。控制器会在达到数量或超时(两者先到者)后停止广告。 • 该参数适用于精细控制广告广播的频次(例如只发送固定次数的定向广告后自动停止)。 • 若 Duration = 0x0000 且 Max_Events = 0,广告无限运行。

4. LE Set Periodic Advertising Enable

  • Enable(使能标志)
    • 0x00:Disable(禁用):停止该广播集的周期性广播。
    • 0x01:Enable(启用):开始周期性广播。
    • 这是指令的核心开关,直接决定周期性广播是否活跃。
  • Advertising Handle(广播句柄)
    • 范围:0x00 到 0xEF(与扩展广播集一致)。
    • 标识要启用或禁用的具体广播集。
    • 必须与之前使用 LE Set Extended Advertising Parameters 创建的广播集句柄匹配。

5. LE Set Periodic Advertising Data

  • Advertising Handle(广播句柄):
    • 这是一个8位的标识符(0x00 – 0xEF)。
    • 在启用扩展广播时,一个控制器可以同时管理多个“广播集”。每个广播集都有一个唯一的 Advertising Handle。
    • 这个指令通过指定 Advertising Handle 来明确操作的是哪一个广播集的数据。
  • Operation(操作):
    • 指定此次指令要执行的操作。
    • 0x00:保留
    • 0x01:Intermediate Fragment(中间片段):表示本次设置的数据不是完整的广播数据,而是一个片段。用于数据长度超过单个HCI指令容量时的分片传输。
    • 0x02:First Fragment(第一个片段):表示这是分片传输的第一个数据块。
    • 0x03:Last Fragment(最后一个片段):表示这是分片传输的最后一个数据块。
    • 0x04:Complete Data(完整数据):表示本次传输的数据就是完整的广播数据,无需分片。这是最常用的操作。
  • Advertising Data(广播数据):
    • 这就是你想要通过周期性广播发送出去的实际数据内容。
    • 数据的格式遵循 AD Structure 的规则。每个AD Structure由一个长度字节、一个AD Type(数据类型)字节和实际数据组成。
    • 例如,可以包含:
      • 本地名称 (AD Type: 0x09 或 0x08)
      • 广播标志 (AD Type: 0x01)
      • 16位服务UUID列表 (AD Type: 0x03)
      • 制造商自定义数据 (AD Type: 0xFF) —— Beacon常用
      • 发射功率 (AD Type: 0x0A)
    • 数据总长度不能超过控制器支持的最大值(对于扩展广播,最多251字节)。

二. BIG/BIS流程

1. HCI_LE_Create_BIG

HCI_LE_Create_BIG 命令是蓝牙5.2核心规范为支持 LE Audio 而引入的关键命令。它负责创建一个广播等时流(Broadcast Isochronous Group, BIG),这也是实现蓝牙广播音频(Auracast™)的基础。

BIG 由一个或多个广播等时流(Broadcast Isochronous Stream, BIS) 组成,可以将音频数据以一对多的方式广播给无数个接收者,是公共场合(如机场、健身房、餐厅)音频共享的核心技术。

该命令是主机端(Host)用来配置和控制控制器端(Controller)的,建立广播音频所需的所有参数都在这里指定。

参数

大小

描述

BIG_Handle

1 octet

BIG的唯一标识符,由主机(Host)自行分配和管理-2

,用于后续控制该BIG。取值范围: 0x00 到 0xEF。

Advertising_Handle

1 octet

关键:关联到一个已配置好的周期性广播(Periodic Advertising) 的句柄。广播数据将搭载在这个周期性广播的通道里发送出去。

Num_BIS

1 octet

该BIG中包含的BIS(音频流)总数。一个BIG最多可包含31个BIS。

SDU_Interval

3 octets

服务数据单元(SDU)的间隔,单位为微秒(μs)。它决定了发送一个SDU(通常是编码后的音频帧)的时间频率。

Max_SDU

2 octets

单个SDU的最大大小,单位为字节(Octets)。例如,LC3音频编码在48kHz下可能设置为 ~155字节。

Max_Transport_Latency

2 octets

最大传输延迟,单位为毫秒(ms)。这定义了从数据准备好发送到接收端成功接收到的最长时间。

RTN (Retransmission Number)

1 octet

每条PDU的重传次数。这是一个建议值,控制器(Controller)可能根据信号质量调整。

PHY

1 octet

BIS使用的物理层(PHY)模式,是位掩码,支持设定多种模式:0x01= LE 1M,0x02= LE 2M,0x04= LE Coded。

Packing

1 octet

BIS子事件的排列方式,当BIG中包含多个BIS时生效

:0x00=顺序,0x01=交错。这是一个建议值。

Framing

1 octet

BIS数据PDU的格式和模式:0x00=未分帧,0x01=分帧。这是一个建议值。

Encryption

1 octet

加密开关:0x00=不加密,0x01=加密。启用加密后,BIG的数据会被保护。

Broadcast_Code

16 octets

广播密码。与Encryption配合使用,当Encryption

启用时,接收端必须提供完全一致的密码才能解密和收听。

2. HCI_LE_Setup_ISO_Data_Path

是蓝牙核心规范(Bluetooth Core Specification)中用于 LE Audio(低功耗音频) 场景的关键 HCI 命令。

它的作用是:在已经建立好的等时信道(ISO Channel,即 CIS 或 BIS)上,为主机(Host)和控制器(Controller)之间建立一条 等时数据路径,同时可以指定路径所用的 编解码器(Codec) 及详细配置。

可以理解为:先建好“管道”(等时连接),再用这个命令为管道铺设“数据线”并决定“怎么编码”。

Connection_Handle (2 字节)

  • 含义:指定目标等时信道(CIS 或 BIS)的连接句柄。
  • 取值范围:0x0000 – 0x0EFF(有效句柄范围)
  • 要求:该连接必须已经建立完成,否则命令会失败。

Data_Path_Direction (1 字节)

  • 含义:数据路径的方向(从控制器的角度定义)。
  • 取值:
    • 0x00:输入方向(Input) – 数据从 主机 → 控制器(通常用于发送 / TX)
    • 0x01:输出方向(Output) – 数据从 控制器 → 主机(通常用于接收 / RX)
  • 约束:同一个连接句柄的同一个方向,只能建立一条数据路径。重复执行会失败。

Data_Path_ID (1 字节)

  • 含义:指定数据在主机与控制器之间传输所使用的物理接口。
  • 取值:
    • 0x00:标准 HCI 传输层(最常用)
    • 0x01 – 0xFE:厂商自定义路径(如 PCM、I2S 等)
    • 0xFF:保留

Codec_ID (5 字节)

  • 含义:标识要使用的编解码器。
  • 结构:
    • 第 1 字节:编解码器类型
    • 第 2-3 字节:公司 ID(Company ID,小端序)
    • 第 4-5 字节:厂商自定义编解码器 ID

Controller_Delay (3 字节)

  • 含义:控制器端的固定处理延迟,单位是 微秒 (μs)。
  • 解释:数据从控制器接口到达空中(或反向)的固定延时。
  • 类型:24 位无符号整数。不确定时可填 0。

Codec_Configuration_Length (1 字节)

  • 含义:紧跟在后面的 Codec_Configuration 数据的字节长度。
  • 取值范围:0x00 – 0xFF
  • 注意:如果没有额外配置,填 0x00。

Codec_Configuration (可变长度,长度由上一字段决定)

  • 含义:编解码器的具体配置参数(OCTETS)。
  • 内容格式:由 Codec_ID 指定的编解码器决定。例如 LC3 编码可以配置采样率、帧时长等。
  • 长度要求:必须等于 Codec_Configuration_Length。

赞(0)
未经允许不得转载:171主机测评 » le audio broadcast source的周期/BIG广播流程
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址