2. USB音频设备类规范

USB音频设备类(UAC)规范定义了一套标准化的音频功能拓扑结构,将音频设备内部的功能单元抽象为一系列标准实体。理解这些实体及其连接关系,是实现USB声卡固件与驱动开发的基础。

2.1 音频功能拓扑结构

UAC规范将音频设备的功能路径描述为单向数据流管道,从音频数据进入设备开始,经过处理、混合,最终输出到外部接口。每个功能单元在拓扑中承担特定角色,并通过音频控制接口(AudioControl Interface)的端点进行访问与控制。

核心原则: 音频功能拓扑是有向无环图(DAG),数据从输入终端(IT)流向输出终端(OT),中间可经过特征单元(FU)、混音器单元(MU)、选择器单元(SU)等处理节点。
USB音频功能拓扑结构 USB音频功能拓扑结构 输入终端 (IT) 特征单元 (FU) 混音器单元 (MU) 输出终端 (OT) 拓扑说明: • 数据从IT进入设备,经FU进行音量/静音/均衡控制,再经MU混合多路音频, 最终由OT输出到USB主机或外部接口。 • 每个实体通过唯一的ID(bEntityID)标识,拓扑关系由描述符中的连接字段定义。

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)
混音器单元(MU)内部结构 混音器单元(MU)内部结构 输入1 (IT1) 输入2 (FU1) 输入3 (IT2) 混音矩阵 3×2 矩阵 增益系数可调 输出L (OT1) 输出R (OT2) 每个输入通道到每个输出通道的增益独立可调,实现灵活的混音矩阵

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字段定义,主机驱动据此重建完整的音频功能拓扑。