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
USB声卡之时钟模式分析相关推荐
- USB声卡噪音问题,USB声卡中文名设置,基于STM32F411
目录 1.USB声卡噪音问题 1.1USB声卡噪音问题解决 1.2USB消除噪声测试 2.USB声卡中文名设置 2.1USB想要中文名,咋整 3.晒晒板子 1.USB声卡噪音问题 使用STM32F41 ...
- 高品质USB声卡/音频芯片SSS1700|SSS1700设计96 KHz 24位采样率USB耳机麦克风方案|SSS1700中文设计方案讲解
高品质USB声卡/音频芯片SSS1700|SSS1700设计96 KHz 24位采样率USB耳机麦克风方案|SSS1700中文设计方案讲解 台湾鑫创在2021年新推的一款SSS1700,是一款高品质U ...
- STM32 USB声卡录音(USB Microphone),基于CubeMX修改
目录 说明 CubeMX配置 Pinout Clock Configuration Configuration 工程设置 代码工程修改 修改USB设备描述符 修改数据传输配置 声卡测试 说明 Cube ...
- usb声卡驱动_来自MOTU的温馨提示:如果你的声卡在Windows系统下不稳定,你可以这样做!...
武汉大学来自MOTU的温馨提示:如果你的声卡在Windows系统下不稳定,你可以这样做! 在我们日常使用外置声卡时,特别是USB接口的外置声卡,相信绝大多数朋友都遇到过声卡掉线.卡死.无故停止工作等各 ...
- usb声卡驱动_iCON ProDrive第三代USB声卡驱动全新发布!
2019年3月,iCON官方发布了一款全球首创--全新一代"ProDrive III"USB声卡驱动,iCON所有系列USB声卡(包括带声卡的MIDI键盘)已全面启用ProDriv ...
- 主板声卡坏了会不会有电流声_不要小瞧十几块钱的USB声卡!
USB声卡是通过连接电脑USB孔的音频处理硬件,严谨地说是通过USB总线与电脑系统连接,区别于电脑主板集成声卡.不要小看十几元的USB声卡,其对音频的处理能力比很多主板集成声卡都要好.因为USB声卡在 ...
- ubuntu18 usb耳机,ubuntu18.04 调试USB声卡
由于项目需要进行声音播放,但是主板上没有声卡模块就使用USB外接声卡来实现音频播放. (项目使用ubuntu18.04的系统) 首先我们在主板上插入USB声卡,在终端中输入:lsusb $ lsusb ...
- Linux - UAC USB声卡
Linux - UAC USB声卡 USB-HID定义 UAC定义 UAC设置 UAC 测试 最近项目里需要做一个linux平台的USB声卡,及通过USB插入Android设备,可识别成为一个USB声 ...
- Deepin禁用usb声卡
笔者用的是漫步者声卡支持3.5mm和USB两种接口.USB接口虽然能识别出来,但是没有声音.故禁止usb声卡驱动,usb口仅仅用作供电. 添加/etc/modprobe.d/blacklist-usb ...
最新文章
- 计算机组成原理实验认识多思网络虚拟实验系统_3D全息投影,裸眼3D,全息互动投影系统...
- 基于python的移动物体检测_感兴趣区域的移动物体检测,框出移动物体的轮廓 (固定摄像头, opencv-python)...
- MySQL学习(四)
- 计算机技能需求新排名:C语言仅排第 8,第 1 名你想不到!
- 华软计算机网络技术,[计算机硬件及网络]计算机网络技术专业自评报告华软.doc...
- 【转载保存】网页提取正文算法汇总
- 再问数据中台-数据中台和数据仓库,数据平台的关系是什么?
- js 时间获取格式化 fmt
- [IDDFS+背包] 洛谷P2744 [USACO5.3]量取牛奶Milk Measuring
- sql转java对象_关于hibernate中使用sql语句时,类对象的转换问题。
- python滤波器的截面图_Python OpenCV学习笔记之:图像滤波处理
- 【转】所需即所获:像 IDE 一样使用 vim
- C语言中的strcmp函数的作用是什么,c语言strcmp函数用法是什么?
- ADPCM 音频压缩算法
- python pandas按照行数切分文件
- gopher对mysql的利用_gopher协议的攻击利用
- 虚拟存储器的基本概念
- 攻击重放技术以及什么是重放攻击?
- winpe 能否修复服务器系统,教你如何使用winpe来修复系统
- 用Prophet预测USDCNY走势--------仿照forecasting-stock-perfomance-with-prophet对美元人民币走势进行预测
热门文章
- android6.0最新补丁,谷歌发布安卓补丁修复漏洞 支持6.0之后所有版本
- 如何针对企业产品进行有效分析,看大佬用SQL分析淘宝用户行为
- ASP做paypal支付接口详细代码和实例
- JAVA程序设计:摘樱桃(LeetCode:741)
- oracle access advisor,oracle11g新特性-SQL Access Advisor
- 服务器上的run在哪个位置,UO服务器RunUO《服务端的建立以及修改》.doc
- numa节点间CPU利用率不均衡 - wakeup affinity
- linux 系统下通过 pid 查看相关进程信息的方法
- 有关手机app开发价格的一些决定因素
- Windows 10系统中,如何重命名用户文件夹