2. USB音频设备类规范
USB音频设备类(UAC)规范定义了一套标准化的音频功能拓扑结构,将音频设备内部的功能单元抽象为一系列标准实体。理解这些实体及其连接关系,是实现USB声卡固件与驱动开发的基础。
2.1 音频功能拓扑结构
UAC规范将音频设备的功能路径描述为单向数据流管道,从音频数据进入设备开始,经过处理、混合,最终输出到外部接口。每个功能单元在拓扑中承担特定角色,并通过音频控制接口(AudioControl Interface)的端点进行访问与控制。
核心原则: 音频功能拓扑是有向无环图(DAG),数据从输入终端(IT)流向输出终端(OT),中间可经过特征单元(FU)、混音器单元(MU)、选择器单元(SU)等处理节点。
2.2 终端实体:输入终端(IT)与输出终端(OT)
终端实体是音频功能拓扑的边界节点,负责连接USB音频数据流与设备内部处理逻辑。
2.2.1 输入终端(Input Terminal, IT)
- 功能: 代表音频数据进入音频功能拓扑的入口点。数据来源可以是USB等时端点、外部物理接口(如麦克风)或内部音频生成器。
- 关键描述符字段:
bTerminalID:终端唯一标识符。wTerminalType:终端类型,如USB Streaming(0x0101)、Microphone(0x0201)等。bAssocTerminal:关联终端ID,用于立体声配对。bCSourceID:时钟源ID,指定该终端使用的时钟。
- 典型应用: USB麦克风设备中,IT代表从USB等时端点接收的音频流入口。
2.2.2 输出终端(Output Terminal, OT)
- 功能: 代表音频数据离开音频功能拓扑的出口点。数据可流向USB等时端点、物理输出接口(如扬声器)或外部编码器。
- 关键描述符字段: 与IT类似,包含
bTerminalID、wTerminalType、bAssocTerminal、bCSourceID。 - 典型应用: USB扬声器设备中,OT代表将音频数据发送到USB等时端点的出口。
开发提示: 在固件中,IT和OT的
wTerminalType必须与设备实际功能匹配。例如,一个USB耳机应包含一个IT(类型=USB Streaming)和一个OT(类型=Headphone或Speaker)。类型不匹配会导致主机驱动无法正确识别设备功能。
2.3 特征单元(Feature Unit, FU)
特征单元是音频功能拓扑中最常用的处理节点,负责实现音频通道级的控制功能。
2.3.1 功能与作用
- 音量控制: 支持主音量、左右声道独立音量、甚至多通道音量控制。
- 静音控制: 支持每个通道的独立静音开关。
- 均衡控制: 可选的Bass、Treble等音调控制(UAC 2.0/3.0)。
- 自动增益控制(AGC): 输入通道的自动增益控制开关。
2.3.2 描述符结构
| 字段 | 说明 | 典型值 |
|---|---|---|
bUnitID |
单元唯一标识符 | 3 |
bSourceID |
上游实体ID(如IT或MU) | 1 |
bControlSize |
每个通道控制位图的大小(字节) | 1 |
bmaControls[ ] |
每个通道的控制位图(Mute、Volume等) | 0x03(Mute+Volume) |
iFeature |
字符串描述符索引 | 0(无描述) |
2.3.3 控制位图示例
// UAC 2.0 Feature Unit 控制位图定义(每个通道1字节)
#define FU_CONTROL_MUTE (1 << 0) // 位0:静音控制
#define FU_CONTROL_VOLUME (1 << 1) // 位1:音量控制
#define FU_CONTROL_BASS (1 << 2) // 位2:低音控制
#define FU_CONTROL_MID (1 << 3) // 位3:中音控制
#define FU_CONTROL_TREBLE (1 << 4) // 位4:高音控制
#define FU_CONTROL_AGC (1 << 5) // 位5:自动增益控制
// 示例:立体声设备,主通道(Master)支持Mute+Volume
// 左声道(Channel 1)支持Mute+Volume
// 右声道(Channel 2)支持Mute+Volume
uint8_t bmaControls[] = {
0x03, // Master: Mute + Volume
0x03, // Left: Mute + Volume
0x03 // Right: Mute + Volume
};
2.4 混音器单元(Mixer Unit, MU)
混音器单元用于将多路输入音频流混合为一路或多路输出,是实现多声道混音、回声消除、多源叠加等功能的基石。
2.4.1 功能与作用
- 多输入混合: 支持2路或更多输入通道,每路输入可独立控制增益。
- 矩阵混音: 每个输出通道可以混合来自不同输入通道的信号,形成混音矩阵。
- 通道映射: 实现输入通道到输出通道的灵活映射(如将立体声输入映射为5.1声道输出)。
2.4.2 描述符结构
| 字段 | 说明 | 典型值 |
|---|---|---|
bUnitID |
单元唯一标识符 | 4 |
bNrInPins |
输入引脚数量 | 2 |
baSourceID[ ] |
每个输入引脚的上游实体ID数组 | {1, 2} |
bNrChannels |
输出通道数量 | 2 |
bmChConfig |
输出通道空间位置配置 | 0x03(Front Left + Front Right) |
iMixer |
字符串描述符索引 | 0 |
2.4.3 混音矩阵控制
MU的混音系数通过Mixer Control Selector(MUxS)访问,每个输入通道到每个输出通道的增益可独立设置。控制请求格式如下:
// UAC 2.0 MU混音系数控制请求
// bRequest = UAC2_CS_CUR (0x01)
// wValue = (MUxS << 8) | ChannelNumber
// - MUxS: 混音选择器(0x01 ~ 0x0F)
// - ChannelNumber: 目标输出通道号
// wIndex = (UnitID << 8) | InterfaceSubSlot
// - UnitID: MU的bUnitID
// - InterfaceSubSlot: 输入通道号
// 数据:2字节有符号整数(增益值,单位0.01dB)
2.5 实体连接与拓扑描述
音频功能拓扑通过音频控制接口描述符(AC Interface Descriptor)中的实体描述符链来定义。每个实体描述符包含bSourceID或baSourceID[]字段,指向其上游实体,从而形成完整的拓扑结构。
2.5.1 典型拓扑示例:USB耳机
// 拓扑:IT(USB Streaming) → FU(音量控制) → OT(Headphone)
// 描述符链:
// 1. 输入终端 (IT): bTerminalID=1, wTerminalType=0x0101 (USB Streaming)
// 2. 特征单元 (FU): bUnitID=2, bSourceID=1, bmaControls={0x03}
// 3. 输出终端 (OT): bTerminalID=3, bSourceID=2, wTerminalType=0x0301 (Headphone)
2.5.2 复杂拓扑示例:多声道混音设备
// 拓扑:IT1(USB Streaming) ─┐
// ├→ MU(混音器) → FU(主音量) → OT(Speaker)
// IT2(Microphone) ──────────┘
// 描述符链:
// 1. IT1: bTerminalID=1, wTerminalType=0x0101
// 2. IT2: bTerminalID=2, wTerminalType=0x0201 (Microphone)
// 3. MU: bUnitID=3, bNrInPins=2, baSourceID={1,2}, bNrChannels=2
// 4. FU: bUnitID=4, bSourceID=3, bmaControls={0x03}
// 5. OT: bTerminalID=5, bSourceID=4, wTerminalType=0x0302 (Speaker)
常见错误: 在固件中定义拓扑时,必须确保所有实体的
bSourceID指向有效的上游实体ID,且不能形成循环依赖。主机驱动在解析描述符时,如果发现无效的SourceID或循环引用,会拒绝加载音频功能。
2.6 实体功能对比总结
| 实体类型 | 缩写 | 主要功能 | 控制类型 | 典型应用 |
|---|---|---|---|---|
| 输入终端 | IT | 音频数据入口 | 时钟选择、终端类型 | USB Streaming、麦克风 |
| 输出终端 | OT | 音频数据出口 | 时钟选择、终端类型 | USB Streaming、扬声器 |
| 特征单元 | FU | 通道级音频处理 | 音量、静音、均衡、AGC | 音量调节、静音开关 |
| 混音器单元 | MU | 多路音频混合 | 混音矩阵增益 | 多声道混音、回声消除 |
| 选择器单元 | SU | 输入源选择 | 输入选择 | 音频输入切换 |
| 处理单元 | PU | 扩展处理(如DSP) | 厂商自定义 | 降噪、均衡器 |
2.7 本章小结
- USB音频功能拓扑由终端实体(IT/OT)、特征单元(FU)、混音器单元(MU)等标准实体构成,形成有向无环的数据流路径。
- IT和OT是拓扑的边界节点,定义音频数据的来源与去向。
- FU提供通道级的音量、静音等控制功能,是驱动中最常交互的实体。
- MU实现多路音频的混合,支持灵活的混音矩阵配置。
- 实体间的连接关系通过描述符中的
bSourceID字段定义,主机驱动据此重建完整的音频功能拓扑。