朱 靜,錢 敏,楊翠軍
(蘇州大學 電子信息學院微電子系,江蘇 蘇州 215006)
通用串行總線是一種高效、快速、雙向和支持熱插拔的新型接口,可實現(xiàn) PC機與外設(shè)的通信。同時,它使用了一種易于擴展的結(jié)構(gòu),理論上可接127個設(shè)備[1]。當前,越來越多的電子產(chǎn)品中都會涉及到USB接口。因此,對基于USB接口的通信系統(tǒng)的研究是非常必要的。目前USB3.0協(xié)議已經(jīng)制定并將大行其道。
基于USB接口設(shè)計了符合USB1.1協(xié)議的控制系統(tǒng)。整個系統(tǒng)通過 PC機的應(yīng)用程序界面控制操作,USB接口負責單片機與PC機的通信。總體設(shè)計方案為:選用 Atmel公司的 MCU芯片STC89C52RC和Philips公司的USB控制接口芯片PD12,進行系統(tǒng)的硬件設(shè)計和軟件編程。硬件設(shè)計主要是 PD12與單片機間的接口電路及外圍電路單元(如LCD、按鍵),軟件分為3部分:①固件,控制PD12識別USB數(shù)據(jù)流、輸入輸出等;②USB功能設(shè)備驅(qū)動程序,介于硬件和應(yīng)用軟件之間,提供橋梁作用;③客戶應(yīng)用程序,完成頂層軟件對底層硬件的控制。
USB是一種數(shù)據(jù)傳輸總線協(xié)議。首先,USB系統(tǒng)被定義為3部分: ①USB的連接;②USB的主機;③USB的設(shè)備。主機在USB通信中居于核心地位,它與USB設(shè)備的通信模型如圖1所示。主機和設(shè)備都被劃分成不同的層次[2],每個層次的實現(xiàn)對USB有不同的要求。
圖1 USB通信模型之間的基本信息流
USB數(shù)據(jù)流是協(xié)議中的重點內(nèi)容。從邏輯上講,USB數(shù)據(jù)的傳輸是通過虛擬管道進行的。實際上,主機與設(shè)備的通信過程如下:設(shè)備驅(qū)動程序首先調(diào)用USB驅(qū)動接口(USB Driver Interface)發(fā)出I/O請求(IRP, I/O Request Packet);USB驅(qū)動程序收到該請求后,調(diào)用主控制器接口,將IRP轉(zhuǎn)化為USB的基本傳輸;通過主控制器將該傳輸解析成總線操作并以數(shù)據(jù)包(Packet)的形式輸出。
USB發(fā)展經(jīng)歷了1.0、1.1、2.0、3.0版本,由于本項目中數(shù)據(jù)傳輸速率要求不高,故采用符合USB1.1的PD12芯片。它是USB控制接口芯片,集成了SIE、FIFO存儲器、收發(fā)器及電壓調(diào)整器[3]。是一款帶有并行總線的USB器件,支持本地DMA傳輸。這些特點在系統(tǒng)實現(xiàn)時能節(jié)約成本,外設(shè)能實現(xiàn)更高級的USB功能。PD12需單片機配合才能完成USB通信,單片機利用讀寫外部存儲器方式來執(zhí)行該芯片的通信功能命令。
基于 USB接口的控制系統(tǒng)硬件組成包括單片機、USB接口芯片及一些外圍電路元件(如數(shù)碼管、LED發(fā)光管、蜂鳴器等)。如圖2所示是系統(tǒng)硬件設(shè)計框圖,主要由5個部分組成:PC主機用于對后臺的控制;USB接口是主機和外設(shè)之間連接的橋梁;USB接口芯片完成數(shù)據(jù)通信功能,并讀入微控制器中處理;微控制器選用STC89C52RC芯片,完成各部分控制功能和USB傳輸協(xié)議;外圍電路元件用來檢驗系統(tǒng)的通信是否成功。
圖2 系統(tǒng)的組成框
固件是運行于單片機中的前臺控制程序,采用KeilC51編譯生成。為了使PD12在USB上的數(shù)據(jù)傳輸速率盡可能大,固件被設(shè)計成完全的中斷驅(qū)動模式,前后臺分開工作,并通過事件標志和 Setup包數(shù)據(jù)緩沖區(qū)來實現(xiàn)數(shù)據(jù)的交換[4]。通常,USB固件程序包含3部分:①初始化整個電路;②主循環(huán)部分;③中斷服務(wù)程序。
固件軟件系統(tǒng)結(jié)構(gòu)模塊[4]如圖3所示。
圖3 系統(tǒng)固件的結(jié)構(gòu)
硬件提取層:它是固件最低層的代碼,完成對單片機I/O口和硬件接口進行操作。
PD12命令接口:對PD12的所有功能進行訪問并操作,簡化PD12編程。
中斷服務(wù)程序:對 PD12發(fā)出的中斷請求進行處理,從 PD12內(nèi)部讀數(shù)據(jù)到存儲器,并設(shè)置事件標志,以便主循環(huán)進一步處理。
標準請求和廠商請求:對協(xié)議中各種標準請求以及用戶添加的特殊請求進行處理。
主循環(huán):首先初始化微控制器單元的所有端口、存儲器和中斷服務(wù)程序,然后進入循環(huán),輪詢各種狀態(tài)并進行相應(yīng)的處理。
該程序結(jié)構(gòu)具有高度的可移植性以及很好的可擴展性,它按功能將復雜的過程分成多個簡單的模塊處理,采用事件標志和緩沖存儲,有效地將各個模塊聯(lián)系起來,能夠完成微控制器和 PC機之間的USB通信。
由于Windows中沒有現(xiàn)成的驅(qū)動程序支持設(shè)備的使用,因此必須編寫與 PD12數(shù)據(jù)通信相匹配的功能層設(shè)備驅(qū)動程序。
設(shè)備驅(qū)動程序提供操作系統(tǒng)與硬件的接口,支持用戶與應(yīng)用程序間的信息交換。軟件程序在Visual C++6.0的環(huán)境下完成,使用Compuware公司的 DriverStudio工具生成驅(qū)動程序框架[5],用戶對其進行修改并加入自己的功能代碼,大大縮短了開發(fā)的時間。
采用 Windows驅(qū)動程序模型(WDM, Windows Driver Model),其架構(gòu)如圖4所示。它是一種基于Windows平臺的設(shè)備驅(qū)動程序模型,采用靈活的分層處理方法,不僅可以接收來自其上層驅(qū)動程序提供的相關(guān)服務(wù),而且可以通過發(fā)送IRP請求與其他驅(qū)動程序進行通信[6]。
圖4 WDM型的USB驅(qū)動程序架構(gòu)
USB驅(qū)動程序的工作流程如下:首先,用戶應(yīng)用程序調(diào)用Windows API函數(shù),向驅(qū)動程序發(fā)出請求,并將相關(guān)數(shù)據(jù)打包成IRP,IO管理器捕獲IRP并進行相應(yīng)處理;然后,IO管理器向USB功能設(shè)備驅(qū)動程序發(fā)送IRP包,請求功能設(shè)備驅(qū)動程序進行相應(yīng)處理;最后,功能設(shè)備驅(qū)動程序處理完接收到的 IRP,設(shè)好相關(guān)環(huán)境后將其傳給更底層的驅(qū)動程序,由總線驅(qū)動程序完成對硬件的操作,并將結(jié)果返回。中間層驅(qū)動程序相當于過濾器,可不做任何事,只是向下傳遞IRP。
USB設(shè)備應(yīng)用程序的作用是為主機與 USB外設(shè)提供通信橋梁,實現(xiàn)主機對 PD12的管理與操作,為用戶提供友好的人機交互界面。它是系統(tǒng)與用戶的接口,不能直接去訪問USB設(shè)備,必須通過調(diào)用驅(qū)動程序來完成對外圍設(shè)備的控制和通信。
應(yīng)用程序在Visual C++6.0環(huán)境中開發(fā)實現(xiàn),使用它提供的微軟基礎(chǔ)類(MFC, Microsoft Foundation Class)來編寫程序,MFC對Win32 API函數(shù)進行封裝,提供了大量的類庫和代碼支持[7],可實現(xiàn)大部分API功能,大大簡化了應(yīng)用程序的編程。
應(yīng)用程序主要向硬件發(fā)送數(shù)據(jù)或命令。它與驅(qū)動程序的通信主要是通過驅(qū)動程序提供的函數(shù)來實現(xiàn)的,過程如下:應(yīng)用程序首先調(diào)用 CreateFile函數(shù)打開 USB設(shè)備,獲得設(shè)備句柄;然后利用該句柄,應(yīng)用程序調(diào)用DeviceIoControl函數(shù)與WDM驅(qū)動程序進行通信;最后在退出應(yīng)用程序之前,應(yīng)調(diào)用CloseHandle函數(shù)來關(guān)閉該USB設(shè)備[8]。
圖5為PC機與USB設(shè)備進行通信的應(yīng)用程序簡單界面。首次將前臺被控端與 PC機相連需安裝驅(qū)動程序,用戶基于該界面在 PC端進行各功能的操作,如在文本框中輸入字符、點擊相關(guān)按鈕等,設(shè)備端可以作出相應(yīng)的反應(yīng)。調(diào)試結(jié)果表明,數(shù)據(jù)在該系統(tǒng)中傳輸無誤,程序運行正??煽俊?/p>
圖5 應(yīng)用程序簡單界面
提供了一種基于USB接口的控制系統(tǒng)的設(shè)計方法,通過實際的硬件實現(xiàn)和軟件調(diào)試,數(shù)據(jù)能夠在該系統(tǒng)中快速無誤地傳輸,可應(yīng)用在各種電子產(chǎn)品中實現(xiàn)與PC機進行準確的數(shù)據(jù)傳輸[9]。但在硬件通信協(xié)議方面,可以選用符合 USB2.0協(xié)議的接口芯片,加快通信的速度,使圖像傳輸?shù)雀咚偻ㄓ嵆蔀榭赡?。在軟件方面,設(shè)計的方式和源代碼的實現(xiàn)可以采用更優(yōu)化的方法。相信隨著USB總線技術(shù)的不斷發(fā)展,它的應(yīng)用領(lǐng)域會越來越廣闊。
[1] 邊海龍, 賈少華. USB2.0設(shè)備的設(shè)計與開發(fā)[M]. 北京:人民郵電出版社,2004.
[2] 胡曉軍, 張愛成. USB接口開發(fā)技術(shù)[M]. 西安:西安電子科技大學出版社,2005.
[3] 胡凱, 龔莉萍, 陳云榕. 基于 USB2.0的數(shù)字高速采集設(shè)備設(shè)計[J]. 通信技術(shù), 2009, 42(07):45-47.
[4] 周立功. PDIUSBD12固件編程與驅(qū)動開發(fā)[M]. 北京:北京航空航天大學出版社,2003.
[5] 陳亞娟. USB廣播播放控制系統(tǒng)設(shè)計[J]. 通信技術(shù),2009, 42(02):292-294.
[6] 武安河. Windows2000/XP WDM設(shè)備驅(qū)動程序開發(fā)[M].北京:電子工業(yè)出版社,2005.
[7] 張岳新. Visual C++程序設(shè)計[M]. 蘇州:蘇州大學出版社,2002.
[8] 鄢斌. 基于USB接口密碼模塊的可信計算平臺設(shè)計[J].信息安全與通信保密,2011(05):107-109.
[9] 張建軍, 杜莉. 防跟蹤 USB接口加密狗的設(shè)計[J]. 信息安全與通信保密,2010(10):58-59,62.