USB音频设备类的音频信号同步解决方案

USB音频设备类的音频信号同步解决方案,第1张

  本文针对使用USB_Audio_Class进行语音设备设计时需要解决的音频信号同步问题进行了介绍,并给出了相应的解决方法和部分源代码。

  引 言

  USB总线协议经历了从USB1.1到USB2.0再到目前的USB OTG(USB On-The-Go)的发展过程,在USB不断发展完善的同时,越来越多的USB产品大量上市。现在的PC机通过USB Hub设备和多个USB控制器,能同时支持扩展的USB设备已经达到数百个。

  在USB总线传输中,任何一次USB的数据传输都必须由主机来发起和控制,所有的USB外设都只能和主机建立连接,任何两个外设之间或者两个主机之间无法直接通信。目前,扮演主机角色的大多是个人电脑(PC)。

  USB协议制定时,为了方便不同设备的开发商基于USB进行设计,定义了不同的设备类来支持不同类型的设备。现在市场上的USB产品,通过调查会发现它们主要应用了以下设备类:

  USB_DEVICE_CLASS_HUMANINTERFACE 键盘、鼠标等

  USB_DEVICE_CLASS_STORAG U盘、活动硬盘、数码相机等

  USB_DEVICE_CLASS_PHYSICAL_INTERFACE力回馈游戏杆、方向盘等

  USB_DEVICE_CLASS_POWER 风扇、LED台灯、手机充电等

  USB_DEVICE_CLASS_PRINTER 打印机

  从市场上看,虽然在USB标准中定义了USB_DE-VICE_CLASS_AUDIO,但是很少有此类设备问世。目前称为USB音箱的设备,大都使用 USB_DEVICE_CLASS_POWER,仅仅将USB接口作为电源使用。信号仍然需要3.5 mm立体声音频线连接使用,连接相对复杂。这样没有体现USB设备连接简单, *** 作方便的优势,且采用模拟信号传送会产生一定的信号失真,影响音质。

  本文为了设计实现一个完全基于USB协议的USB_DEVICE_CLASS_AUDIO设备,采用一根USB连接线,在设备中不同的端点 (endpoint)实现音频信号的输入,输出包括相关按键控制,并重点讨论如何解决由于USB特殊的总线拓扑结构造成的信号同步问题。

  1 USB_DEVICE_CLASS_AUDIO介绍

  为简化USB设备的开发过程,USB提出了设备类的概念。其中的音频设备类(USB_DEVICE_CLASS_AU-DIO)是目前为止使用比较少的类型。

  USB_DEVICE_CLASS_AUDIO是专门针对USB音频设备定义的一种专用类别,它不仅定义了音频输入/输出端点的标准,还提供了音量控制、混音器配置、左右声道平衡,甚至包括对支持杜比音效解码设备的支持,功能相当强大。不同的开发者可以根据不同的需求对主机列举自己的设备结构,主机则根据列举的不同设备结构提供相应的服务。

  USB_DEVICE_CLASS_AUDIO设备采用USB传输模式中的Isochronous transfers模式,Isochronous trans-fers传输模式是专门针对流媒体特点的传输方法。它依照设备在链接初始化时列举的参数,保证提供稳定的带宽给采用该模式的设备或端点。由于对实时性的要求,它不提供相应的接收/应答和握手协议。这很好地适应了音频数据流量稳定、对差错相对不敏感的特点。

  2 平台介绍与系统架构

  开发平台采用ColdFire MCF52223作为控制MCU。该芯片提供32 KB SRAM,256 KB Flash,具备USB-OTG模块,80 MHz主频下达到76Dhrystone 2.1 MIPS,同时板载ML2308作为音频播放模块。详细资料可以参阅其官方网站http://www.hhcn. com/chinese/coldfire/HHCF52223-R1.htm。

  主要硬件模块结构和软件模块结构分别如图1、图2所示。

  

USB音频设备类的音频信号同步解决方案,第2张

 

  3 同步问题

  由于USB总线拓扑结构的特殊性,所有数据传输都由主机(PC)发起,在设备插上USB接口并完成初始化、列举等步骤以后,主机会按照设备列举的要求进行流量分配。USB全速模式总线以1 ms为1帧。由于采用Isoch-ronous transfers模式,为测试方便,音频格式采用8 k/s采样率,8位量化。因此单声道每帧数据量为:

  

USB音频设备类的音频信号同步解决方案,第3张

 

  MCF52223通过USB D驱动在接收并解出USB数据包里的音频数据后,存入内部开辟的缓存中。ML2308每个声道具有64字节缓存,当缓存满、缓存一半和缓存为空时会分别发送中断信号Full、Mid、Empty给MCF52223,而MCF52223可以根据不同的中断信号对ML2308进行写入新数据工作。

  因此,在设备的写入端数据按照PC上的USB的时钟进行传输,而在设备输出端数据按照ML2308的时钟进行 *** 作。ML2308时钟来自板载晶振,这两个时钟不可避免存在一定误差,而且根据测试,不同PC的USB总线时钟也有微小差别。这些差异会造成设备内部缓存的音频数据不断被消耗殆尽,或者不断增加而最终溢出。因此,需要一个易于实现且对资源消耗量较小的方法来同步输入与输出信号。由于这种差异是不确定的,该算法需要一定的自适应能力。

  

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2526350.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-05
下一篇 2022-08-05

发表评论

登录后才能评论

评论列表(0条)

保存