基于EZ-USB的數據傳輸接口設計
0 引言
USB控制器采用通用連接技術以實現與外設的簡單快速連接,具有連接靈活、使用方便、速度快、擴展能力強等優點,使得其一些高速、高精度的信號采集領域中, 具有極大的應用價值[1]。 EZ-USB序列芯片AN2131Q是Cypress公司的內嵌微控制器的80pin的USB接口控制芯片,它采用了一種基于內部RAM的解決方案,允許客戶隨時不斷地設置和升級,不受端口數、緩沖大小、傳輸速度及傳輸方式的限制[2]。片內嵌有一個增強型8051微控制器,與標準的8051相比,其速度快3倍。本文將USB控制器EZ-USB2131Q用于基于TMS320C5409的水聲信號采集及混沌特性研究系統中,實現了數據的高速傳輸。
1 USB控制器與DSP的連接
1.1 AN2131Q和TMS320C5409的硬件連接
在TMS320C5409和USB控制器AN2131Q硬件連接中,采用FIFO(first in first out SRAM)連接方法,除了能確保DSP和主機間的數據傳輸速度只受USB協議限制外,還能使USB控制器和DSP之間的最大數據交換速度超過USB總線的速度。
由于USB控制器AN2131Q內嵌有加強型的8051處理器,可使用兩片FIFO(FIFO選用IDT72V02,它具有1K×9位的內存)可以實現USB控制器和DSP之間的雙向通信。從USB控制器AN2131Q或者DSP傳輸的數據首先保存在FIFO中,然后再由DSP或者AN2131Q讀走,從而使得數據的傳輸不會出現堵塞情況,其硬件連接框圖如圖1所示。
圖1 AN2131Q和TMS320C5409的連接圖
1.2 AN2131Q和IDT72V02的連接
IDT72V02狀態信號有空(EF)、半滿(HF)和滿(FF),它們都在FIFO為低電平時有效。其與AN2131Q的連接如圖2所示。
圖2 AN2131Q和IDT72V02的連接圖
1.3 AN2131Q和TMS320C5409的軟件連接
USB控制器AN2131Q和DSP之間的軟件部分包括4個部分,分別是USB控制器AN213lQ對FIF01的寫、USB控制器AN2131Q對FIF02的讀、TMS320C5409對FIF01的讀、TMS320C5409對FIFO2的寫。為了描述的方便,將FIF01的3個狀態信號分別稱為 、 和 ,對應FIF02的為 、 、 。
(1)USB控制器AN2131Q寫FIFO1
當USB總線上有數據要傳送至TMS320C5409時, AN2131Q查詢 ,若 無效, AN2131Q一次向FIFO1寫入一個數據包(數據包要小于或等于FIFO1容量的一半),而且AN2131Q一次向FIFO1寫入每一個字節時不需再查詢 。
(2) TMS320C5409讀FIFO1
TMS320C5409每次從FIFO1中讀入一個數據包,每讀一個字節前,DSP需要查詢 ,只有當 無效(FIFO1不為空)時,DSP才能進行讀操作。
(3) TMS320C5409寫FIFO2
當TMS320C5409有數據要傳送至主機時,TMS320C5409把數據打包,每次向FIFO2中寫入一包數據,方法與USB控制器AN2131Q寫FIFO1相同,惟一不同的是TMS320C5409查詢的信號是 。寫完一包數據后,TMS320C5409通過操作控制字向USB控制AN2131Q發一個中斷信號,TMS320C5409在寫下一包數據時必須等到AN2131Q應答。AN2131Q應答的方法是利用TMS320C5409的外部中斷INT1中斷DSP。
(4)USB控制器AN2131Q讀FIFO2
USB控制器AN2131Q收到TMS320C5409發出的中斷信號,應答DSP后,從FIFO2中讀入一包數據,不用再查詢 。
2 USB接口軟件設計
USB接口軟件主要分為三部分:固件程序、驅動程序、主機應用程序。主機應用程序通過驅動程序與系統USBDI( USB Device Interface)進行通信,由系統產生USB數據的傳送動作,固件程序則響應來自系統的USB標準請求,完成各種數據的交換的時間處理。
2.1 EZ-USB固件程序開發
固件代碼存儲在AN2131Q內部的8KBR AM中,它是用來初始化USB總線設備的。固件代碼包括了設備的信息,它以描述符形式指定了制造商號、產品號和其他USB總線協議中所需要的信息,其主要功能是實現設備枚舉過程[3]。
為了簡化和加速用戶對EZ-USB芯片的開發過程,Cypress公司提供了Keil C51 環境下編寫固件程序的框架。該框架集成了開發USB總線設備所需的基本函數,用戶可以在此基礎上加入自己的代碼實現特定的要求。固件程序框架如圖3所示。
圖3 EZ一USB固件程序框架
EZ一USB固件程序框架首先初始化所有的內部狀態變量,然后調用用戶初始化函數TD_Init(),然后初始化USB總線設備接口為非配置狀態,并同時打開中斷。當完成上面的任務后,EZ一USB 固件程序就開始重新枚舉設備直到端點0收到SETUP包為止。一旦EZ-USB收到SETUP包,固件程序就開始進行任務分配[4]。任務分配就是依次重復地執行下面的過程:
(1) 調用用戶函數TD_Poll()。
(2) 檢測是否有標準的設備請求,如果有,則執行指令并做出相應的操作。
(3) 檢測USB核是否有USB掛起事件。如果有USB掛起事件,則調用用戶程序TD_Suspend()。當TD_Suspend()返回為真時,USB核檢測是否有重新開始事件。當檢測到有重新開始的事件,USB調用用戶程序TD_Resume(),并繼續執行步驟3.
固件代碼在Keil Vision2環境中編譯后,最終生成ezusb.hex文件。用USB線把DSP開發板接到PC機上,啟動“EZ-USB Control Panel”,就可以把ezusb.hex文件下載到ANZ13lQ內部的8K RAM 中。
2.2 EZ-USB驅動程序開發
驅動程序(USBD)是USB總線系統中負責管理USB的工作. USB總線客戶軟件包含了用來控制不同USB總線外設的功能程序,它通過一個Windows定義的軟件接口與根集線器驅動程序進行通信;而USB總線根集線器驅動程序則通過包含在USBD中的USBDI(USB驅動程序接口。)實現USBD的通信;然后,USBD 會選擇兩種主控制器之一同下方的主控制器進行通信;最后,主控制器驅動程序會通過PCI枚舉器軟件直接實現對USB物理總線的訪問。
USB總線設備驅動程序必須遵循Win32驅動程序模型(WDM),其擴展名為.Sys。驅動程序主要實現的功能包括:設備初始化;即插即用設備的創建和刪除;處理Win32打開和關閉文件句柄請求;類功能定義IO CTL(I/O Control)、功能實現;IRP(I/O Request Packet)的調用處理;訪問硬件。
為幫助設備和軟件的開發者測試USB總線設備請求和數據傳輸的能力,Cypress公司提供了EZ_ USB通用驅動程序GPD(General Purpose Driver)。GPD是用來和基于EZ_ USB外設接口的通用設備驅動程序,提供公共USB總線設備請求和數據傳輸的用戶態接口。使用GPD作為起始點,可以創建用戶特有的驅動程序。
(1) 建立EZ_USB GPD
建立GDP需要微軟的WDM DDK和微軟的Visual C++6.0。EZ-USB的GPD ezusb.sys是一個不用修改就可用的驅動程序,在自行開發外部設備的時,可以采用這個驅動程序作為USB驅動。
(2) 用戶態和GPD的接口
對于用戶態的應用,可以使用VC++編譯工具CreateFile()和DeviceIoControl()。所有的用戶態通過I/O控制調用來訪問EZ_USB GPD的。一個用戶態程序首先通過調用一個Win32函數CreateFile( )來獲得設備驅動程序的句柄。然后用Win32函數DeviceIoControl()通過CreateFile( )函數返回的句柄,來提交I/O控制代碼和相關的輸入輸出緩沖區到驅動程序。
2.3 PC機用戶程序開發
后臺PC機用戶程序采用Visual C++6.0 編寫,主要功能是利用開發的USB驅動程序完成數據的發送和接收,并將數據保存為自己定義的格式。下面將詳細介紹利用USB驅動程序中定義的控制通道和塊傳輸通道進行數據接收和保存的過程,并給出部分關鍵代碼。
(1)打開USB設備
BOOL usbMark; ∥當前選定的USB 設備是否打開標志。
usbMark=OpenUSB();∥OpenUSB函數的功能是調用設備對應的驅動程序,并獲得設備的描述,其返回值為 BOOL型,可以依此判斷設備是否正確工作。
(2)定義命令請求和數據結構。
char buffer[64];∥定義數據緩沖區;
ULONG venderlong=0;
REQUEST_DATA usbRequest;∥定義USB 數據傳輸的請求結構。
所有的 USB 設備是通過缺省控制通道對主機的請求發出響應,這些請求是由驅動程序控制傳送而完成的,請求以及請求的參數通過包的形式發向設備,這里定義的usbRequest就是請求的數據包,
(3)填寫數據傳輸的請求并發送數據傳輸請求。
USBSendReq(&usbRequest,&buffer[0],vender-long);∥函數將請求交給USB 驅動程序,由驅動程序完成向USB設備的發送,USB設備接到請求后根據固件中的程序將數據發送回后臺PC機。
(4)進行數據的接收,本文采用的是塊傳輸模式。
BULK_DATA usbBulkdata;∥定義塊傳輸結構;
bulkControl.pipeNum=1;∥選擇傳輸管道;
buffer=&receivedat[0];∥定義接收緩存區;
ULONG length=64;∥預接收的數據長度;
BulkdataSend(&usbBulkdata,buffer,length);
∥BulkdataSend為數據接收函數, 函數調用后傳回的數據保存在buffer中。
經過上述步驟即可把數據從DSP保存到后臺PC機內存中。
3 結語
本文使用USB控制器AN2131Q芯片實現了對高速信號的數據傳輸, 安裝簡單, 支持即插即用; 無需外接電源;并將其應用到基于TMS320C5409的水聲信號采集及混沌特性研究系統通信中,充分驗證了此接口電路的可行性和具體設計的正確性。
本文作者創新點: 通用串行總線USB是近年來一種新興的計算機外圍設備串行通信接口,它具有傳輸可靠、易于擴展、低價并可熱插撥等特性。本文將EZ-USB 序列芯片AN2131Q用于水聲信號采集及混沌特性研究系統中,實現DSP與PC機間的通信,并在AN2131Q與DSP間加入兩片IDT72V02,使得數據的傳輸不會出現堵塞情況,提高了傳輸的速度。
評論