日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 嵌入式 > 嵌入式教程
[導讀]如何編寫Windows CE.net的usb驅(qū)動程序(1)

隨著USB設備的普及,擺在開發(fā)人員面前的驅(qū)動開發(fā)任務也是越來越繁重了,特別是對于一些嵌入式開發(fā)廠商來講,由于設備所采用的操作系統(tǒng)不同,相應的硬件接口也是不一樣的,開發(fā)相關的USB驅(qū)動程序更是難上加難。WindowsCE.NET是微軟推出的功能強大的嵌入式操作系統(tǒng),國內(nèi)采用此操作系統(tǒng)的廠商已經(jīng)很多了,本文就以windowsce.net為例,簡單介紹一下如何開發(fā)windowsce.net下的USB驅(qū)動程序。

首先要熟悉一些USB的基本概念,當然最好把USB1.1的協(xié)議看一遍,(當然現(xiàn)在2。0的協(xié)議都已經(jīng)有了)http://www.usb.org

上可以下載,我記得好像有個中文版的,翻譯的還可以,http://www.driverdevolep.com

上有的,具體位置記不太清楚了,中文版的協(xié)議可以快速翻一邊,了解一些基本的概念,但是設計到一些關鍵性的東西最好還是看英文版的心里比較清楚些。

這里我就不介紹USB的基本協(xié)議了,假設用戶已經(jīng)熟悉了USB設備的一些基本的概念,并且對WinowsCE.NET的開發(fā)有一定的了解。

下面簡略介紹一下WindowsCE.NET中USB設備驅(qū)動開發(fā)的一些基礎知識。

WindowsCE.NET的USB系統(tǒng)軟件分為兩層:USBClient設備驅(qū)動程序和底層的WindowsCE實現(xiàn)的函數(shù)層。USB設備驅(qū)動程序主要負責利用系統(tǒng)提供的底層接口配置設備,和設備進行通訊。底層的函數(shù)提本身又由兩部分組成,通用串行總線驅(qū)動程序(USBD)模塊和較低的主控制器驅(qū)動程序(HCD)模塊。HCD負責最最底層的處理,USBD模塊實現(xiàn)較高的USBD函數(shù)接口。USB設備驅(qū)動主要利用USBD接口函數(shù)和他們的外圍設備打交道。

USB設備驅(qū)動程序主要和USBD打交道,所以我們必須詳細的了解USBD提供的函數(shù)。

主要的傳輸函數(shù)有:

AbourtTransferIssueControlTransfer

CloseTransferIssueInterrupTransfer

GetIsochResultIssueIsochTransfer

GetTransferStatusIstransferComplete

IssueBulkTransferIssueVendorTransfer

主要的用于打開和關閉USBD和USB設備之間的通信通道的函數(shù)有:

AbortPipeTransfersClosePipe

IsDefaultPipeHaltedIsPipeHalted

OpenPipeResetDefaultPipe

ResetPipe

相應的打包函數(shù)接口有:

GetFrameLengthGetFrameNumberReleaseFrameLengthControl

SetFrameLengthTakeFrameLengthControl

取得設置設備配置函數(shù):

ClearFeatureSetDescriptor

GetDescriptorSetFeature

GetInterfaceSetInterface

GetStatusSyncFrame

與USB進行交互的實現(xiàn)方法相關的多任務函數(shù):

FindInterfaceRegisterClientDeviceId

GetDeviceInfoRegisterClientSettings

GetUSBDVersionRegisterNotificationRoutine

LoadGenericInterfaceDriverTranslateStringDescr

OpenClientRegisterKeyUnRegisterNotificationRoutine

常見的WindowsCE.NET下USB的設備驅(qū)動程序的編寫有以下幾種方法:

●流式接口函數(shù)

這種驅(qū)動程序主要呈現(xiàn)流式函數(shù)接口,主要輸出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必須為三個字符,否則會出錯。但是此類的驅(qū)動程序不是通過設備管理接口來加載的,所以必須手工的調(diào)用RegisterDevice()和DeregisterDevice()函數(shù)來加載和卸載驅(qū)動程序。用戶可以將此類的設備作為標準的文件來操作,只要調(diào)用相應的文件操作就可以和驅(qū)動程序打交道。

●使用現(xiàn)有的WindowCE.NET的應用程序接口

此類設備主要是利用WindowsCE.NET中已經(jīng)有了現(xiàn)成的函數(shù)接口,例如USBMassStorageDisk,它主要利用現(xiàn)有的WindowsCE.Net中已經(jīng)有的可安裝文件系統(tǒng)接口,呈現(xiàn)給系統(tǒng)可用的文件系統(tǒng),對于用戶來講,它是透明的,用戶僅僅感覺在操作一個文件夾。

●創(chuàng)建指定到特定的USBD的用戶指定的API

這種方法在USBD呈現(xiàn)設備時不需要任何限制,主要是特制的提供API給用戶,一般不太常見。

USB設備驅(qū)動程序必須輸出的函數(shù)有:

●USBDeviecAttach

當USB設備連接到計算機上時,USBD模塊就會調(diào)用此函數(shù),這個函數(shù)主要用于初始化USB設備,取得USB設備信息,配置USB設備,并且申請必需的資源。

●USBInstallDriver

主要用于創(chuàng)建一個驅(qū)動程序加載所需的注冊表信息,例如讀寫超時,設備名稱等。

●USBUninstallDriver

主要用于釋放驅(qū)動程序所占用的資源,以及刪除USBInstallDriver函數(shù)創(chuàng)建的注冊表等。

上述的三個函數(shù)接口是所有的USB驅(qū)動程序必須提供的,缺一不可。

另外比較重要的是USB設備驅(qū)動程序的注冊表配置,一般的USB設備驅(qū)動程序的注冊表配置在HKEY_LOCAL_MACHINEDriversUSBLoadClients下,每個驅(qū)動程序的子鍵都有Group1_IDGroup2_IDGroup3_IDDriverName格式,如果注冊表信息與USB設備信息符合,USBD就會加載此驅(qū)動程序。否則設備的子鍵應該由供應商,設備類和協(xié)議信息通過下劃線組成。

具體的配置舉個例子:

例如你有個PDA設備,它具有一個USB接口,它的供應廠商ID假設為0x0888,設備ID為0x0999,沒有使用特殊的協(xié)議,那么它的加載注冊表應該寫為:

[HKEY_LOCAL_MACHINEDriversUSBLoadClients2184_2457DefaultDefaultPDA]"DLL"="pdausb.dll"

需要注意的是注冊表構成都是十進制數(shù)值來標識的,注意一下十進制和十六進制的轉(zhuǎn)換。

再舉個USB鼠標的例子,USB鼠標是標準的HID設備,它的協(xié)議為:InterfaceClassCode為3(HID類),InterfaceSubclassCode為1(引導接口類),InterfaceProtocolCode為2(鼠標協(xié)議類),所以它的注冊如下:

[HKEY_LOCAL_MACHINEDriversUSBLoadClientsDefaultDefault3_1_2USBMouse]"DLL"="usbmouse.dll"

到此為止,我們可以看出,其實驅(qū)動開發(fā)無非做兩件事情,一件是和硬件打交道,另外一件是和操作系統(tǒng)打交道。舉個簡單的例子,例如:我們需要開發(fā)一個USB鼠標驅(qū)動程序,我們就需要了解USB鼠標硬件上是怎么發(fā)送數(shù)據(jù)的?操作系統(tǒng)怎么才能得到鼠標的控制事件?其實USB鼠標是有一個中斷PIPE的,用于傳送鼠標產(chǎn)生的數(shù)據(jù),WindwosCE.NET中有個接口函數(shù)叫做mouse_event(),專門用于產(chǎn)生鼠標事件,但是它是不關心具體什么硬件的,甚至我們自己在應用程序中調(diào)用這個函數(shù)都可以實現(xiàn)模擬鼠標,對應的有個keybd_event(),用于產(chǎn)生鍵盤事件,知道了這個就好辦多了,只要將相應的數(shù)據(jù)轉(zhuǎn)換一下,調(diào)用一下mouse_event()即可

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅(qū)動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅(qū)動性能的關鍵。

關鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質(zhì)量和效率直接關系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅(qū)動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關鍵字: LED 驅(qū)動電源 開關電源

LED驅(qū)動電源是把電源供應轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅(qū)動電源
關閉