深度分析LPC5516 UAC2.0 与 UAC1.0 设备描述符的区别

    UAC 即 USB Audio Class,目前 UAC 已经有了 UAC 1.0~3.0 版本,以我们日常用使用最多的 UAC 设备—USB 耳机来看,大部分支持的都是 UAC1.0 版本,自从 Windows10 支持 UAC2.0 后,目前也可以看到小部分 UAC2.0 版本的 USB 耳机,由于目前 Windows 还不支持 UAC3.0 所以日常使用中我们也很少接触到 UAC3.0 的设备。PC 中识别 USB 设备主要通过 USB 描述符,同样的,当 UAC 设备接入 PC 后,PC 也是通过描述符来判断设备支持的 UAC 版本,从而正确的配置设备,以正常工作。因此,这篇文章想以 LPC5516 SDK 中 UAC 例程来看看 UAC2.0 版本,与 UAC1.0 版本在 USB 描述符中有什么不同的区别。

    NXP LPC5516 SDK 中提供了 UAC 相关的例程,不知道大家在使用 LPC5516 UAC 例程时,有没有注意到,例程中默认是按照 UAC2.0 版本来配置的,例如 lpcxpresso55s16_dev_audio_speaker_freertos 例程中,从 usb_device_config.h 可以看到相关的配置。

    首先,是 UAC 标准音频控制接口描述符,其定义我们可以在 UAC Spec 中找到,其第七位,bInterfaceProtocol 指示了设备的 UAC 协议版本;

     在工程中可以对应到标准音频控制接口描述符段中,USB_AUDIO_PROTOCOL,当使用 UAC 2.0 时,需要将其配置为 0x20;

    接下来是 UAC 类特定音频控制接口头描述符,其在 UAC1.0 和 UAC2.0 有差别,UAC1.0 Spec 中的定义如下,其中描述符长度 bLength 该接口本身的大小,固定为8+N,bInCollection 为所有的音频流接口数量N,baInterfaceNr 为音频流的接口索引,多个依次后续连接;

    而 UAC2.0 中类特定音频控制接口头描述符,为固定的长度,bInCollection 也为所有的音频流接口数量N,管是 UAC1.0 还是 UAC2.0 其中都包含 bcdADC,这里代表 UAC 协议的版本;

    在 SDK 工程中也可以看到两者之间的区别;

    再来看到 UAC 输入终端描述符,首先是 UAC1.0 中输入终端描述符的定义如下:

    而 UAC2.0 中输入终端描述符的定义如下;

    可以看到 UAC 2.0 中,输入终端描述符比 UAC1.0 多了 5 个 byte,主要是 UAC2.0 中多了输入终端所连接的时钟实体的ID,还有 bmChannelConfig 比 UAC1.0 多了两个 byte,因为 UAC2.0 中,音频的空间位置比 UAC1.0 多,且多了 bmControls 字段;

    SDK 中可以找到对应 UAC1.0 和 UAC 2.0 的输入终端描述符,图片上方为 UAC2.0 输入终端描述符,下方为 UAC1.0 输入终端描述符;

    在 SDK 中,输入终端和输出终端之间,还有一个 UAC 特性单元描述符,用于描述音频的控制特性,告诉主机 UAC 设备声道支持的控制,UAC1.0 Spec 中,可以找到其定义;

    UAC2.0 中特性单元描述符定义如下,与 UAC1.0 主要的差别是 UAC1.0 特征单元描述符中多了 bControlSize,其配置 bmaControls 中占用的字节数,而在 UAC2.0 中 bmaControls 固定为四个字节,因此不需要 bControlSize 另外配置,bmaControls 主要配置设备主声道和逻辑声道支持的控制;

    可以看到工程代码中,不管是 UAC1.0 的方式还是 UAC2.0 的特征描述符配置方式(上方为 UAC2.0 配置,下方为 UAC1.0 配置),都是配置了,在主声道0 支持 MUTE 和 Volume 的控制;

    然后是输出终端描述符,首先是 UAC1.0 Spec 中的定义;

    UAC 2.0 中的输出终端描述符,主要差别也是 UAC2.0 中多了输入终端所连接的时钟实体的 ID 且多了 bmControls 字段;

    同样 SDK 中可以找到对应 UAC1.0 和 UAC 2.0 的输入终端描述符,图片上方为 UAC2.0 输入终端描述符,下方为 UAC1.0 输入终端描述符;

    以上就是本篇文章分享的内容,感谢大家的观看;

参考资料:

Universal Serial Bus Device Class Definition for Audio Devices 1.0

Universal Serial Bus Device Class Definition for Audio Devices 2.0

欢迎登录大大通,阅读原文,浏览更多精彩技术内容吧~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值