Windows CE下USB裝置驅動開發的一些基礎知識

來源:互聯網
上載者:User

 

隨著USB裝置的普及,擺在開發人員面前的驅動開發工作單位也是越來越繁重了,特別是對於一些嵌入式開發廠商來講,由於裝置所採用的作業系統不同,相應的硬體介面也是不一樣的,開發相關的USB驅動程式更是難上加難。Windows CE是微軟推出的功能強大的嵌入式作業系統,國內採用此作業系統的廠商已經很多了,本文就以Windows CE為例,簡單介紹一下如何開發Windows CE下的USB驅動程式。

 

首先要熟悉一些USB的基本概念,當然最好把USB 1.1的協議看一遍,(當然現在2.0的協議都已經有了)http://www.usb.org 上可以下載,我記得好像有個中文版的,翻譯的還可以,http://www.driverdevolep.com 上有的,具體位置記不太清楚了,中文版的協議可以快速翻一遍,瞭解一些基本的概念,但是設計到一些關鍵性的東西最好還是看英文版的心裡比較清楚些。

這裡我就不介紹USB的基本協議了,假設使用者已經熟悉了USB裝置的一些基本的概念,並且對Winows CE的開發有一定的瞭解。

 

Windows CE的USB系統軟體分為兩層: USB Client裝置驅動程式和底層的Windows CE實現的函數層。USB裝置驅動程式主要負責利用系統提供的底層介面配置裝置,和裝置進行通訊。底層的函數提本身又由兩部分組成,通用序列匯流排驅動程式(USBD)模組和較低的主控制器驅動程式(HCD)模組。HCD負責最最底層的處理,USBD模組實現較高的USBD函數介面。USB裝置驅動主要利用USBD介面函數和他們的外圍裝置打交道。

USB裝置驅動程式主要和USBD打交道,所以我們必須詳細的瞭解USBD提供的函數。

主要的傳輸函數有:

 

 

AbourtTransfer      IssueControlTransfer

CloseTransfer       IssueInterrupTransfer

GetIsochResult      IssueIsochTransfer

GetTransferStatus    IstransferComplete

IssueBulkTransfer    IssueVendorTransfer

主要的用於開啟和關閉USBD和USB裝置之間的通訊通道的函數有:

AbortPipeTransfers       ClosePipe

IsDefaultPipeHalted     IsPipeHalted

OpenPipe               ResetDefaultPipe

ResetPipe

相應的打包函數介面有:

GetFrameLength          GetFrameNumber         ReleaseFrameLengthControl

SetFrameLength          TakeFrameLengthControl

取得設定裝置配置函數:

ClearFeature         SetDescriptor

GetDescriptor       SetFeature

GetInterface         SetInterface

GetStatus           SyncFrame

與USB進行互動的實現方法相關的多任務函數:

FindInterface                      RegisterClientDeviceId

GetDeviceInfo                     RegisterClientSettings

GetUSBDVersion                  RegisterNotificationRoutine

LoadGenericInterfaceDriver          TranslateStringDescr

OpenClientRegisterKey             UnRegisterNotificationRoutine

常見的Windows CE.NET下USB的裝置驅動程式的編寫有以下幾種方法:

● 流式介面函數

這種驅動程式主要呈現流式函數介面,主要輸出XXX_Init, XXX_Deinit, XXX_Open, XXX_Close, XXX_Open,XXX_Close, XXX_Read, XXX_Write, XXX_Seek, XXX_IOControl, XXX_PowerUp, XXX_PowerDown等流式介面,注意上述的幾個介面一定都要輸出,另外XXX必須為三個字元,否則會出錯。但是此類的驅動程式不是通過裝置管理介面來載入的,所以必須手工的調用RegisterDevice()和DeregisterDevice()函數來載入和卸載驅動程式。使用者可以將此類的裝置作為標準的檔案來操作,只要調用相應的檔案操作就可以和驅動程式打交道。

● 使用現有的Window CE.NET的應用程式介面

此類裝置主要是利用Windows CE.NET中已經有了現成的函數介面,例如USB Mass Storage Disk,它主要利用現有的Windows CE.Net中已經有的可安裝檔案系統介面,呈現給系統可用的檔案系統,對於使用者來講,它是透明的,使用者僅僅感覺在操作一個檔案夾。

● 建立指定到特定的USBD的使用者指定的API

這種方法在USBD呈現裝置時不需要任何限制,主要是特製的提供API給使用者,一般不太常見。

USB裝置驅動程式必須輸出的函數有:

 

● USBDeviecAttach

當USB裝置串連到電腦上時,USBD模組就會調用此函數,這個函數主要用於初始化USB裝置,取得USB裝置資訊,配置USB裝置,並且申請必需的資源。

● USBInstallDriver

主要用於建立一個驅動程式載入所需的註冊表資訊,例如讀寫逾時,裝置名稱等。

● USBUninstallDriver

主要用於釋放驅動程式所佔用的資源,以及刪除USBInstallDriver函數建立的註冊表等。

上述的三個函數介面是所有的USB驅動程式必須提供的,缺一不可。

 另外比較重要的是USB裝置驅動程式的註冊表配置,一般的USB裝置驅動程式的註冊表配置在HKEY_LOCAL_MACHINE/Drivers/USB/LoadClients下,每個驅動程式的子鍵都有Group1_ID/Group2_ID/Group3_ID/DriverName格式,如果註冊表資訊與USB裝置資訊符合,USBD就會載入此驅動程式。否則裝置的子鍵應該由供應商,裝置類和協議資訊通過底線組成。

 

例如你有個PDA裝置,它具有一個USB介面,它的供應廠商ID假設為0x0888,裝置ID為0x0999,沒有使用特殊的協議,那麼它的載入註冊表應該寫為:

[HKEY_LOCAL_MACHINE/Drivers/USB/LoadClients/2184_2457/Default/Default/PDA]

"DLL"="pdausb.dll"

需要注意的是註冊表構成都是十進位數值來標識的,注意一下十進位和十六進位的轉換。

再舉個USB滑鼠的例子,USB滑鼠是標準的HID裝置,它的協議為: InterfaceClassCode為3(HID類),InterfaceSubclassCode為1(引導介面類),InterfaceProtocolCode為2(滑鼠協議類),所以它的註冊如下:

[HKEY_LOCAL_MACHINE/Drivers/USB/LoadClients/Default/Default/3_1_2/USBMouse]

"DLL"="usbmouse.dll"

到此為止,我們可以看出,其實驅動開發無非做兩件事情,一件是和硬體打交道,另外一件是和作業系統打交道。舉個簡單的例子,例如:我們需要開發一個USB滑鼠驅動程式,我們就需要瞭解USB滑鼠硬體上是怎麼發送資料的?作業系統怎麼才能得到滑鼠的控制事件?其實USB滑鼠是有一個中斷PIPE的,用於傳送滑鼠產生的資料,Windwos CE中有個介面函數叫做mouse_event(),專門用於產生滑鼠事件,但是它是不關心具體什麼硬體的,甚至我們自己在應用程式中調用這個函數都可以實現類比滑鼠,對應的有個keybd_event(),用於產生鍵盤事件,知道了這個就好辦多了,只要將相應的資料轉換一下,調用一下mouse_event()即可。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.