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