USB声卡之时钟模式分析

USB音频声卡采用isochronous “等时传输模式”(或者同步传输、实时传输),能保证实时传输数据,允许一定误码率,出错不重传。

等时传输模式

实时传输,即 PC端发出多少速率的数据,USB接收端(USB声卡)就得接收多少速率。

比如电脑发送44.1KHZ的,声卡就固定接收44.1KHZ。

关于时钟同步

电脑内有一个晶振,可分频出一个44.1KHZ,进行音乐播放。

USB声卡自己得有一个晶振才能工作,它也可分频出一个44.1KHZ,供给I2S信号或DAC。

问题来了,晶振是有误差的,这两个44.1KHZ不可能完全一模一样,电脑可能是44.100KHZ,USB声卡可能是44.098KHZ,误差约50ppm,很正常的情况。

虽然声卡晶振分频出来是44.098KHZ,但声卡认为它就是工作在44.100KHZ下。

如果二者时钟独立运行,那么1个小时会误差0.2秒,会出现不同步! 即电脑播了1个小时的数据,USB声卡实际是无法播完的,要多0.2秒才能播完。 如果声卡也要1小时播完,那这1小时就需要丢掉0.2秒的数据。

所以二者的时钟必须要同步一致才行,因此USB音频规定了一是采用“等时传输模式”,二是设备需要指定为3种同步方式之一:同步(synchronous),适应(adaptive),异步(asynchronous)。(摘自USB2.0规范)

模式说明
Synchronous同步方式发送端Fs locked to SOF, Uses implicit feedback(SOF) 使用隐式反馈,数据速率Fs与SOF同步;接收端Fs locked to SOF, Uses implicit feedback(SOF) 使用隐式反馈,数据速率Fs与SOF同步;两种设备的时钟都需要通过PLL与USB的SOF时钟同步(1ms一个)。这样数据速率就同步了。可以工作在一个固定速率、数量有限的速率、或可编程速率。
Adaptive自适应方式发送端Fs locked to sink, Uses explicit feedback(isochronous pipe) 使用显式反馈,数据速率Fs与接收端同步;接收端Fs locked to data flow, Uses implicitfeedforward (data stream) 使用隐式前馈,数据速率Fs与数据流同步;自适应发送端,它产生数据的速率由接收端控制,接收端提供反馈给发送端,发送端就知道目标数据速率。自适应接收端,数据速率信息是嵌入在接收到的数据流里的,即根据一段时间内接收到的样本数量来知道当前速率值。可工作在一个速率附近、在多个速率间选择、或多个速率段内。
Asynchronous异步方式发送端Free running Fs, Provides implicitfeedforward (data stream) 提供隐式前馈,数据速率Fs自由运行;接收端Free running Fs, Provides explicit feedback(isochronous pipe) 提供显式反馈,数据速率Fs自由运行;异步发送端发送样本数据,一个帧内发送的数据量就隐性指出了数据速率。异步接收端则必须提供明确的反馈信息给驱动程序。发送端必须要从HOST接收明确的反馈信息,这样它才能准确生成HOST需要的样本数量。

分析

电脑播放器播放音乐时:是按一个固定的速率,比如44.1KHZ,发给USB的数据流速率固定。

如果USB声卡是Synchronous方式:那它的时钟将通过PLL直接与SOF时钟同步,即与电脑就同步了。

如果USB声卡是Adaptive方式:那么数据速率Fs是与来的数据流同步,即根据一段时间内的接收到的样本数量来知道当前速率值。因为电脑播放的数据速率是固定的,所以声卡的时钟就和电脑同步了,即与电脑的44.1KHZ实际时钟频率同步,把自己的44.098KHZ时钟通过PLL纠正成44.1KHZ时钟了。 如果电脑时钟是44.102KHZ,那就纠正成44.102KHZ,电脑发多快,它就收多快。

如果USB声卡是Asynchronous方式:那么Fs根据声卡自己的频率运行(名义上是44.1KHZ,但实际频率有误差,比如44.098KHZ),声卡必须反馈告诉电脑想接收的数据量,以进行流控。但电脑播放的数据速率是固定的,是按电脑自己的时钟的,不会改变,因此声卡要的数据总会偏多或偏少,时间久了都会造成缓冲区清空或溢出,从而影响播放,要重新同步下。所以用Asynchronous方式是不合适的。除非电脑的驱动程序单独编制,想一个办法以处理这种数据流不同步的情况。 这也许就是XMOS子卡需要单独安装驱动的原因。

摘自http://bbs.erji.net/forum.php?mod=viewthread&tid=2076674&page=1

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值