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