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