蔣來呈
[摘要]在對基于USB 2.0的數(shù)據(jù)采集系統(tǒng)的總體結(jié)構(gòu)進行綜述的基礎(chǔ)上,對系統(tǒng)的固件程序、基于WDM~USB驅(qū)動程序及應(yīng)用程序等部分的設(shè)計進行較詳細的討論。
[關(guān)鍵詞]USB數(shù)據(jù)采集固件程序Driverstudio驅(qū)動程序
中圖分類號:TP3文獻標識碼:A文章編號:1671-7597(2009)0210032-01
通用串行總線USB(Universal Serial Bus)是應(yīng)用在微機領(lǐng)域的新型接口技術(shù),它具有傳輸速度快、使用方便、連接靈活等優(yōu)點,USB支持即插即用,并且可以連接多個USB設(shè)備,在數(shù)據(jù)采集系統(tǒng)中得到日益廣泛的應(yīng)用。
一、硬件設(shè)計
基于USB2.0總線的數(shù)據(jù)采集系統(tǒng)由主機應(yīng)用程序向USB控制器發(fā)送采樣時控包,進而USB控制器給FPGA觸發(fā)采集信息:FPGA將采集到的數(shù)據(jù)信息通過USB控制器發(fā)給主機,主機做進一步處理。
(一)支持USB 2.0高速傳輸?shù)腛Y7C68013
Cypress半導(dǎo)體推出了世界上首個USB 2.0外設(shè)控制器EZ-USB FX2CY7C68013。它包括一個8051處理器,一個串行接口引擎(SIE),一個USB收發(fā)器,片上RAM,F(xiàn)IFO存儲器及一個通用可編程接口。EZ-USB FX2擁有一個獨特的架構(gòu),其中包括一個智能串行接口引擎(SIE)。FX2還包括一個通用可編程接口(GPIF),允許它“無膠粘接”,即可與任何ASIC或DSP進行接合,并且它還支持所有通用總線標準。CY7C68013的GPIF引擎具有自動傳輸數(shù)據(jù)結(jié)構(gòu)的特性,這種特性使得外圍設(shè)備和主機通過CY7C68013可以無縫的、高速的傳輸數(shù)據(jù)。為了實現(xiàn)高速的數(shù)據(jù)傳輸,CY7C68013 CPU不會直接參與數(shù)據(jù)的傳輸,而是直接利用GPIF的自動傳輸數(shù)據(jù)模式。
(二)端點緩沖區(qū)FIFO
FIFO是英文First In First Out的縮寫,是一種先進先出的數(shù)據(jù)緩存器。設(shè)備端點實際上是一個USB數(shù)據(jù)字節(jié)不斷取空和填滿的FIFO。USB控制器端點分為EPO、EPI、EP2、EP4、EP6、EP8。其中EPO、EPl是小端點,是64字節(jié)端點,只能被cPU訪問。EPO是默認的控制端點0,主機通過端點0發(fā)送一串標準設(shè)備請求,包括獲取狀態(tài)、獲取及設(shè)置描述符、設(shè)置及獲取配置等請求。EP2、EP4、EP6、EP8屬于大端點,可以設(shè)置2、3、4倍緩沖深度,配置的端點可滿足USB 2.0的高速傳輸請求。特性,描述主機與設(shè)備之間的通訊,介紹它的幾種傳輸并在此基礎(chǔ)上介紹固件的定義,闡述基本框架以及其固件程序的基本設(shè)計。主機通過發(fā)送四位地址和一個方向位來選擇端點,USB控制器從OUT端點緩沖區(qū)讀主機發(fā)出的數(shù)據(jù),并且向IN端點緩沖區(qū)寫要傳輸給主機的數(shù)據(jù)。
(三)接口信號
在利用GPIF進行高速數(shù)據(jù)傳輸系統(tǒng)設(shè)計時,GPIF waveforms的編輯是非常重要的,它控制著整個數(shù)據(jù)傳輸過程的讀寫時序。FX2專門為GPIF提供了外圍接口信號,如8位或16位的數(shù)據(jù)線、控制信號、Ready信號以及地址線。IFCLK(雙向時鐘信號):IFCLK可以配置成輸入或輸出。當配置為輸出時,IFCLK被FX2驅(qū)動為30MHz或48MHz;當配置為輸入時,時鐘范圍為5-48MHz。GPIFADR[8:0](輸出):GPIF使用GPI-FADR信號為外部設(shè)備提供地址線,在總線上地址值是自增的。FD[15:0](雙向):這是USB主機通過FX2和外部設(shè)備進行數(shù)據(jù)傳輸?shù)臄?shù)據(jù)線,它可配置成8位或16位。當為16位時,F(xiàn)D[7:0]代表端點FIFO中的第一個字節(jié),F(xiàn)D[15:8]代表第二個字節(jié)。CTL[5:0](輸出):FX2為外部設(shè)備提供了幾個控制信號,如讀寫選通、使能等。DY[5:0](輸入):FX2提供了幾個狀態(tài)檢測信號,它可以檢測外部設(shè)備的狀態(tài),如FIFO的空、滿、半滿等。GSTATE[2:0](輸出):這是調(diào)試信號,表示GPIF波形執(zhí)行的狀態(tài),通常連接到邏輯分析儀上。
二、軟件設(shè)計
(一)固件程序
固件程序負責初始化各硬件單元,重新配置設(shè)備。設(shè)備加電后由驅(qū)動程序把固件程序從主機下載到USB控制器片內(nèi)RAM后執(zhí)行,即“重新枚舉”。Cypress公司為CY7C68013提供了一個開發(fā)框架,固件框架流程圖在固件程序中主要就是實現(xiàn)以下幾個函數(shù):TD_Init函數(shù):負責對USB端點進行初始化設(shè)置。在該函數(shù)中,用戶可設(shè)置整體狀態(tài)變量的初始值,并可規(guī)定各種端點資源的使用(包括中斷)以及配置外圍接口的輸入/輸出等。TD_Poll函數(shù):負責系統(tǒng)中循環(huán)任務(wù)的處理。它主要是對各個端點的狀態(tài)進行查詢,處理各種OUT或IN端點的交互,完成數(shù)據(jù)的傳輸。TD_Resume函數(shù):該函數(shù)可在設(shè)備被外部喚醒事件喚醒且框架程序恢復(fù)處理后被調(diào)用。此時,設(shè)備將恢復(fù)到正常的操作方式。
(二)應(yīng)用程序
應(yīng)用程序的主要功能為:啟動或停止USB設(shè)備、檢測USB設(shè)備、發(fā)送采集命令、采集數(shù)據(jù)、存儲數(shù)據(jù)、進行后期分析處理等等。
(三)驅(qū)動程序
USB設(shè)備驅(qū)動程序是開發(fā)USB外設(shè)的一個關(guān)鍵,USB設(shè)備驅(qū)動程序的主要作用是使操作系統(tǒng)能夠識別USB設(shè)備,并建立起主機端和設(shè)備端之間的通訊。USB驅(qū)動程序?qū)儆谙冗M的WDM(Win32 Driver Model)驅(qū)動程序模式,支持即插即用功能。WDM型驅(qū)動程序是內(nèi)核程序,與標準的Win32用戶程序不同,它采用了分層處理的方法。通過它,用戶不需要直接與硬件打交道,只需通過下層驅(qū)動程序提供的接口號訪問硬件。因此,USB設(shè)備驅(qū)動程序不必具體對硬件編程,所有的USB命令、讀寫操作通過總線驅(qū)動程序轉(zhuǎn)給USB設(shè)備。但是USB設(shè)備驅(qū)動程序必須定義與外部設(shè)備的通訊接口和通訊的數(shù)據(jù)格式,也必須定義與應(yīng)用程序的接口。在Windows操作系統(tǒng)下,開發(fā)WDM驅(qū)動程序可以使用微軟公司的DDK(驅(qū)動程序開發(fā)包)。DDK提供了創(chuàng)建WDM驅(qū)動程序的開發(fā)環(huán)境,并提供了用于開發(fā)Windows 2000和Windows沖驅(qū)動程序的頭文件、庫函數(shù)、源代碼、各種工具和文檔資料。Cypress FX2開發(fā)包提供了一個通用的驅(qū)動程序,可被用于基于Ez-USB系列芯片的USB設(shè)備。該程序可不加修改經(jīng)DDK編譯后直接使用,在應(yīng)用中可以看到其運行穩(wěn)定。當然,用戶也可以這個驅(qū)動程序為起點,創(chuàng)建自己的驅(qū)動程序。
三、結(jié)束語
本文系統(tǒng)地介紹了基于USB 2.0接口的數(shù)據(jù)采集系統(tǒng)設(shè)計?;赨SB2.0的數(shù)據(jù)采集系統(tǒng),彌補了傳統(tǒng)采集板卡插拔的諸多不足。隨著時代的進步,技術(shù)的發(fā)展,USB技術(shù)必將在更廣闊的領(lǐng)域得到更深層次的運用。