一种传输实时USB音频的串行接口引擎设计*
2013-12-30乔丽萍王聪华
靳 钊,乔丽萍,王聪华,郭 晨,刘 策
(1.长安大学信息工程学院,西安710064;2.西藏民族学院信息工程学院,陕西咸阳712082)
随着VoIP产业的迅猛发展,与其相关的高品质音频芯片发展空间巨大。USB是应用面最广的PC外设接口,其实时同步数据传输模式适合于传送高速实时音视频数据流[1-2],因此USB音频类设备具备较大的应用价值。MP3、MP4等设备的流行普及,使USB接口的应用更为广泛,若能为这些便携设备增加USB音频功能,它们会成为集成语音聊天、网络电话等功能的通信终端设备,这将大大提高设备的兼容性,扩展其应用领域。
串行接口引擎模块[3]是USB音频设备硬件结构中的一个重要的组成部分,负责完成底层数据的处理工作。本文根据有限状态机理论,首先得到实现数据流功能的有限状态机,进一步通过状态机控制串行接口引擎,完成对音频数据的处理。设计通过FPGA硬件平台验证,成本低、可靠性高及多点数据采集,既可作为独立的产品,也可以方便地集成到其他多媒体采集卡上。
1USB Audio的设备架构与设备描述符
USB设备架构描述的是USB设备中间层的通用属性与操作[4]。结合USB音频类设备协议,图1给出了本设计的一个包含录音、放音功能的USB音频设备架构。设备包含4个功能节点 IT1、OT3、IT4、OT5,3 个接口 IF0、IF1 和 IF2。
根据USB音频类协议以及本文设计的音频设备架构,可以确定USB描述符表,功能是将设备接口参数、结构及逻辑关系报告给主机驱动程序。USB设备驱动程序只有收到完整的描述符后,才能“理解”设备的各种接口、端点及功能节点的配置信息及其逻辑关系。从逻辑分析仪抓取的包数据可以分析该设备与主机之间是否正确建立通信[5]。
图1 USB Audio设备架构
图2 串行接口引擎框图
2 串行接口引擎的结构及实现
2.1 串行接口引擎结构
传统的USB音频设备大多使用MCU+USB来构成[6],本设计以串行接口引擎完成USB通信系统的底层数据处理和链路的控制,使用状态机取代MCU工作以降低成本。根据USB协议以及USB音频类协议,串行接口引擎主要分成PHY接口、编码器、编码状态机、译码器、译码状态机等部分。图2给出串行接口引擎的结构框图,图中的ROM存储设备描述符表,RAM存储耳机和麦克风的音频数据。
2.2 PHY接口设计
USB Audio的PHY接口模块直接与主机的物理PHY接口相连,接收来自主机的差分放大信号并向其发送NRZI差分信号,因此该模块分成接收RX与传送TX两部分。Phy_dpi,phy_dmi是经过PHY接口转换的D+、D-,phy_di是实际传输的数据。总线工作的空闲态与工作态在逻辑上分别与J态(逻辑电平1)和K态(逻辑电平0)等价[6]。通过控制D+和D-线从空闲态到相反的逻辑电平,就可以实现源端口的包发送。dpllvalid信号为1表示USB包发送结束(EOP),串行输入的数据有效,开始对主机发送数据进行处理。复位条件为EOP有效。NCVerilog仿真波形见图3。PHY接口发送TX部分,以12MHz的速率将资料送给主机PHY。控制D+和D-两位同时为0到达SE0态,标志包发送结束;控制D+和D-线的一位,使D+为1后到达J态,可实现EOP信号的发送。
图3 PHY RX仿真波形
图4 解码模块仿真波形
2.3 解码与编码模块设计
解码模块分成NRZI解码、解码去‘0’、CRC校验、串并转换。在包传送时,USB使用一种NRZI(None Return Zero Invert,无回零反向码)编码方案[7]。解码过程中,若总线数据不变动(0->0,1->1),则检出“1”;有变动(0->1,1->0),则检出“0”。采样信号dpllvalid有效时,得到NRZI解码后的数据rxnrzidata。为了确保信号发送的准确性,传送设备要进行位插入操作,即在数据被编码前,在数据流每6个连续‘1’后插入一个‘0’,强迫NRZI码发生变化。接收端通过CRC检测包在传输过程中是否发生损坏[8]。令牌包采用5 bit CRC校验,数据包采用16 bit CRC校验。串并转换模块将串行数据转换为8 bit的并行数据,计数器rxbitcnt对接收到的NRZI解码数据进行计数,计数器rxbytecnt对接收到的字节数计数,产生有效命令解码信息和数据,以供解码状态机使用。图4给出了解码仿真波形。编码过程完全是解码过程的逆过程,并串转换模块將8 bit并行数据转成1 bit串行数据,之后产生CRC校验位,经过插入0 bit,NRZI编码后送出。
2.4 编码及译码状态机
编码及译码状态机[9]是数据流处理部分的核心模块,控制和协调其他各个功能模块的正常工作。根据USB音频设备所要发送接收的数据分组的基本格式,以及USB协议规定的总线传输方式,可以将USB音频设备的数据分组的各个部分作为一个状态,控制后面的模块工作[10]。图5给出了编码及译码模块的数据流状态机。
图5 数据流状态机
解码状态机是由USB_IDLE,USB_RX,USB_TX 3个状态组成;而编码状态机是由USB_TX、USBtx_start、USBtx_sync、USBtx_pid、USBtx_iso、USBtx_data、USBtx_crc、USB_EOP 8个状态组成。USB任何操作都由主机发起,初始情况下状态机处于IDLE状态。当探测到数据由空闲态到相反的逻辑电平时,状态机从USB_IDLE进入USB_RX,解码状态机开始接收数据包。当判断为主机发起SETUP控制传输,收到DATA0包,此时USB Audio需回ACK给主机,状态机跳入USB_TX;当判断主机发起端点0的IN控制传输,收到IN包,此时USB Audio需回描述符给主机,状态机跳入USB_TX;当判断主机发起端点3的IN同步传输,收到IN包,此时USB Audio需输出同步音频数据给主机,状态机跳入USB_TX。解码状态机主要功能用以处理控制传输和同步传输。状态跳入USB_TX态时,解码状态机工作结束。在初始情况下,编码状态机处于USBtx_start态,输出字节位计数器清0后,状态机跳入USBtx_sync,输出同步字段8'b0000_0001,输出字节位计数器再次清0后,状态机跳入USBtx_pid,之后根据输出数据分组的具体情况跳转状态。例如:当接收到端点0的OUT包,USBtx_pid态输出 PID为 ACK,状态跳入USB_EOP;当接收到端点3的IN包,USBtx_pid态输出PID为DATA0,状态跳入USBtx_iso,同步数据输出结束后,状态跳入USBtx_crc,之后跳入USB_EOP。状态机仿真波形如图6所示。
图6 状态机仿真波形
3 FPGA硬件验证结果
提出的串行接口引擎电路由Verilog HDL编程实现,通过NC-Verilog软件仿真后,采用Altera公司的QuartusⅡ开发环境综合并下载cyclone2 EP2C35芯片验证平台上,DAC为PT8211,ADC使用HI5812。通过USB逻辑分析仪抓取数据分析,图7列举了USB Audio正确回复给主机设备的描述符。同时USB Audio可以正确回复配置描述符、音频控制接口描述符、音频数据流接口描述符等,此处不再逐一列举。从分析仪抓取的数据中,我们看到USB Audio能够正确回复设备描述符给主机,可以被主机识别检测到的,并且在FPGA验证平台上,声音经过ADC芯片采集后通过USB Audio正常实现录音以及放音功能。
图7 USB Audio设备描述符
4 结论
本文在对USB协议中的串行接口引擎部分研究的基础上,提出了一种USB Audio串行接口引擎模块的设计方法,并用硬件描述语言加以实现。经FPGA硬件验证,分析数据无误,且录放音功能正常实现。测试表明设计功能稳定,电路结构简单,具备一定的通用性和可移植性。
[1]Sostari D,Vinko D,Svedek T.USB RF Front-End of the DRM Receiver under LabView API Environment[C]//Proceedings of the 35th International Convention of MIPRO.2012,218-221.
[2]曹玲芝,张恒.视频处理系统高速USB接口设计[J].电子器件,2007,30(4):1337-1340.
[3]基于nRF2401无线USB串口转换模块[J].电子器件,2009,32(4):778-780.
[4]Universal Serial Bus Device Class Definition for Audio Device.Release 1.0[EB/OL].http://www.usb.org/developers/devclass_docs/audio10.pdf.March 18,1998.
[5]雍尚刚,邓龙江,朱向东.USB设备控制器IP核系统设计及FPGA 实现[J].计算机工程与科学,2005,27(12):86-89.
[6]Xu Lijun,Gao Guohong,Li Xueyong et al.Video Collection System Based on Embedded System and USB Communication[C]//Second International Conference on Communication Systems Networks and Applications(ICCSNA).2010:112-114.
[7]Universal Serial Bus Specification.Revision1.1[EB/OL].http://esd.cs.ucr.edu/webres/usb11.pdf.1998.
[8]Universal Serial Bus Device Class Definition for Audio Data Formats.Release 1.0[EB/OL].http://www.usb.org/developers/devclass_docs/frmts10.pdf.March 18,1998.
[9]Ciletti M D.Verilog HDL高级数字设计[M].2版.北京:电子工业出版,2010:200-623.
[10]吴茶花.USB音频系统设计[D].国防科学技术大学.2010:4-32.