Skip to main content
欢迎来到PAWPAW技术文档网站了解更多信息

USB音频基础

USB, 即通用串行总线(Universal Serial Bus), 已经存在了十多年了,并且作为一个标准在个人电脑中被大量使用。MS卡、外部驱动器、鼠标和网络摄像头都可以通过USB与电脑连接。在这篇文章中,我们将研究 USB音频:一种用于个人电脑、智能手机和平板电脑的数字音频标准,用于连接扬声器、麦克风或混音台等音频外围设备。在这篇文章中,我们将展示USB音频是如何工作的,需要注意什么,以及如何使用USB Audio进行高保真的多通道输入与输出。

USB 基础

USB是一种协议,个人电脑--即USB主机初始化传输,而设备(例如USB扬声器)则作出相应。每一次传输都是针对一个特定的设备以及设备上一个特定的端点的。输入传输 向PC发送数据。当主机初始化一个输入传输时,设备必须响应并传输数据给主机。输出传输 向设备发送数据。当主机执行一个输出传输时,它会向设备发送一个必须被捕获的数据包。在USB音频的世界里,输入和输出传输可用于传输音频样本:输出传输将音频数据从PC发送到扬声器,而输入传输则用于将音频数据从麦克风发送到PC。

USB有四种输入和输出传输方式:批量、同步、中断和控制传输

批量传输 用于在主机和设备之间可靠地传输数据。所有的USB传输都带有CRC(校验和),用于指出是否有错误发生。在批量传输中,数据的接收者必须校验CRC。如果CRC是正确的,传输就会被确认,并且数据被认为是无错误传输的。如果CRC不正确,传输就不会被确认,将被重试。如果设备不准备接受数据,它可以发送一个否定的确认,NAK,NAK会使主机重新尝试传输。批量传输不被考虑为时序要求严格的传输方式,它被安排在下面讨论的时序要求严格的传输方式的周围。

提示

当有多个针对不同类型端点的传输请求时,控制器会首先安排时序要求严格的传输,如同步和中断数据。只有当总线上有未使用的带宽时,控制器才会安排批量传输。当总线上没有其他重要的流量时,批量传输就会很快。然而,当总线忙于其他传输时,批量数据将会无限期地等待。

同步传输 用于在主机和设备之间实时地传输数据。当主机设置了一个同步端点时,主机为等时端点分配了特定数量的带宽,并定期在该端点上执行输入或输出传输。例如,主机可以每隔125 毫秒向设备输出1K字节的数据。由于已经分配了固定和有限的带宽,如果传输出现问题,则没有时间重新发送数据。数据有一个正常的CRC,但如果接收方检测到一个错误,这里并没有重发机制。

中断传输 被主机用来定期轮询设备,以了解是否发生了有价值的事情。例如,主机可以轮询一个音频设备以检查MUTE按钮是否被按下。中断传输这个名字有点令人困惑,因为它们并不中断任何事情。然而,对数据的定期轮询提供了与主机中断相同的功能。

控制传输 与批量传输非常相似。控制传输可以被确认,可以被拒绝,并以非实时的方式交付。控制传输用于正常数据流之外的操作,如查询设备功能或端点状态。关于如何描述设备功能的解释不在本文的范围内,我们只是说有一些预定义的类,如 "USB音频类 "或 "USB大容量存储类",它们能够实现跨平台的互操作性。

所有的传输都是以USB帧为最小单位进行的。高速USB帧间隔为125μs(全速USB为1ms),并由主机发送一个帧开始(SOF)消息来标记。同步和中断传输每帧最多传输一次。

USB 音频

USB音频使用同步、中断和控制传输。所有的音频数据都是通过同步传输的;中断传输是用来传递有关音频时钟可用性的信息;控制传输是用来设置音量、请求采样率等。这些都显示在图1中。

主机和USB设备之间的传输。同步传输输入和同步传输输出用于传输音频数据,控制传输用于设置参数,中断传输用于状态监测

图1:主机和USB设备之间的传输。同步传输输入和同步传输输出用于传输音频数据,控制传输用于设置参数,中断传输用于状态监测。

USB音频系统的数据需求取决于通道的数量、每个样本的比特数以及采样率。典型的通道数是2个(立体声),6个(5.1)或更多的用于工作室和DJ的通道。典型的采样大小是24bits,同时16bits可用于传统的音频,32bits可用于高质量的音频。典型的采样率是44.1、48、96和192kHz。后者用于高质量的音频。

假设我们设计一个立体声扬声器,其采样率为96kHz,采样大小为24bits。为了简化主机和设备上的数据传输,24bits的值通常用一个零字节填充,所以总的数据吞吐量是96,000 x 2通道 x 4字节 = 768,000字节/秒。同步端点的运行速度为每125μs传输一次--或者说每秒8000次传输。将每秒所需的字节率除以每秒传输的次数,就得到了每次同步传输的字节数:768,000/8,000 = 每次传输96字节。

提示

通常为了简化传输过程,24bits,32bits等两种采样大小均会占用4个bytes的空间,空位则用0填充。

当使用CD(音质)速率时,例如44,100 Hz,传输速率为每秒44.1次。在USB音频中,每次传输总是携带整数个的样本;传输过程中会交替携带48字节或40字节(即6个或5个立体声样本),因此平均速率为每次传输44.1字节。

单个同步传输可以携带1024字节,最多可以携带256个样本(在24/32bits)。这意味着,一个单一的同步端点可以在48kHz下传输42个通道,或在192kHz下传输10个通道(假设使用了高速USB - 全速USB在48kHz的采样率下无法传输超过一个立体声输入和输出对--即双通道)。

如何计算通道和样本数?
  1. 单个同步传输可以携带1024字节,最多可以携带256个样本(在24/32bits)

    对于单通道音频,每个样本最多占用32bits,即4个字节。故1024 / 4 = 256个样本

  2. 一个单一的同步端点可以在48kHz下传输42个通道,或在192kHz下传输10个通道(高速USB)

    设能够传输的通道数为a,则在48kHz下,每个同步传输需要携带的字节为:

    48000 x 4bytes x a / 8000 = 24a,而单个同步传输可以携带的字节数为1024,则a = 1024/24 ≈ 42

    同理可计算出192kHz下最多能够传输的通道数

传输数字音频时会出现延迟。在使用高速USB的情况下,这个延迟是250μs。在每个125us的窗口中,数据包会被传输一次。但考虑到它可能在这个窗口中的任何时候发送,这就需要250us的缓冲区。在这250us的延迟之上,O/S驱动和CODEC中可能会产生额外的延迟。请注意,全速USB的内在延迟要高达2ms,因为数据在每1ms的窗口中只发送一次。

朋友之间的一秒钟算什么呢?

数字音频的大问题是要在一个共同的时间概念上达成一致。上面我们把USB帧定义为每秒传输8000次,并把扬声器设置为每秒播放96000次样本。这只有在扬声器和主机就一秒钟的长度达成一致时才会起作用。USB音频提供三种模式,确保主机和扬声器在时间上达成一致:

  • 在同步模式下,一秒钟的长度是由主机设备定义的。也就是说,主机将以一个速率发送数据,而设备必须完全匹配这个速率。
  • 在异步模式下,情况恰恰相反,设备设定了一秒钟的定义,而主机必须与设备相匹配。
  • 在自适应模式下,数据流决定了时钟。

自适应和同步模式并不理想,因为个人电脑在保持稳定的时钟方面是出了名的糟糕,而且经常有其他音频源参与进来,比如外部数字卡座。异步模式使用外部时钟源作为主时钟,或者使用设备中的低抖动时钟。通常情况下,两者都依赖于基于晶体的PLL,如图2所示。

图2:一个USB音频板,有一个用于稳定音频频率的晶震,和一个低抖动的PLL来产生任何需要的频率

图2:一个USB音频板,有一个用于稳定音频频率的晶振,和一个低抖动的PLL来产生任何所需的频率

因此,系统中至少有两个独立的时钟,一个是主机驱动频率为每秒8,000次传输的USB时钟,另一个是外部驱动采样率的采样时钟,例如96,000 Hz。

这些时钟的频率会有细微的不同,而且这种差异会随着时间的推移而略有变化。因此,每帧音频样本的平均数量将比预期的速率略多或略少。例如,在我们96,000Hz采样率的情况下,平均样本数可能是12.001。为了确保主机发送正确的数据量,而不是太多或者太少,主机通过一个中断端点来请求当前的采样率。每隔几毫秒,上一阶段的平均采样率就会以16.16位的定点数回报。如果最后一个周期的平均数是12.001帧,那么将报告0x000C0041的值(65536*12.001)。

有了这个平均速率,主机就可以计算出何时在传输中发送一个额外的样本;在这个例子中,每秒8次传输将携带一个额外的样本。除此以外,主机可以使用这个值来使自己与音频设备同步。这使得主机的应用程序,如DVD播放器,能够保持视频与音频的同步。如果不这样做,音频就会慢慢跑到视频前面,两个小时后,声音就会比画面快一秒钟。

为了维持一个较短的反馈回路,诀窍是不要不必要地缓冲音频数据包和反馈数据包。任何额外的缓冲都会在报告中产生延迟,而这种延迟会使得保持流畅的流量更加困难。这意味着底层的USB协议栈和USB音频协议栈应该是紧密结合的,且中间没有缓冲。虽然这在应用处理器上很难实现,但如果软件是在具有可预测执行时间的嵌入式处理器上实现的,这就很容易实现。

多时钟源

上述方案只考虑了两个时钟源--要么USB设备提供时钟,要么主机提供时钟。在更复杂的设备中,如调音台,可能有其他设备提供采样率,例如通过数字接口,如ADAT或SPDIF,或通过携带字时钟的BNC连接器。对于这样的系统,USB音频标准允许设计者在设备中设置一个时钟选择器。

时钟选择器会说明哪一个时钟将被用作提供采样率。时钟选择器有多个输入时钟(例如,S/PDIF连接的输入时钟;本地晶振,以及ADAT连接的输入时钟),通过控制传输,用户可以选择使用哪一个时钟作为输入,例如S/PDIF连接的输入时钟。

合规性与本地支持

一旦一个设备符合USB音频类标准,它就会被干净利落地整合到操作系统中。图3显示了一个插入Mac OS/X的USB音频设备的控制面板截图。图中显示,时钟、采样率、通道音量和静音都是可以控制的,就像其他音频设备一样。

遵循USB音频标准使得设备具有互操作性。O/S供应商可以提供一个单一的USB音频驱动程序来驱动众多的设备,并具有众多的功能。

事实上,同样的USB音频实现可以通过参数化来实现不同数量的通道,而且同样的驱动程序可以用来与不同的设备连接。

一个可互操作的设备出现在一个标准的O/S对话框中(本例中为Mac OS/X),O/S可以设置音量、采样率等

图3:一个可互操作的设备出现在一个标准的O/S对话框中(本例中为Mac OS/X),O/S可以设置音量、采样率等。

总结

USB音频类2.0利用高速USB 2.0的优势,实现了PC和所连接的音频设备之间的低延迟传输。高速USB2.0的高吞吐量可以用来传输许多音频通道,并且具有极高的音频质量。USB音频类标准迎合了广泛的设备,从具有许多通道、多个时钟源和复杂控制的复杂调音台,到环绕声系统、PC扬声器和麦克风,均涵盖在内。

集成支持

技术支持

木瓜科技是XMOS在中国的合作伙伴。如果您身处中国,木瓜科技可为您提供本地化的支持与方案评估,帮助您的项目落地。如您需要协助,可访问 pawpaw.cn 或发送电子邮件至 sales@pawpaw.cn

Copyright © 2021,版权所有。

Xmos Ltd. 是此设计、代码或信息(统称为“信息”)的所有者或被许可人,并“按原样”提供给您,不提供任何类型的明示或暗示保 证,并且不承担任何与其使用有关的责任。Xmos Ltd. 不保证信息或其任何特定实施工作不存在或将不存在任何侵权索赔,并且重申不对任何此类索赔承担任何责任。