楊福寶,陳 欣
(武漢理工大學 信息工程學院,武漢 430070)
目前市面上的USB設備接口芯片種類繁多,可選擇的范圍也很廣泛。CH375是一款具有USB主控和設備功能的(Host/Device)雙角色芯片。CH375的設備方式下, CH375芯片功能特點如下:
1)產(chǎn)品制造商可以自定義廠商標識(Vendor ID)和設備標識(Device ID);
2)通用的本地8位數(shù)據(jù)總線,4線控制:讀選通、寫選通、片選輸入、中斷輸出;
3)它符合USB1.1版本規(guī)范,具備全速設備接口;
4)主端點上傳下傳緩沖區(qū)各64字節(jié),輔助端點上傳下傳緩沖區(qū)各8字節(jié);
5)支持5V電源電壓和3.3V電源電壓,CH375A芯片還支持低功耗模式。
CH375芯片提供了通用的被動并行接口,CH375以總線方式掛接在單片機數(shù)據(jù)總線上,與多個外圍器件共存。單片機可以與CH375進行通訊操作,當CS375(即CS#)為低電平時;D7~D0上的數(shù)據(jù)會被寫入CH375芯片中,當RD#為高電平并且CS#和WR#及A8都為低電平時;D7~D0上的數(shù)據(jù)會被作為命令碼寫入CH375芯片中,當RD#為高電平并且CS#和WR#都為低電平而A0為高電平時。
CH375芯片的UD+和UD-引腳直接連接到USB總線上。CH375芯片內(nèi)置了電源上電復位電路,并可以產(chǎn)生復位信號。為確保上電復位次序,本系統(tǒng)設計中,單片機的復位信號是通過CH375產(chǎn)生的。
CH375芯片正常工作時需要提供12MHz的外部時鐘信號,在XI和XO引腳之間連接一個標稱頻率為12MHz的晶體,分別為XI和XO引腳對地連接一個容量為30pF的高頻振蕩電容。CH375芯片支持5V電源電壓或者3.3V電源電壓。本系統(tǒng)使用5V工作電壓,并且V3引腳處外接容量為0.01uF的電源退耦電容。
單片機[2]是通過片選信號/CS、讀寫信號線/WR、/RD和地址線A0的聯(lián)合控制實現(xiàn)對CH375的訪問。因為外圍總線上擴展了多個器件,需要多個譯碼邏輯實現(xiàn)總線分配,因此采用了如圖1所示的譯碼電路連接。
此處選用的GAL是可編程陣列邏輯,主要用于通過地址譯碼給各個芯片產(chǎn)生片選信號。GAL器件在電路結(jié)構(gòu)上采用了可編程輸出邏輯宏單元,可由用戶定義每個輸出管腳的邏輯組合方式。因此,一片GAL可通過不同的編程從而實現(xiàn)多種標準邏輯芯片組合才能實現(xiàn)的功能,不僅簡化了電路設計過程,減小體積并降低成本,而且可靠性也得到了極大的改善。同時GAL器件采用電可擦除的CMOS工藝,可以用電壓信號擦除并可重復編程。
圖1 GAL16V8譯碼電路
A/D轉(zhuǎn)換部分采用的器件是TLC2543,電路設計如圖2所示。TLC2543是德州儀器公司生產(chǎn)的12位開關電容型逐次逼近模數(shù)轉(zhuǎn)換器,采用簡單的3線SPI串行接口可方便地與控制器進行連接,是12位數(shù)據(jù)采集系統(tǒng)的最佳選擇器件之一。
圖2 A/D轉(zhuǎn)換電路
在USB系統(tǒng)中,其軟件包括以下幾個部分:主機應用程序、設備驅(qū)動程序和設備固件程序。根據(jù)USB協(xié)議,在一個USB系統(tǒng)中,任何一次通訊都是由USB主機發(fā)起的,USB設備根據(jù)主機發(fā)來的命令給予響應,執(zhí)行相應的操作。
Windows提供了一些標準設備如:大容量存儲設備、人機接口設備等的驅(qū)動程序,但對于用戶自行開發(fā)的非標準類的應用設備,還需要自行編寫、加載驅(qū)動程序。驅(qū)動程序是保證應用程序正確訪問設備的軟件組件,使得應用程序無須知道物理連接、信號和與設備通訊所需協(xié)議等細節(jié),僅需通過外設名字訪問外設或目的端口。
驅(qū)動程序通過在應用層和硬件專用代碼之間的轉(zhuǎn)化來完成它的任務。編寫驅(qū)動程序,必須遵循微軟在WIN98及其更新版本中為用戶定義的WIN32驅(qū)動模式。這些驅(qū)動程序就是WDM(Win 32Driver Model——設備驅(qū)動程序模型),它的擴展名為.sys。USB驅(qū)動程序的編寫與硬件相關,屬于核心模式。另外, Windriver是一款專業(yè)的設備驅(qū)動程序開發(fā)工具,相比DDK開發(fā)要簡單些,利用它開發(fā)設備驅(qū)動程序,開發(fā)者不需要深入了解操作系統(tǒng)內(nèi)核。WinDriver for USB也已發(fā)布,WinDriver USB使程序員可以開發(fā)基于USB接口的高性能設備驅(qū)動程序。
Windows DDK(Device Driver Developer's Kit)是微軟公司提供的一個開發(fā)Windows驅(qū)動程序的工具。使用DDK開發(fā)驅(qū)動是一個比較傳統(tǒng)的方法,其過程如下:
1)根據(jù)要變異的驅(qū)動程序類型,選擇編譯環(huán)境。注意,這里的環(huán)境和運行的操作系統(tǒng)沒有關系,例如,在Windows XP環(huán)境下,可以編譯Windows2000環(huán)境下的驅(qū)動程序。
2)DDK提供編譯驅(qū)動程序的環(huán)境,在該環(huán)境下進入與編譯的驅(qū)動程序所在的目錄,輸入build即可開始編譯。
3)build將會在這個目錄中尋找一個叫sources的文件,這個文件告訴編譯程序,應該怎么做。
驅(qū)動程序初始化完成后,接著必須對設備進行初始化。PnP管理器調(diào)用驅(qū)動程序中AddDevice例程來初始化該驅(qū)動程序控制的每個設備。當一個驅(qū)動程序從PnP管理其中收到IRP_MN_START_DEVICE請求時,驅(qū)動程序使設備啟動并且準備好處理IO操作。
對設備進行停止或者卸載時,需要等待其余IRP都操作完畢。為了在驅(qū)動程序中知道這一點,可以采用一個類似于信號量的計數(shù)器,在一個IRP開始的時候使此計數(shù)器增加1,結(jié)束時使其減少1。
在本系統(tǒng)應用中,CH375的制造商提供了設備方式下的標準驅(qū)動CH375WDM.INF和動態(tài)鏈接庫:CH375DLL.DLL,通過加載驅(qū)動信息可以在應用程序中直接調(diào)用動態(tài)鏈接庫。CH375在計算機端提供了應用層接口,應用層接口是由CH375動態(tài)鏈接庫DLL提供的面向功能應用的API,所有API在調(diào)用后都有操作狀態(tài)返回,但不一定有應答數(shù)據(jù)。CH375動態(tài)鏈接庫提供的API包括:設備管理API、數(shù)據(jù)傳輸API、中斷處理API。(相關API參數(shù)的未列出。)
打開設備:CH375OpenDevice
關閉設備:CH375CloseDevice
獲得驅(qū)動程序版本號:CH375GetDrvVersion
獲取USB設備描述符:CH375GetDeviceDescr
獲取USB配置描述符:CH375GetConfigDescr
復位USB設備:CH375ResetDevice
設置USB數(shù)據(jù)讀寫的超時:CH375SetTimeout
設置獨占使用當前C H 3 7 5設備:CH375SetExclusive
讀取數(shù)據(jù)塊(數(shù)據(jù)上傳):CH375ReadData寫出數(shù)據(jù)塊(數(shù)據(jù)下傳):CH375WriteData放棄數(shù)據(jù)塊讀操作:CH375AbortRead放棄數(shù)據(jù)塊寫操作:CH375AbortWrite
寫出輔助數(shù)據(jù)(輔助數(shù)據(jù)下傳):CH375WriteAuxData24
讀取中斷數(shù)據(jù):CH375ReadInter
放棄中斷數(shù)據(jù)讀操作:CH375AbortInter
設定中斷服務程序:CH375SetIntRoutine
本設計采用VB6.0作為計算機端應用軟件的開發(fā)平臺,首先需要將CH375的動態(tài)鏈接庫、驅(qū)動程序復制到計算機中。在設備初次連入計算機USB口時,系統(tǒng)會自動提示設備連入,要求加載驅(qū)動。將路徑指向驅(qū)動所在目錄即可完成加載。在VB開發(fā)中,需要將動態(tài)鏈接庫的訪問入口添加至VB6.0的項目中。動態(tài)鏈接庫的使用,簡化了USB設備開發(fā)的步驟,降低了開發(fā)難度,為系統(tǒng)調(diào)試節(jié)省了時間。
通過動態(tài)鏈接庫的數(shù)據(jù)傳輸函數(shù),CH375在計算機應用層與本地端單片機之間提供了端對端的連接。客戶應用程序與設備固件間的通訊采用請求加應答方式。此通訊方式具有較好的交互性和可控性。
請求加應答方式使用一個下傳的主動請求和一個上傳的被動應答進行交互式的雙向數(shù)據(jù)通訊,下傳與上傳一一對應,相互關聯(lián)。所有的通訊都由客戶應用程序發(fā)起,然后以接收到單片機的應答結(jié)束。
單片機端程序設計包括I2C器件數(shù)據(jù)讀寫、LCD信息顯示、按鍵掃描相應、A/D數(shù)據(jù)采集及USB接口處理等部分。CH375與單片機之間設計成完全的中斷驅(qū)動:當單片機處理前臺任務時,USB的傳輸可在后臺進行,這樣不僅確保了最佳的傳輸速率和更好的軟件結(jié)構(gòu),也簡化了編程和調(diào)試。后臺ISR(中斷服務程序)和前臺主程序循環(huán)之間的數(shù)據(jù)交換可以通過事件標志和數(shù)據(jù)緩沖區(qū)來完成。
CH375芯片專門用于處理USB通訊,在從主機接收到數(shù)據(jù)后或者向主機發(fā)送完數(shù)據(jù)后,CH375以中斷方式通知單片機進行處理。
對于A/D數(shù)據(jù)采集的程序處理,根據(jù)模擬量的不同特點和采用需求,可以采用不同的方式。對采樣周期要求嚴格的數(shù)據(jù)采樣,可以將事件處理放到定時器中斷里進行。
與基于串口和基于板卡的數(shù)據(jù)采集系統(tǒng)相比,基于CH375的USB數(shù)據(jù)采集系統(tǒng)具有即插即用、數(shù)據(jù)傳輸速度快、易使用以及低成本的特點。該系統(tǒng)還可以與RS485總線結(jié)合起來,實現(xiàn)遠程多點數(shù)據(jù)的采集。
[1]周振宇,谷海穎.基于USB總線的實時數(shù)據(jù)采集系統(tǒng)的設計[J].電子技術應用,2002.
[2]周立功.增強型80C51單片機速成與實踐[M].北京:北京航空航天大學出版社,2003.