利用USB2.0技術的高速雙路數(shù)據(jù)采集系統(tǒng)
GPIF狀態(tài)機可以定義四個波形描述符,一般情況下是:FIFO讀,F(xiàn)IFO寫,單字/字節(jié)讀,單字/字節(jié)寫。Cypress提供了圖形化的波形描述工具GPIF Designer,用戶只需要給出GPIF波形,GPIF Designer會自動生成C語言的波形代碼Gpif.c,可以直接鏈接到用戶的固件程序中。本文中用到了FIFORd描述符,波形如圖3所示。
圖3 GPIF Designer設計的 FIFORd波形
4.系統(tǒng)軟件編寫
系統(tǒng)軟件主要包括三個部分:下位機CY7C68013的固件,USB驅(qū)動程序和上位機主機應用程序。
4.1 固件程序編寫
對于下位機CY7C68013的固件編寫,Cypress公司給出了在Keil C51下的固件程序框架,固件框架完成EZ-USB FX2的初始化、USB標準設備請求處理、USB掛起模式下的電源管理服務和USB中斷處理。Cypress還提供了函數(shù)鉤子來加速用戶代碼的添加。用戶只需要簡單地提供一個USB描述符表和執(zhí)行外圍功能的代碼即可。
4.2 驅(qū)動程序編寫
Windows系統(tǒng)下的USB驅(qū)動包括三層,從高到低依次是:USB客戶端設備驅(qū)動(USB Client Device Driver)、USB總線驅(qū)動(USB Hub(Bus) Driver)、主機控制器驅(qū)動(Host Controller Driver)。后兩者由Windows系統(tǒng)提供,用戶只需要開發(fā)USB客戶端設備驅(qū)動程序,Cypress公司提供了一個通用的驅(qū)動程序 (General Purpose Driver),即ezusb.sys,一般情況下,該驅(qū)動程序可以滿足FX2開發(fā)者的需要。本文使用了Cypress公司的通用驅(qū)動 ezusb.sys。為了使用ezusb.sys,用戶必須編寫對應的inf文件,inf文件將特定的USB設備綁定給相應的驅(qū)動程序,該inf文件參照 ezusbw2k.inf編寫。
4.3 主機應用程序編寫
通用驅(qū)動程序GPD即ezusb.sys提供了基本USB設備請求和數(shù)據(jù)傳輸?shù)挠脩裟J浇涌冢脩裟J綉贸绦蛲ㄟ^Win32函數(shù) DeviceIoControl()給設備驅(qū)動器發(fā)送請求。Ezusb.sys提供了基本設備請求、批量讀寫、同步讀寫等一系列IOCTL函數(shù)。這里以 IOCTL_EZUSB_BULK_READ(EZUSB批量傳輸)為例加以介紹。
批量傳輸模式下讀FX2的端點FIFO的關鍵代碼如下:
DWORD ioctl_val=IOCTL_EZUSB_BULK_READ; //設置從設備中讀數(shù)據(jù)
Bresult=DeviceIoControl ( hDevice , ioctl_val , //從設備讀數(shù)據(jù)
bulkControl , //端點號
sizeof ( BULK_TRANSFER_CONTROL), //傳入?yún)?shù)的大小
buffer , //讀數(shù)據(jù)的緩沖區(qū)
length , //讀數(shù)據(jù)的長度
(unsigned long *)nBytes , //驅(qū)動返回的數(shù)據(jù)的實際長度
NULL);
限于篇幅,其他程序代碼從略。
6.結(jié)束語
本文的創(chuàng)新點是充分發(fā)揮了CY7C68013的優(yōu)勢,利用FX2的內(nèi)部可編程狀態(tài)機GPIF實現(xiàn)了與外圍FIFO“無膠”連接,避免了使用外圍ASIC或者CPLD、FPGA等的麻煩,系統(tǒng)升級方便。整個電路結(jié)構緊湊,占用面積小,便于攜帶。
本文采用Cypress公司的USB2.0芯片CY7C68013設計了一種通用的高速雙路同步數(shù)據(jù)采集系統(tǒng),通過將其與高精度激光縱模分析儀連接進行試驗,證明該系統(tǒng)實現(xiàn)了數(shù)據(jù)的高速實時傳輸,達到了預先設計的目標。隨著USB口的進一步普及和計算機的發(fā)展,本文設計的這種USB數(shù)據(jù)采集系統(tǒng)必將得到更加廣泛的應用。
評論