基于USB2.0的高速數(shù)據(jù)通信接口設計
關鍵詞:EZ-USB FX2; CY7C68013; TMS320C6203B; 數(shù)據(jù)傳輸
ABSTRACT: Using CY7C6801 as the control chip, the communication between DSP and PC in the voice signals processing system is realized. A brief introduction of the basic features of EZ2USB CY7C68013 and the designing of interface to TMS320C6203B is provided. The development of Programming Firmware、device driver and application are thoroughly researched.
Key words: EZ-USB FX2; CY7C68013; TMS320C6203B; data transmission
0 引言
由于DSP的工作頻率較高,如TMS320C6203B時鐘頻率高達250MHZ,故其數(shù)據(jù)讀寫周期很短,然而PC機串口讀寫速度較低,最大數(shù)據(jù)吞吐量約為115kbps,盡管DSP在與這些慢速外設進行數(shù)據(jù)交換時可以加入額外的等待周期,但是在實時性要求苛刻,算法復雜的場合,將DSP從這些冗長的等待周期中解放出來,將其時間重點放在處理關鍵的實時任務中去,有著重要的實際意義[1]。為了提高系統(tǒng)的實時性, 高速接口電路設計顯得尤為重要。目前流行的EZ-USB FX2芯片的傳輸速率為480Mbps,較好地解決了DSP與PC機間高速數(shù)據(jù)傳輸時的帶寬瓶勁問題。本文設計并實現(xiàn)了TMS320C6000 系列DSP上, 利用EZ-USB FX2系列芯片CY7C68013 的接口技術, 實現(xiàn)了DSP 與計算機之間的高速數(shù)據(jù)傳輸。
1 CY7C68013結(jié)構特點
CY7C68013是Cypress公司研制開發(fā)的EZ-USB FX2系列芯片,該芯片符合USB2.0規(guī)范,同時兼容USB1.0的全速工作模式[2],它的功能框圖主要包括5個部分(圖1):
(1)收發(fā)器。USB和PC機通過D+和D-兩根信號線進行數(shù)據(jù)傳輸,數(shù)據(jù)以480Mbit/s的全速信號或者以240Mbit/s的半速信號在D+和D-信號線上差分傳輸。
(2)智能接口引擎(SIE)。SIE通過包排序、信號產(chǎn)生、信號檢測、CRC產(chǎn)生、CRC校驗、NRZI數(shù)據(jù)編碼、位填充、包標識產(chǎn)生和解碼等功能來處理USB通信協(xié)議,并保證傳送到USB電纜上的數(shù)據(jù)字節(jié)以LSB開頭。
(3)通用微控制器以及片上RAM。USB控制器采用通用的8051微控制器,即編程語言為51系列單片機的通用語言,可使實際操作更加靈活方便。
(4)I2C總線控制器。主要為完成將USB控制器作為主設備時必須的配置。
(5)片內(nèi)FIFO。其容量為4KB,可以快速實現(xiàn)與不同速度的外設通信。
2 CY7C68013與TMS320C6203B的接口電路設計
CY7C68013是一個非常方便的USB2.0實現(xiàn)方案,它提供與DSP連接的接口,連接方式有兩種:Slave FIFOs和Master可編程接口GPIF[3]。本文采用Slave FIFOs異步讀寫方式。Slave FIFOs方式是從機方式,DSP可以象讀寫普通FIFO一樣對CY7C68013內(nèi)部的多層緩沖進行讀寫。具體的電路連接如圖2所示:
圖1 CY7C68013功能框圖
圖2 CY7C68013與TMS320C6203B電路連接圖
FLAGA、FLAGB和FLAGC是CY7C68013內(nèi)部FIFO的狀態(tài)標志,TMS320C6203B通過通用I/O口獲得CY7C68013內(nèi)部FIFO的空、半滿(由用戶設定半滿閾值)和滿這3個狀態(tài)信號,EMIF接口的CE2空間對CY7C68013進行讀寫操作。其工作過程為:DSP通過USB向PC發(fā)送數(shù)據(jù)時,首先查看空、半滿和滿這3個狀態(tài)信號,然后向USB寫入適當大小的數(shù)據(jù),以保證數(shù)據(jù)不會溢出;PC機通過USB向DSP發(fā)送命令字時,USB通過中斷方式通知DSP讀取命令字。
3 軟件設計
系統(tǒng)的軟件設計包括3部分:C8051固件設計、設備驅(qū)動程序沒計和應用軟件設計。CY7C68013的功能具體實現(xiàn)過程如下:
(1)當設備連接時,Windows的設備管理器自動檢測到該設備,并讀取由CY7C68013核心(并非C805l固件)傳回的設備描述符,根據(jù)它提供的廠商和產(chǎn)品ID號VID/PID(存放在FX2外接E2PROM中)與.inf文件進行比較,找到固件下載驅(qū)動程序(ezloader.sys),從主機將C8051固件下載到CY7C68013的RAM中。
(2)C8051固件下載到RAM后,CY7C68013仿真一個脫離再連接至USB總線的過程,執(zhí)行重新枚舉過程,讓C805l固件控制USB傳輸。Windows的設備管理器會檢測到新的USB設備的連接,并根據(jù)C8051固件提供的廠商ID(VID)/產(chǎn)品ID(PID)(不同于CY7C68013核心提供的VID/PID)來加載該USB設備的設備驅(qū)動程序。
(3)應用軟件調(diào)用CreateFile()API函數(shù),使用識別該設備的符號鏈接來取得該設備的代號。取得設備的句柄后,應用軟件通過DeviceIoControl()向I/O系統(tǒng)服務發(fā)出要求傳入數(shù)據(jù)的I/O請求,I/O管理器將此請求構造成一個合適的IRP傳遞給CY7C68013設備驅(qū)動程序。CY7C68013設備驅(qū)動程序根據(jù)該IRP中包含的具體操作來構造相應的USB請求塊,并據(jù)此形成新的IRP傳遞給USB總線驅(qū)動程序。USB總線驅(qū)動程序根據(jù)該USB請求塊從CY7C68013設備讀取數(shù)據(jù)。操作的結(jié)果再用IRP一層一層地返回給應用程序,應用程序再對數(shù)據(jù)進行分析和處理[4]。
3.1 C8051固件設計
Cypress公司為了簡化固件開發(fā),縮短時間,加速USB外圍的開發(fā),在EZ-USB FX2軟件開發(fā)包里提供了固件架構。該固件架構利用C8051的程序代碼來實現(xiàn)CY7C68013芯片起始設置、USB標準設備請求的處理以及USB閑置模式的電源管理服務。用戶僅需提供其USB描述符表(即dscr.a51)及實現(xiàn)外圍功能的程序代碼(periph.c),即可完成完全兼容的USB設備。
固件的編譯在Kei的集成開發(fā)環(huán)境中進行,在建立的項目中包含5個文件ez_usb.lib、
usbjmptb.obj、dscr.a51和periph.c,其中:
固件架構程序流程如圖3所示。該程序首先初始化所有的內(nèi)部狀態(tài)變量,然后調(diào)用TD_Init函數(shù)進行初始化,初始化主要包括:
(1)使CY7C68013工作于異步從FIFO模式。相應的寄存器操作為IFCONFIG=0xCB。
(2)將4KB的FIFO對應到兩個端點(EndPoint),即EndPoint2和EndPoint6。相應的寄存器操作為:EP2(:FG=0xA0,EP6(:FG=0xE2。EndPoint2與EndPoint6分別對應21kB的內(nèi)部FIFO(下面分別稱作FIF02,F(xiàn)IF06),存放LJSB需要上傳與接收的數(shù)據(jù)。其中EndPoint2為OUT型,負責從主機接收數(shù)據(jù);EndPoint6為IN型,負責向主機發(fā)送數(shù)據(jù)。另外EndPoint2
與EndPoint6均采用批量(BULK)傳輸方式,這種方式相對于其他LJSB2.0定義的傳輸方式
具有數(shù)據(jù)可靠、傳輸速率高等特點,是最常用的傳輸方式。www.51kaifa.com/
(3)對FIF0進行配置。相應的寄存器操作為E192FIFO(:FG=0xl 1,EP6FIFOCFG=0x0D。本案例將FIF02,F(xiàn)IF06設置成自動方式。
圖3 固件架構程序流程
初始化完成后,打開中斷,之后固件程序開始枚舉USB設備,直至端點0上接收到通信建立包時為止[5]。一旦收到通信建立包,將重復執(zhí)行下面的任務分配過程:
(1)調(diào)用TD_Poll()函數(shù),以完成用戶指定的任務。
(2)判斷是否有USB設備請求?如果有,則調(diào)用ParseControlTransfer()函數(shù)進行相應的處理;如果沒有,則繼續(xù)向下執(zhí)行。
(3)檢測USB總線是否空閑。如果空閑,則調(diào)用TD_Suspend()函數(shù),交由用戶處理。在TD_Suspend返回真值后,8051處于空閑狀態(tài)。這時,只有USB總線活動或芯片Wakeup管腳活動,才能將8051重新激活。
(4)8051被激活后,固件程序?qū)⑹紫日{(diào)用TD_Resume()函數(shù),以使8051從空閑狀態(tài)中恢復出來,然后再處理用戶指令。
3.2 設備驅(qū)動程序設計
開發(fā)USB設備驅(qū)動程序,可采用Numege公司的開發(fā)包DriverWorks和Mitmsoft公司的
Windows 2000 DDK.并以VC++6 0作為輔助開發(fā)環(huán)境。
CY7C68013的設備驅(qū)動程序有兩種:一種用來在設備接人時從主機下載困件到RAM中,稱為固件下載驅(qū)動程序(ezloader.sys);另一種是在設備重新枚舉后加載的設備驅(qū)動程序(ezusb.sys),應用軟件通過該設備驅(qū)動程序與CY7C68013通信。固件的程序代碼既可以通過外部E2PROM下載,也可通過主機下載。本文以從主機下載為例進行說明,若選擇主機下載方式,則此時外接E2PROM中存放的是固件下載的PID/VID,且第1個字節(jié)是0xC0H,系統(tǒng)通過該PID/VID找到固件下載驅(qū)動程序(ezloader.sys),將相應的固件代碼下載到FX2的RAM中。
在將固件下載到RAM中后,系統(tǒng)清除內(nèi)存中的固件下載驅(qū)動程序.并進行重新枚舉,讓C8051固件控制CY7C68013。此時,系統(tǒng)獲得由C8051固件提供的PID/VID(與E2PROM中的不同),認為有新的USB設備接入,并據(jù)此加載相應的設備驅(qū)動程序。
3.3 應用軟件設計
應用軟件滿足系統(tǒng)與用戶的接口,它通過通用驅(qū)動程序完成對外設的控制和通信,如開啟/關閉USB設備、檢測USB設備、設置USB數(shù)據(jù)管道等。它由動態(tài)鏈接庫和應用程序兩部分組成:動態(tài)鏈接庫負責與USB設備驅(qū)動程序通信,響應應用程序的各種請求;應用程序則則以定時查詢的方式將TMS320C6203B后的數(shù)據(jù)讀入計算機事先開辟的大容量內(nèi)存緩沖區(qū), 同時從緩沖區(qū)讀出數(shù)據(jù)實時顯示, 處理結(jié)束后再將內(nèi)存緩沖區(qū)的數(shù)據(jù)存盤以及向TMS320C6203B發(fā)送控制命令。
動態(tài)鏈接庫對設備驅(qū)動程序的訪問都是通過I/O Control調(diào)用來實現(xiàn)。首先調(diào)用Win32函數(shù)CreatFile()得到設備驅(qū)動程序的句柄,然后調(diào)用Win32函數(shù)DeviceIocontrol (),通過得到的句柄把IOCTL和相關的輸入輸出緩沖區(qū)提交給驅(qū)動程序。當應用軟件退出時,用
CloseHandle()函數(shù)關閉設備。
在編寫應用程序時,先建立與外沒的連接,然后實施數(shù)據(jù)的傳輸。在系統(tǒng)啟動信號處理算法后,為保證不丟失數(shù)據(jù),用戶程序應建立一個新的工作線程專門獲取外沒傳來的數(shù)據(jù)。程序中主要用到兩個API函數(shù)CreateFile()和DeviceIoControl()。CreatFile()取得設備句柄后,DeviceIoControl()根據(jù)該句柄完成數(shù)據(jù)傳輸。,
部分程序代碼如下:
hDevice=CreateFile(“.EZUSB_0”,
GENERIC_READ| GENERIC_WRITE,
FILE_SHARP_WRITE,NULL,OPEN_EXISTING,
FILE_ATTRIBUTE_NORAL,NULL);
If(hDevice= =INVALID_HANDLE_VALUE)
{ Application->MessageBoxA(“創(chuàng)建設備失敗,請確認設備是否連接上!”,NULL,IDOK);}
else{DeviceControl(hDevice,IOCTL_ EZUSB_BULK_WRITE,
&blkctl,sizeof(BULK_TRANSFER_CONTROL),
&inBUFFER,
sizeof(inBuffer),
&nBytes,
NULL);
…}
4 結(jié)論
采用兩種方法對本系統(tǒng)的數(shù)據(jù)傳輸速度進行測試:
(1) DSP 將ADC 采集的語音信號進行處理后,將其頻率、相位等數(shù)據(jù)上傳給計算機進行分析處理;
(2)計算機將控制指令傳給DSP。結(jié)果顯示, 兩種方法的傳輸速度均可達到64Mb/s以上, 完全可以滿足實時數(shù)據(jù)處理的需要。
該接口電路在本人開發(fā)的基于DSP的語音信號采集與處理系統(tǒng)中, 實現(xiàn)了數(shù)據(jù)高速傳輸?shù)娜蝿? 工作性能良好。
本文作者創(chuàng)新點:傳統(tǒng)的信號處理系統(tǒng)中數(shù)據(jù)傳輸接口在低速時常采用標準串行口或并行口, 高速時一般采用PCI總線接口。但標準串行口或并行口數(shù)據(jù)傳輸速率較低; PCI總線盡管數(shù)據(jù)傳輸速率可以達到1Gbps , 但是硬件設計和驅(qū)動開發(fā)難度較大,USB總線具有快速、雙向、低價并可熱插撥等特性,而且支持各種PC與外設之間的連接,本文將USB2.0接口芯片CY7C68013用于信號處理系統(tǒng)中,處理后的數(shù)據(jù)經(jīng)USB 向計算機傳輸,速度得到了大大提高, 并且系統(tǒng)可靠性也達到了理想效果。本文所述的方法具有一定的普遍性, 可用于多種微處理擴展USB 接口的方案中。
參考文獻:
[1] 徐慶元,張?zhí)煨?鐘勝. 基于USB 總線的高速視頻采集系統(tǒng)設計[J].微計算機信息,2006,22(10-1):247-249.
[2] Cypress Semiconductor Corporation. EZ2 USB Technical Reference Manual[R]. 2002.
[3] Cypress Semiconductor Corporation. EZ2 USB Series FX2 Getting Started[R]. 2002.
[4] 李爽,張鳴瑞. 一種帶USB接口的便攜式語音采集卡的設計[J].計算機應用研究,2001,18 (5):146-148.
[5] 劉少峰,韋克平. USB 軟件系統(tǒng)的開發(fā)[J].計算機應用研究,2002,19(3):102-104.