UAC – USB Audio Class 描述符简介

一、简介

    USB Audio Class(UAC)用于 USB 设备的音频处理或音频功能,常见的应用有 USB 耳机、USB 音响、USB 声卡等。USB 设备的功能通常与其配置的描述符相关,在本文,我们将通过 NXP LPC5516 SDK 的中的 usb_device_composite_hid_audio_unified 例程,针对 UAC 2.0 的描述符进行介绍。

二、UAC 描述符

以 NXP LPC5516 SDK 中的 usb_device_composite_hid_audio_unified.bm 为例讲解 UAC 描述符,该例程功能包括了 UAC 的 Speaker 播放和 Recorder 录音功能,同时复合了 HID 类作为音频的按键控制。

查看该工程的 usb_device_descriptor.c 文件,可以在 g_UsbDeviceConfigurationDescriptor[] 数组中看到该 USB 设备的配置描述符。



该配置描述符的内容按顺序包含了如下描述符(以 UAC 2.0 为准),


以下对 UAC 类描述符进行介绍,对于标准描述符如设备描述符、配置描述符等,这里不再赘述,遵循 USB 规范的定义即可,这里主要对 Audio 类相关的描述符的功能进行简介。

1. 接口关联描述符

接口关联描述符(IAD)用于描述音频接口集,属于同一音频功能的音频控制接口、音频流接口、MIDI 流接口的集合称为音频接口集(AIC)。一个设备可以同时激活多个音频接口集。


例如某些具有双声卡功能的耳机有 Gaming 通道、Chat 通道,这为两个音频接口集。




2. 标准 AC 接口描述符

标准 AC 接口描述符与 USB 规范定义的标准接口描述符结构相同。除了接口描述符中的 Class、SubClass、Protocol 有针对音频类的专用定义。




3. 类特有 AC 接口描述符

完整的类特有 AC 接口描述符描述了一个音频功能。一个音频功能可根据其功能性分解为可寻址的实体(Entity)。在音频规范中,定义了三种实体,分别叫做单元、终端、时钟实体,该实体用于处理音频的物理属性,例如静音、音量、低音、中音控制等。如下图音频功能共有 15 个实体,包含 3 个输入终端( IT )、5 个单元、3 个输出终端( OT )及 5 个时钟实体。



类特有 AC 接口描述符格式以一个头描述符开始,后接完整描述音频功能的所有描述符的连接,包括 3种时钟实体描述符、7 种单元描述符和 2 种终端描述符,后接音频功能的描述符顺序、数量没特殊限定,常用的有输入终端描述符、输出终端描述符、特征单元描述符,类特有 AC 接口头描述符如下。


4. 音频控制 (AC) 端点描述符

AC 端点描述符有两类,

一是标准 AC 控制端点描述符,用端点 0 作为 AC 控制端点,没有定义专门的标准 AC 控制端点描述符。

二是标准 AC 中断端点描述符,与 USB 规范中定义的标准端点描述符结构相同,其位域用于反映端点的中断类型,这个端点是可选的,标准 AC 中断端点描述符结构如下。


 5. 标准 AS 接口描述符

AS 接口描述符包含所有描述音频流接口的相关信息,包括标准 AS 接口描述符、类特有 AS 接口描述符、类特有 AS 格式类型描述符、类特有 AS 编码描述符及类特有 AS 解码描述符。在这里仅介绍标准 AS 接口描述符和类特有 AS 接口描述符。

标准 AS 接口描述符与标准 AC 接口描述符相似,其与 USB 规范中定义的标准接口描述符结构相同,对 Class、SubClass、Protocol 做了专用的定义。



6. 类特有 AS 接口描述符,类特有 AS 接口描述符如下所示

需要注意的字段主要有

  • bmFromatType 字段用于标识此接口使用的格式类型,在 USB 音频规范中定义了四种格式类型,分别用 Type Ⅰ、Ⅱ、Ⅲ、Ⅳ 表示,在类特有 AS 接口描述符后通常接着 Type 描述符。当有 USB 同步端点与此接口关联时,可使用 Type Ⅰ、Ⅱ、Ⅲ。如果没有端点与接口关联则使用接口Ⅳ。

        



Type 类型描述符在 Frmts20 final 手册中对 Type Ⅰ、Ⅱ、Ⅲ有区分简单音频数据格式类型和扩展音频数据格式类型两种,扩展音频数据格式类型增加了对数据包报头的支持。以下对简单音频数据格式类型的 Type 类型描述符进行介绍。

Type Ⅰ:bFormatType字段表示这是Type I描述符。bSubslotSize字段表示用于传输音频子槽的字节数。bBitResolution字段表示音频子槽中可用位的总数中有多少位真正被音频函数用于传递音频信息。



Type Ⅱ:bFormatType字段表示这是Type II描述符。wMaxBitRate字段包含该接口每秒可以处理的最大比特数。它是对接口中可用缓冲区大小的度量。wSlotsPerFrame字段包含单个编码音频帧中包含的PCM音频插槽的数量。



Type Ⅲ:bFormatType字段表示这是Type III描述符。bSubSlotSize字段表示用于传输音频子槽的字节数,该值必须设为 2。bBitResolution字段表示音频子槽中可用位的总数中有多少位真正被音频函数用于传递音频信息。



Type Ⅳ:bFormatType字段表示这是Type IV描述符。该描述符通常用于表示没有端点与接口关联。



  • bmFormats,表示该接口支持的音频数据格式,与Type 类型相关。同样可在 Audio Data Formats 文档中查阅相关的规范,对于不同的 Type 类型,有如下定于,

对于 Type Ⅰ有:



对于 Type Ⅱ 有:



对于 Type Ⅲ 有:

 

  • bNrChannels,bmChannelConfig与 iChannelNames 字段共同构成物理声道集群描述符。bNrChannels字段包含音频数据流中物理通道的数量。bmChannelConfig字段是一个位图,指示集群中存在的物理通道占用了哪些空间位置。iChannelNames 字符串描述符序号,用于描述第一个物理声道。
7. 音频流 AS 端点描述符

AS端点描述符包括 AS 同步音频数据端点描述符和 AS 同步反馈端点描述符,这里仅介绍其中必需的 AS 同步音频数据端点描述符,这其中又包括标准 AS 同步音频数据端点描述符和类特有 AS 同步音频描述符。

标准 AS 同步音频数据端点描述符,与 USB 规范定义的标准端点描述符格式相同,只是对有些字段的取值做了特殊定义。类特有 AS 同步音频数据端点描述符,格式如下



三.总结

       本篇以 NXP LPC5516 SDK 中的例程为例,简单介绍讲解了 UAC 设备的相关描述符,方便刚接触 UAC 的朋友快速入手 USB Audio Class 设备。



参考文档:
1. 《Universal Serial Bus Device Class Definition for Audio Devices》
2. 《Universal Serial Bus Device Class Definition for Audio Data Formats》

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论