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