关闭

我来说说究竟什么是“USB异步传输” (Asynchronous USB)吧

3016人阅读 评论(0) 收藏 举报

讨论贴:

http://www.erji.net/read.php?tid=767228&fpage=0&toread=&page=1

参考资料:

http://www.usbdacs.com/Concept/Concept.html

A:

废话不多说,直奔主题吧。

对于USB音频传输,有一个规范,叫做“标准USB音频规范”。这个规范有什么用处和好处?
它的用处就在于,实现了以USB接口实时传输音频信号。(汗)
它的好处就在于,直接集成在WINDOWS系统内,也就是说,只要符合这个规范的USB音频产品,WINDOWS系统内的集成驱动就能直接支持,而不用厂商另外开发驱动程序。相反,如果某款USB音频产品有自己的驱动程序,那么它就是不支持这个规范的。(但不表示这个产品就不好,自己开发驱动本身是有研发实力的表现。)

在这个标准USB音频规范下,有三种传输模式:同步、自适应,和异步。
同步:标准的同步模式其实很少见,基本不太用到的,这里省略。
自适应:大多数的产品(比如TI PCM270X、PCM290X系列)都是用的自适应传输模式。
异步:这里的异步,才真正是AYRE QB9所大肆宣传的异步USB传输模式。
所以严格来说,所谓“异步USB传输”,有个大前提,就是在标准USB音频规范下而言。

那么自适应传输模式和异步传输模式到底有何区别呢?
这里先要了解一下USB音频处理的大致流程。电脑通过USB接口将音频数据流传递给DAC上的USB接收芯片,USB接收芯片一边接收数据,一边合成时钟信号,然后转化为标准的I2S或者SPDIF信号,再传递给后面的数据接收芯片,再之后的流程与一般的DAC就没有分别了。
而在这个过程中,影响USB音频音质的关键,就是USB接收芯片所合成的时钟信号。

在自适应模式下,USB接收芯片,在合成时钟信号的过程中,会根据USB传输速率的变化,对时钟信号进行实时的调整。也就是说,在这种情况下,USB传输速率的变化,会直接影响到合成的时钟信号。
举个夸张点的例子:比如现在播放一段44.1K的音频,当然就要求USB接收芯片合成一个44.1K的时钟。而这个44.1K的时钟,对应于USB传输的速率,比如,胡乱说一个,是200个数据包每秒。
也就是说,如果要让USB接收芯片稳定的合成44.1K 的时钟,USB传输速率,也必须稳定在200个数据包每秒。
但现在的问题是,USB传输的速度不可能这么稳定,也许这一秒传递了200个数据包,而下一秒,突然增加到了400个。而这个时候,USB接收芯片会怎么做?它会把实际合成的时钟,提高到88.2K。如果再下一秒的USB速率又变为100个数据包每秒,那么相应的合成时钟就变成了22.05K。当然,这是一个极端夸张的例子。
可是为什么USB接收芯片要这么做?很简单。因为如果USB接收芯片只是单纯的合成44.1K的时钟,每秒处理200个数据包,那么一旦真的收到了400个或者100个数据包,缓存就会溢出,或者断流。
所以,在自适应模式下,USB接收芯片所合成的时钟信号,是随USB口的传输速率实时变化的,传输速率是主,时钟信号为从,USB传输速率的变化直接影响到合成的时钟信号。那么可想而知,这个时钟信号的JITTER有多大。从而你也可以理解,为什么有人会说,换质量好的USB线能提高音质。

那么异步传输是怎么工作的呢?说起来更简单,USB接收芯片现在只需要稳定的合成44.1K的时钟,也就是说,现在这个时钟与USB传输速率无关了。
可是如果这样的话,缓存的问题怎么解决?答案是,软件控制。通过一套软件,根据缓存的负载情况,实时的控制USB口的传输速率,从而保证缓存不会溢出或者断流。在这种情况下,时钟信号为主,传输速率为从,时钟信号不受传输速率变化的影响,理论上这时的JITTER源,就只有工作晶振本身的误差了。

这个方案,就是AYRE QB9所大肆宣传的“异步USB传输”模式。它的实现方式,就是通过TAS1020B这块芯片,配合本地的6M晶振,还有关键的控制传输速率的固件,来完成。
而TAS1020B这块芯片,是一块可编程的芯片,并不是说用了这块芯片就一定是异步USB传输。DAC1 USB,DA11用的也是这块芯片,但都只用到了它 的自适应模式,关键还是看固件怎么写。所以从某种程度上来说,现在的DAC设计,比拼的已经不是硬件,而是软件了。



B:

USB声卡的播放流程是这样的

在主机应用程序中播放音乐前,USB声卡就会从主机端收到如下的两个包:Setup包 和 控制数据包

  根据USB音频类协议分解Setup包,可以得知,本次控制传输的作用是设置USB声卡的采样频率,那么在播放音乐前,必须把I2S控制器的采样频率做相应的设置。才能和主机端保持同步。

这是在主机开始播放音乐时做的事。

然后在播放过程中

USB音频类规定的USB同步传输周期为1ms,每隔1ms,USB设备就会收到一次主机传来的数据。而USB设备会在接收缓存中暂时性的存储这些数据。(TAS1020B的接受缓存刚好能存储24BIT/96K的数据)然后再进行处理,然后送到I2S控制器。在这个过程中,USB1.1因为带宽和优先度的原因,系统其他操作比较繁忙的时候容易出现丢包的状况,在丢包的状况下,USB芯片会把生成一个空数据包(就是全部都是0000000)。因此USB1.1的USB声卡经常出现小爆音。

异步模式的USB DAC中,I2S控制器自己生成时钟,然后向USB芯片发出反馈,USB芯片再对音频数据流进行采样的转换(SRC),转换成I2S控制器所需要的采样,再发给I2S控制器。这时I2S控制器的时钟是自己生成的。没有和USB总线时钟同步,所以很在接收USB处理后的数据时,容易受时钟误差和抖动等影响。在《USB协议及规范》中这样的处理是十分不推荐的。
“Such slips/stuffs will cause audible degradation in audio applications. ”


自适应模式的USB DAC中,USB芯片会对数据包进行处理,根据播放开始前主机端发来的采样信息,加进数据包中,而I2S信号控制器在读取数据包后,会根据采样信息建立相应的时钟,并解包,装载音频数据。

就从USB本身的协议来看,作为“目的”端来说,自适应模式无疑比异步模式更加适合音频。


从电路上来看,QB9是通过FPGA读取播放前主机发来的采样格式信号,然后选择相应频率的时钟,在FPGA上对TAS1020B输出的信号进行时钟重整。而TAS1020B异步模式时所采用的时钟依然是内置的时钟。









参考资料:

《USB协议及规范》
《USB Audio Class协议规范》

同步类型

          ——异步:不同步、但目的(sink)能提供数据速率反馈

          ——同步:同步到USB的SOF时钟

          ——可调:用反馈或feed forward 的数据速率信息实现同步


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:99282次
    • 积分:1430
    • 等级:
    • 排名:千里之外
    • 原创:8篇
    • 转载:109篇
    • 译文:0篇
    • 评论:47条
    最新评论