USB Audio Class(UAC)协议数据格式

USB Audio Class(UAC)协议定义了通过USB接口传输音频数据的标准格式和控制机制。其数据格式涉及描述符配置、音频流传输格式及控制请求结构。以下为UAC协议数据格式的详细解析:

在这里插入图片描述

1. UAC协议版本与核心结构

USB Audio Class分为 UAC1.0UAC2.0UAC3.0,不同版本支持的功能不同:

  • UAC1.0:支持基本音频功能(如PCM音频流、音量控制)。
  • UAC2.0:增加高带宽支持(如32位/384kHz音频、更多声道)。
  • UAC3.0:优化功耗管理,支持上下文感知控制(如设备唤醒)。

所有版本均通过 描述符(Descriptors) 定义设备能力,并通过 等时传输(Isochronous Transfers) 传输音频数据。


2. USB描述符结构

UAC设备需配置以下关键描述符:

(1) 标准USB描述符
  • 设备描述符(Device Descriptor):标识设备类型为音频类(bDeviceClass = 0x00, bDeviceSubClass = 0x00,在接口中声明类)。
  • 配置描述符(Configuration Descriptor):定义设备的功能集合。
(2) 音频类特定描述符
  • 接口关联描述符(IAD, Interface Association Descriptor)(仅UAC2+):关联音频控制接口和音频流接口。
  • 音频控制接口(AC Interface):管理音量、静音等控制功能。
    • 类特定AC接口描述符(CS_AC_Interface Descriptor):定义支持的控件类型。
  • 音频流接口(AS Interface):传输音频数据。
    • 类特定AS接口描述符(CS_AS_Interface Descriptor):定义音频格式、声道数、采样率等。
  • 端点描述符(Endpoint Descriptor):配置数据传输方向与模式(如等时传输端点)。

3. 音频流数据格式

音频数据通过 等时端点(Isochronous Endpoint) 传输,格式由AS接口描述符定义:

(1) 音频格式类型
  • Type I格式:用于PCM音频,支持以下参数:
    • bFormatType = 0x01(UAC1.0)或 0x02(UAC2.0)。
    • 位深度(bBitResolution):16/24/32位。
    • 声道数(bNrChannels):1~255(UAC2.0支持更多声道)。
    • 采样率(通过Sample Frequency描述符定义,如44.1kHz、48kHz、96kHz等)。
  • Type II/III格式:用于压缩音频(如MPEG、Dolby Digital)。
(2) 数据包结构
  • 每帧数据:包含多个音频样本,按声道交错排列。
    • 示例(24位/立体声PCM)
      每个声道样本占3字节,单帧数据为 [Left_LSB, Left_MSB][Right_LSB, Right_MSB],共6字节。
  • 同步机制:通过bmAttributes字段定义同步类型:
    • 异步模式(Asynchronous):设备或主机提供独立时钟。
    • 同步模式(Synchronous):基于USB帧时钟(1ms周期)。
    • 自适应模式(Adaptive):动态调整时钟以匹配数据速率。

4. 控制请求与数据格式

音频控制通过 控制传输(Control Transfer) 实现,常用请求如下:

(1) 标准控制请求
  • 设置/获取音量(SET_CUR/GET_CUR)
    数据格式为 uint16_t,范围 0x0000~0xFFFF(对应最小~最大音量)。
  • 静音控制(SET_MUTE/GET_MUTE)
    数据格式为 uint8_t(0=取消静音,1=静音)。
(2) 类特定控制请求
  • 设置采样率(SET_SAMPLING_FREQ)
    数据格式为 uint32_t,单位Hz(如 48000)。
  • 选择音频通道(SET_CHANNEL)
    数据格式为位掩码(如 0x03 表示启用左/右声道)。

5. UAC2.0与UAC3.0扩展

(1) UAC2.0新增特性
  • 高带宽支持:支持32位/384kHz音频。
  • 时钟源选择:通过bClockSource字段指定内部/外部时钟。
  • 扩展通道布局:支持7.1声道、3D音频。
(2) UAC3.0改进
  • 低功耗模式:支持设备休眠与快速唤醒。
  • 上下文感知控制:根据使用场景动态调整参数(如耳机插入检测)。

6. 示例描述符解析(UAC1.0 PCM音频设备)

// 设备描述符
struct usb_device_descriptor dev_desc = {
    .bLength = 18,
    .bDescriptorType = USB_DT_DEVICE,
    .bcdUSB = 0x0200,
    .bDeviceClass = 0x00,       // 类在接口中定义
    .bDeviceSubClass = 0x00,
    .bDeviceProtocol = 0x00,
    .idVendor = 0x1234,
    .idProduct = 0x5678,
    // ...其他字段省略
};

// 类特定AS接口描述符(PCM格式)
struct uac1_as_header_descriptor as_header = {
    .bLength = 7,
    .bDescriptorType = USB_DT_CS_INTERFACE,
    .bDescriptorSubtype = UAC_AS_GENERAL,
    .bTerminalLink = 0x01,      // 关联输入终端
    .bDelay = 0x01,
    .wFormatTag = 0x0001,       // PCM格式
};

// 端点描述符(等时传输)
struct usb_endpoint_descriptor ep_desc = {
    .bLength = 7,
    .bDescriptorType = USB_DT_ENDPOINT,
    .bEndpointAddress = 0x01,   // OUT端点
    .bmAttributes = USB_ENDPOINT_XFER_ISOC | USB_ENDPOINT_SYNC_ADAPTIVE,
    .wMaxPacketSize = 1024,     // 每帧最大字节数
    .bInterval = 0x01,
};

7. 调试与兼容性

  • 工具推荐
    • USB协议分析仪(如Wireshark + USB捕获硬件)。
    • USB-IF官方测试工具(USB Command Verifier)。
  • 兼容性注意
    • Windows/macOS/Linux对UAC的支持差异(如UAC2.0需特定驱动)。
    • 确保描述符严格符合规范,避免枚举失败。

通过以上数据格式的配置与解析,开发者可实现符合UAC标准的USB音频设备,确保与主机系统的兼容性和高性能音频传输。详细规范可参考USB-IF发布的 《USB Audio Class Specification》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鹿屿二向箔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值