摘 要:介紹了在TMS320C32系列DSP上,利用EZ-USB FX2微控制器擴展USB接口的技術(shù),實現(xiàn)了DSP與計算機之間的高速數(shù)據(jù)傳輸。
關(guān)鍵詞:USB DSP FX2 USB驅(qū)動 固件
數(shù)字信號處理器DSP以其運算速度快的特點已被廣泛應(yīng)用。但目前絕大部分DSP處理器僅提供了串口通訊方式,該方式僅適合少量數(shù)據(jù)的傳送,不能滿足通訊、圖像處理等需要高速數(shù)據(jù)交換場合的應(yīng)用。由于DSP運算過程中產(chǎn)生的大量數(shù)據(jù)不能實時向計算機傳輸,從而成為拓展DSP應(yīng)用領(lǐng)域的一個瓶頸。而近幾年發(fā)展起來的通用串行總線USB技術(shù),能夠滿足設(shè)備間的高速數(shù)據(jù)傳輸。如果將USB技術(shù)應(yīng)用到DSP處理器上,就可以徹底地解決DSP設(shè)備與計算機間大數(shù)據(jù)量的交換問題,從而極大地擴展了DSP的應(yīng)用領(lǐng)域。本文實現(xiàn)了在TMS320C32系列DSP上,利用EZ-USB FX2微控制器擴展USB接口的技術(shù),實現(xiàn)了DSP與計算機之間的高速數(shù)據(jù)傳輸。
1 USB簡介
通用串行總線USB的概念自1995年被提出以來,至今已經(jīng)歷了規(guī)范1.0、1.1和2.0?,F(xiàn)在的USB2.0規(guī)范在原有的低速模式(low speed)1.5Mbps、全速模式(full speed)12Mbps的基礎(chǔ)上又支持高達480Mbps的高速模式(high speed),從而使USB總線真正成為能滿足高速應(yīng)用場合的標準連接總線。在USB2.0中,每毫秒可發(fā)送8~10微幀,這是USB1.1傳輸速率的40倍,同時對緩存的要求也大大降低了。USB2.0向下完全兼容,最高可以連接127個設(shè)備。另外,在端口擴充的同時,各種采用USB2.0的設(shè)備仍可以維持在480Mbps的最高傳輸速度[1]。
2 系統(tǒng)構(gòu)成
2.1 EZ-USB FX2性能特點
Cypress Semiconductor公司的EZ-USB FX2(以下簡稱FX2)是世界上第一款集成USB2.0的微處理器,它集成了USB2.0收發(fā)器、SIE(串行接口引擎)、增強的8051微控制器和可編程的外圍接口。FX2這種獨創(chuàng)性結(jié)構(gòu)可使數(shù)據(jù)傳輸率達到56MBps,即USB2.0允許的最大帶寬。在FX2中,智能SIE可以硬件來處理許多USB1.1和USB2.0協(xié)議,從而減少了開發(fā)時間和確保了USB的兼容性。GPIF(General Programmable Interface)和主從端點FIFO(8位或16位數(shù)據(jù)總線)為ATA、UTOPIA、EPP、PCMCIA和DSP等提供了簡單和無縫連接接口。FX2的原理框圖如圖1所示。
為了實現(xiàn)USB2.0的高速帶寬,把FX2的端點FIFO和從屬FIFO(實現(xiàn)和外部邏輯器件或處理器接口的FIFO)集成在一起以減少內(nèi)部數(shù)據(jù)傳輸時間。并且FX2的FIFO有獨特的“量子”特性[2],根據(jù)USB分組大小,外部可以一次提交多達4 096個字節(jié)的數(shù)據(jù),而不是每次一個字節(jié)。如果用經(jīng)典的FIFO,當產(chǎn)生壞的CRC(循環(huán)校驗碼)時,所有的數(shù)據(jù)必然泛濫流出;如果CRC校驗正確,則分組信息能從USB域交換到I/O" title="I/O">I/O域。端點緩沖器可通過固件" title="固件">固件設(shè)置為雙、三或四緩沖器,與所需的數(shù)據(jù)量或靈活性有關(guān)。FX2的FIFO量子特性及可編程設(shè)置多緩沖為滿足USB2.0所需帶寬提供了保障。
2.2 TMS320C32性能特點
數(shù)字信號處理器采用TI公司的TMS320C32,這是TI公司的第一代浮點DSP芯片。TMS320C32的性能特點:具有16M字的空間,每字32位。這16M字空間包括程序存儲區(qū)、數(shù)據(jù)存儲區(qū)和I/O空間;為32位處理器,具有32位內(nèi)部存儲器、32/40位內(nèi)部寄存器、32位內(nèi)部總線,還支持8位、16位數(shù)據(jù)操作,并且包含了兩個512×32位的快速RAM塊;C32通過24位的地址總線、32位的數(shù)據(jù)總線和三組選通信號IOSTRB、STRB0和STRB1訪問外部存儲器;TMS320C32是在TMS320C30和TMS320C31基礎(chǔ)上進行了簡化和改進。在結(jié)構(gòu)上的改進包括可變寬度的存儲器接口、更快速的指令周期時間、可設(shè)置優(yōu)先級的雙通道DMA處理器、靈活的引導(dǎo)程序裝入方式、可重定位的中斷向量表以及可選的邊緣/電平觸發(fā)中斷方式等。特別是其增強的外部存儲器接口,使得對外部數(shù)據(jù)的操作更加方便,存儲器接口電路的設(shè)計也更加靈活,因此在許多實時數(shù)據(jù)采集和信號處理的系統(tǒng)中得到了廣泛的應(yīng)用[3~4]。
2.3 系統(tǒng)設(shè)計
FX2有三種工作模式:端口、GPIF和從FIFO(Slave FIFO)模式。在本系統(tǒng)中,F(xiàn)X2工作于從FIFO模式下,TMS320C32作為主控(Master),直接控制FIFO數(shù)據(jù)的讀寫。4KB的FIFO空間全部分配給了EP2端點,使其形成四重1 024字節(jié)的緩沖。當C32向其中一個FIFO寫“滿”時,F(xiàn)X2自動將該FIFO轉(zhuǎn)換到外部接口端,排隊等候PC機讀取;并將EP2中下一個為“空”的FIFO轉(zhuǎn)移上來,供C32繼續(xù)寫數(shù)據(jù)。
USB的數(shù)據(jù)傳輸有四種模式:塊傳輸(Bulk Transfers)、中斷傳輸(Interrupt Transfers)、同步傳輸(Isochronous Transfers)、控制傳輸(Control Transfers)。當需要快速傳輸大批量的準確數(shù)據(jù)時,一般采用塊傳輸模式;而當傳輸實時性較強的數(shù)據(jù)時,則應(yīng)采用中斷傳輸模式。在該系統(tǒng)中采用了塊傳輸模式。
TMS320C32與FX2的連接如圖2所示。其中,I/O和WR#分別是C32的一個通用I/O信號和讀寫使能信號,PKTEND用于強制FX2發(fā)送FIFO內(nèi)部數(shù)據(jù)。例如,將EP2設(shè)置為自動傳送模式,當C32向EP2中寫滿1 024個字節(jié)后,EP2自動將數(shù)據(jù)轉(zhuǎn)移至USB端口,供上位機讀??;當C32發(fā)送的數(shù)據(jù)不是1 024的整數(shù)倍時,最后一個數(shù)據(jù)包因為比1 024小所以不會被EP2發(fā)送。這時有兩種方法:一是用無效數(shù)據(jù)將EP2補充滿;二是使用PKTEND信號在PKTEND的上跳沿處,F(xiàn)X2將EP2內(nèi)的剩余數(shù)據(jù)轉(zhuǎn)移至USB[5]。
3 軟件設(shè)計
3.1 固件設(shè)計
在該系統(tǒng)中,F(xiàn)X2的固件完成如下工作:
?。?)配置如下描述符。
;; Endpoint Descriptor
db DSCR_ENDPNT_LEN ;; 描述符長度
db DSCR_ENDPNT ;; 描述符類型
db 82H ;; 端點號是2,輸出OUT
db ET_BULK ;; 端點類型
db 00H ;; 包的大小,低字節(jié)(LSB)
db 04H ;; 包的大小,高字節(jié)(MSB)
db 00H ;; 檢測間隔
?。?)初始化一些寄存器的值,使之滿足系統(tǒng)設(shè)計。下面是采用keil C51編寫的C語言固件程序的主要代碼:
void TD_Init(void)
{
CPUCS = 0x10; //CLKSPD[1:0]=10, 48MHz
IFCONFIG = 0xCB; //異步從FIFO模式
REVCTL = 0x03;
EP2CFG=0xE8; //方向OUT,塊傳輸,四緩沖,1024字節(jié)
PORTACFG = 0x40; //將PA7管腳設(shè)置為SLCS,從FIFO的片選信號
FIFORESET = 0x80;
FIFORESET = 0x02;
FIFORESET = 0x00;
EP2FIFOCFG = 0x0D; //配置EP2為自動方式,16位總線
EP2AUTOINLENH=0x04;//數(shù)據(jù)包大小為1024字節(jié)
EP2AUTOINLENL=0x00;
}
可以看出,一旦FX2芯片上電后、CPU完成以上寄存器的初始化時,就不再干預(yù)FIFO的工作了,C32直接通過FIFO就建立起了與PC機之間的USB通道。
3.2 驅(qū)動程序
USB設(shè)備驅(qū)動程序" title="設(shè)備驅(qū)動程序">設(shè)備驅(qū)動程序采用一種新的驅(qū)動模型——WDM(Windows Driver Model)。WDM通過提供一種靈活的方式來簡化驅(qū)動程序的開發(fā),在實現(xiàn)對新硬件支持的基礎(chǔ)上減少并降低所必須開發(fā)的驅(qū)動程序的數(shù)量和復(fù)雜性。整個驅(qū)動程序體系的流程可以這樣來描述:應(yīng)用程序" title="應(yīng)用程序">應(yīng)用程序通過WIN 32提供的API向WIN 32子系統(tǒng)發(fā)出命令。WIN 32子系統(tǒng)通過標準的系統(tǒng)調(diào)用與內(nèi)核層的I/O管理器" title="管理器">管理器通訊,將用戶程序的API 調(diào)用轉(zhuǎn)換成IRP(I/O Request Package) 包,I/O管理器將IRP 包傳遞給指定的設(shè)備驅(qū)動程序;USB設(shè)備驅(qū)動程序接收到這個IRP包后,根據(jù)IRP中包含的具體操作代碼構(gòu)造相應(yīng)USB請求塊(URB),并把此URB放到一個新的IRP中,然后把它傳遞給USB總線驅(qū)動程序;USB總線驅(qū)動程序根據(jù)IRP中所含的URB執(zhí)行相應(yīng)的操作(與USB主機控制器進行數(shù)據(jù)交換),并把操作的結(jié)果返回給USB設(shè)備驅(qū)動程序;USB設(shè)備驅(qū)動程序接收到此返回的IRP后,將操作結(jié)果通過IRP返還給I/O管理器,最后I/O管理器將此IRP操作結(jié)果傳回給應(yīng)用程序。至此應(yīng)用程序?qū)υO(shè)備的一次I/O操作完成[6]。WDM型的USB驅(qū)動程序體系結(jié)構(gòu)如圖3所示。
該系統(tǒng)采用Cypress公司提供的GPD(General Purpose Driver)模板。該模板提供了一個上層的程序代碼來實現(xiàn)底層的驅(qū)動程序的編寫,能夠完成USB設(shè)備的標準請求及Cypress公司的電路所特定的請求和數(shù)據(jù)的傳輸。GPD所提供的接口函數(shù)具有通用性,包括打開、關(guān)閉設(shè)備及USB的I/O操作等[7]。本應(yīng)用在沒有改變所提供的EZUSB.SYS的驅(qū)動程序的情況下,實現(xiàn)主機和外設(shè)的數(shù)據(jù)通信。
3.3 應(yīng)用程序設(shè)計
應(yīng)用程序是用戶操作計算機的界面,界于用戶與底層驅(qū)動之間。應(yīng)用程序通過調(diào)用WIN32的API函數(shù)實現(xiàn)和驅(qū)動程序之間的通訊,完成對USB外設(shè)的讀取和發(fā)送。首先,打開設(shè)備(程序打開設(shè)備“DeviceName”的方式為通用讀寫方式,文件共享讀寫):
HANDLE hDevice=CreateFile (
DeviceName, //指向文件名的指針
GENERIC_WRITEIGENERIC_READ, //訪問模式(寫/讀)
FILE_SHARE_WRITE—FILE_SHARE_READ, //共享模式
NULL, //指向安全屬性的指針
OPEN_EXISTING, //如何創(chuàng)建
0, //文件屬性
NULL //用于復(fù)制文件句柄
);
然后進行數(shù)據(jù)傳輸,其代碼為:
BOOL bResult = DeviceloControl (
hDevice,
direction,
&Control,
sizeof (xxxx_TRANSFER_CONTROL),
buffer,
length,
(unsigned long*)&nBytes,
NULL
),
其中,hDevice為設(shè)備句柄;direction為數(shù)據(jù)傳輸?shù)姆较?;Control為四種USB數(shù)據(jù)傳輸?shù)姆绞竭x擇;size(xxxx_TRANSFER_CONTROL)為數(shù)據(jù)格式所需存儲空間的大??;buffer為所傳輸數(shù)據(jù)的緩沖區(qū)地址指針;nBytes為傳輸完成后實際傳輸?shù)臄?shù)據(jù)個數(shù)。數(shù)據(jù)傳輸格式為USB設(shè)備的統(tǒng)一規(guī)范,可參照Windows DDK中的相應(yīng)文件。
本系統(tǒng)用于CCD成像檢測系統(tǒng)中,設(shè)備成像后的圖像經(jīng)USB向計算機傳輸。如果使用傳統(tǒng)的串口傳輸,即使在115 200bps的速率下,傳送完一幅圖像也需要7分鐘。而采用本文所述的方法,DSP向計算機傳送同樣大小的圖像僅用18秒,速度提高了23倍,并且可靠性和誤碼率也達到了理想效果。本文所述的方法具有一定的普遍性,可用于多種微處理擴展USB接口的方案中,有助于提高系統(tǒng)數(shù)據(jù)傳輸速率。
參考文獻
1 許永和. EZ-USB FX系列單片機USB外圍設(shè)備設(shè)計與應(yīng)用.北京:北京航空航天大學(xué)出版社, 2002
2 宋吉超, 易克初,陸維佳. 基于EZ-USB FX2的USB 2.0系統(tǒng)軟件開發(fā). 現(xiàn)代電子技術(shù),2005:(2)58~65
3 遲 男, 陸 俊,劉 杰. TMS320C32浮點DSP存儲器接口設(shè) 計.電子技術(shù)應(yīng)用,2000;(11):70~72
4 張雄偉,陳 亮,徐光輝.DSP芯片的原理與開發(fā)應(yīng)用(第3版). 北京:電子工業(yè)出版社, 2004
5 鄧鵬飛, 李小波,張劍云. USB2.0在DSP與計算機通信中的應(yīng)用. 計算機與數(shù)字工程, 2005;(6):123~126
6 蓋素麗,常 青. USB接口的驅(qū)動程序開發(fā). 河北省科學(xué)院學(xué)報,2005;(6):17~20
7 趙 闖,張劍云.基于CY7C646xx的通用串行總線接口.電子元器件應(yīng)用,2004;(5):27~29