靳 釗,喬麗萍,王聰華,郭 晨,劉 策
(1.長安大學信息工程學院,西安710064;2.西藏民族學院信息工程學院,陜西咸陽712082)
隨著VoIP產(chǎn)業(yè)的迅猛發(fā)展,與其相關的高品質(zhì)音頻芯片發(fā)展空間巨大。USB是應用面最廣的PC外設接口,其實時同步數(shù)據(jù)傳輸模式適合于傳送高速實時音視頻數(shù)據(jù)流[1-2],因此USB音頻類設備具備較大的應用價值。MP3、MP4等設備的流行普及,使USB接口的應用更為廣泛,若能為這些便攜設備增加USB音頻功能,它們會成為集成語音聊天、網(wǎng)絡電話等功能的通信終端設備,這將大大提高設備的兼容性,擴展其應用領域。
串行接口引擎模塊[3]是USB音頻設備硬件結構中的一個重要的組成部分,負責完成底層數(shù)據(jù)的處理工作。本文根據(jù)有限狀態(tài)機理論,首先得到實現(xiàn)數(shù)據(jù)流功能的有限狀態(tài)機,進一步通過狀態(tài)機控制串行接口引擎,完成對音頻數(shù)據(jù)的處理。設計通過FPGA硬件平臺驗證,成本低、可靠性高及多點數(shù)據(jù)采集,既可作為獨立的產(chǎn)品,也可以方便地集成到其他多媒體采集卡上。
USB設備架構描述的是USB設備中間層的通用屬性與操作[4]。結合USB音頻類設備協(xié)議,圖1給出了本設計的一個包含錄音、放音功能的USB音頻設備架構。設備包含4個功能節(jié)點 IT1、OT3、IT4、OT5,3 個接口 IF0、IF1 和 IF2。
根據(jù)USB音頻類協(xié)議以及本文設計的音頻設備架構,可以確定USB描述符表,功能是將設備接口參數(shù)、結構及邏輯關系報告給主機驅(qū)動程序。USB設備驅(qū)動程序只有收到完整的描述符后,才能“理解”設備的各種接口、端點及功能節(jié)點的配置信息及其邏輯關系。從邏輯分析儀抓取的包數(shù)據(jù)可以分析該設備與主機之間是否正確建立通信[5]。
圖1 USB Audio設備架構
圖2 串行接口引擎框圖
傳統(tǒng)的USB音頻設備大多使用MCU+USB來構成[6],本設計以串行接口引擎完成USB通信系統(tǒng)的底層數(shù)據(jù)處理和鏈路的控制,使用狀態(tài)機取代MCU工作以降低成本。根據(jù)USB協(xié)議以及USB音頻類協(xié)議,串行接口引擎主要分成PHY接口、編碼器、編碼狀態(tài)機、譯碼器、譯碼狀態(tài)機等部分。圖2給出串行接口引擎的結構框圖,圖中的ROM存儲設備描述符表,RAM存儲耳機和麥克風的音頻數(shù)據(jù)。
USB Audio的PHY接口模塊直接與主機的物理PHY接口相連,接收來自主機的差分放大信號并向其發(fā)送NRZI差分信號,因此該模塊分成接收RX與傳送TX兩部分。Phy_dpi,phy_dmi是經(jīng)過PHY接口轉換的D+、D-,phy_di是實際傳輸?shù)臄?shù)據(jù)??偩€工作的空閑態(tài)與工作態(tài)在邏輯上分別與J態(tài)(邏輯電平1)和K態(tài)(邏輯電平0)等價[6]。通過控制D+和D-線從空閑態(tài)到相反的邏輯電平,就可以實現(xiàn)源端口的包發(fā)送。dpllvalid信號為1表示USB包發(fā)送結束(EOP),串行輸入的數(shù)據(jù)有效,開始對主機發(fā)送數(shù)據(jù)進行處理。復位條件為EOP有效。NCVerilog仿真波形見圖3。PHY接口發(fā)送TX部分,以12MHz的速率將資料送給主機PHY??刂艱+和D-兩位同時為0到達SE0態(tài),標志包發(fā)送結束;控制D+和D-線的一位,使D+為1后到達J態(tài),可實現(xiàn)EOP信號的發(fā)送。
圖3 PHY RX仿真波形
圖4 解碼模塊仿真波形
解碼模塊分成NRZI解碼、解碼去‘0’、CRC校驗、串并轉換。在包傳送時,USB使用一種NRZI(None Return Zero Invert,無回零反向碼)編碼方案[7]。解碼過程中,若總線數(shù)據(jù)不變動(0->0,1->1),則檢出“1”;有變動(0->1,1->0),則檢出“0”。采樣信號dpllvalid有效時,得到NRZI解碼后的數(shù)據(jù)rxnrzidata。為了確保信號發(fā)送的準確性,傳送設備要進行位插入操作,即在數(shù)據(jù)被編碼前,在數(shù)據(jù)流每6個連續(xù)‘1’后插入一個‘0’,強迫NRZI碼發(fā)生變化。接收端通過CRC檢測包在傳輸過程中是否發(fā)生損壞[8]。令牌包采用5 bit CRC校驗,數(shù)據(jù)包采用16 bit CRC校驗。串并轉換模塊將串行數(shù)據(jù)轉換為8 bit的并行數(shù)據(jù),計數(shù)器rxbitcnt對接收到的NRZI解碼數(shù)據(jù)進行計數(shù),計數(shù)器rxbytecnt對接收到的字節(jié)數(shù)計數(shù),產(chǎn)生有效命令解碼信息和數(shù)據(jù),以供解碼狀態(tài)機使用。圖4給出了解碼仿真波形。編碼過程完全是解碼過程的逆過程,并串轉換模塊將8 bit并行數(shù)據(jù)轉成1 bit串行數(shù)據(jù),之后產(chǎn)生CRC校驗位,經(jīng)過插入0 bit,NRZI編碼后送出。
編碼及譯碼狀態(tài)機[9]是數(shù)據(jù)流處理部分的核心模塊,控制和協(xié)調(diào)其他各個功能模塊的正常工作。根據(jù)USB音頻設備所要發(fā)送接收的數(shù)據(jù)分組的基本格式,以及USB協(xié)議規(guī)定的總線傳輸方式,可以將USB音頻設備的數(shù)據(jù)分組的各個部分作為一個狀態(tài),控制后面的模塊工作[10]。圖5給出了編碼及譯碼模塊的數(shù)據(jù)流狀態(tài)機。
圖5 數(shù)據(jù)流狀態(tài)機
解碼狀態(tài)機是由USB_IDLE,USB_RX,USB_TX 3個狀態(tài)組成;而編碼狀態(tài)機是由USB_TX、USBtx_start、USBtx_sync、USBtx_pid、USBtx_iso、USBtx_data、USBtx_crc、USB_EOP 8個狀態(tài)組成。USB任何操作都由主機發(fā)起,初始情況下狀態(tài)機處于IDLE狀態(tài)。當探測到數(shù)據(jù)由空閑態(tài)到相反的邏輯電平時,狀態(tài)機從USB_IDLE進入USB_RX,解碼狀態(tài)機開始接收數(shù)據(jù)包。當判斷為主機發(fā)起SETUP控制傳輸,收到DATA0包,此時USB Audio需回ACK給主機,狀態(tài)機跳入USB_TX;當判斷主機發(fā)起端點0的IN控制傳輸,收到IN包,此時USB Audio需回描述符給主機,狀態(tài)機跳入USB_TX;當判斷主機發(fā)起端點3的IN同步傳輸,收到IN包,此時USB Audio需輸出同步音頻數(shù)據(jù)給主機,狀態(tài)機跳入USB_TX。解碼狀態(tài)機主要功能用以處理控制傳輸和同步傳輸。狀態(tài)跳入USB_TX態(tài)時,解碼狀態(tài)機工作結束。在初始情況下,編碼狀態(tài)機處于USBtx_start態(tài),輸出字節(jié)位計數(shù)器清0后,狀態(tài)機跳入USBtx_sync,輸出同步字段8'b0000_0001,輸出字節(jié)位計數(shù)器再次清0后,狀態(tài)機跳入USBtx_pid,之后根據(jù)輸出數(shù)據(jù)分組的具體情況跳轉狀態(tài)。例如:當接收到端點0的OUT包,USBtx_pid態(tài)輸出 PID為 ACK,狀態(tài)跳入USB_EOP;當接收到端點3的IN包,USBtx_pid態(tài)輸出PID為DATA0,狀態(tài)跳入USBtx_iso,同步數(shù)據(jù)輸出結束后,狀態(tài)跳入USBtx_crc,之后跳入USB_EOP。狀態(tài)機仿真波形如圖6所示。
圖6 狀態(tài)機仿真波形
提出的串行接口引擎電路由Verilog HDL編程實現(xiàn),通過NC-Verilog軟件仿真后,采用Altera公司的QuartusⅡ開發(fā)環(huán)境綜合并下載cyclone2 EP2C35芯片驗證平臺上,DAC為PT8211,ADC使用HI5812。通過USB邏輯分析儀抓取數(shù)據(jù)分析,圖7列舉了USB Audio正確回復給主機設備的描述符。同時USB Audio可以正確回復配置描述符、音頻控制接口描述符、音頻數(shù)據(jù)流接口描述符等,此處不再逐一列舉。從分析儀抓取的數(shù)據(jù)中,我們看到USB Audio能夠正確回復設備描述符給主機,可以被主機識別檢測到的,并且在FPGA驗證平臺上,聲音經(jīng)過ADC芯片采集后通過USB Audio正常實現(xiàn)錄音以及放音功能。
圖7 USB Audio設備描述符
本文在對USB協(xié)議中的串行接口引擎部分研究的基礎上,提出了一種USB Audio串行接口引擎模塊的設計方法,并用硬件描述語言加以實現(xiàn)。經(jīng)FPGA硬件驗證,分析數(shù)據(jù)無誤,且錄放音功能正常實現(xiàn)。測試表明設計功能穩(wěn)定,電路結構簡單,具備一定的通用性和可移植性。
[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]曹玲芝,張恒.視頻處理系統(tǒng)高速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核系統(tǒng)設計及FPGA 實現(xiàn)[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高級數(shù)字設計[M].2版.北京:電子工業(yè)出版,2010:200-623.
[10]吳茶花.USB音頻系統(tǒng)設計[D].國防科學技術大學.2010:4-32.