usb固件程序如何配置usb audio device,枚举过程是怎么样的?如何配置多个控制接口?谢谢大侠!
USB设备的枚举都差不多。不同类的设备,靠Class 和SubClass来确定。初始化的时候要分配资源,确定带宽等等。 建议看看USB Audio Class的资料,USB org上有。不同的设备是靠不同的地址来确定的。
请问大侠,audio device 端的控制器,如何控制audio数据流的采集与发送,谢谢指教!
不同的芯片,具体实现细节不一样。但是,你可以把device端看成两个功能块:一个负责USB通信,一个负责数据解码,A/D输入和D/A输出。
在USB和主机通信过后,会得到相应的配置,同时,也在PC和device之间形成了数据传输的通道,此通道对于上层软件而言,是透明的,你无须再管。此后,device端会根据此配置,设定不同的采样率和其它参数。设定之后,device就依据这个采样率,不停的通过A/D把数据读回来并发送给PC,同时也把PC传下来的数据解码后,通过D/A输出驱动扬声器。
我现在的困惑就是不知道如何确定读数据的时间片!比如说,device从microphone读多少数据后,然后再发送给pc。再从pc端读多少数据后,解码送给speaker!device 发送数据给pc端的时候,device就会漏掉microphone继续的音频数据,以及如何及时接收pc下传的数据!是不是跟采样率有关系??不理解,特请教!
奈奎斯特采样定理知道吧?要想数据不失真,那么采样率应该至少是最高频率分量的2倍频以上。通常人类能听到的最高频率为20kHz,那么采样率就至少应该为40kHz。
我们日常听的MP3,采样率往往高于40kHz,以获得更好的音质。比如96kHz,192kHz等等。
如果处理器的处理能力不够,那么肯定会出现丢祯的问题。通常,USB device端采用DMA方式或者其它比较快速的方式来进行数据传输,并采用缓冲区来提高传输性能。
举例来说,我们假设device端有一块负责音频处理的芯片,该芯片和系统的内存(比如SRAM)采用DMA方式通信。那么,控制器就只需要负责把PC从USB口写入的数据放到D/A的DMA内存地址里,同时不断的把数据从A/D的DMA内存地址里读出来,通过USB接口返回给PC。而音频处理芯片和系统内存之间的DMA传输,则基本不需要控制器干预。
当然,只要整体上满足采样定理,就可以不管你采用什么方式来进行处理。假设你系统的中断足够快的话,也可以完全由主控制器同时控制采样和USB传输(当然一般不采用这种方式,太浪费资源)。具体的情况,要看你的硬件设计而定。
讲得非常清楚,谢谢你!能不能留个联系方式,以便以后多多交流,谢谢你!
MSN:jiang0020@hotmail.com
QQ: 57414905