《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 業界動態 > 通用串行總線(USB)設備的驅動

通用串行總線(USB)設備的驅動

2009-02-20
作者:晁建剛 魏安陽 邱淑范

  摘? 要: 從問題的由來、類驅動程序、通信協議、描述符、驅動開發等對USB的驅動進行分析和討論,提出USB設備使用操作系統嵌入的通用類驅動程序成為趨勢。

  關鍵詞: USB? 類驅動程序? 人工接口設備(HID)? Windows驅動程序模型(WDM)

?

  最初設計USB(Universal Serial Bus)這種外設總線的目的之一就是為了便于使用,這是計算機發展的產物。外設總線最重要的就是操作系統對外設的自動識別、配置,實現熱插拔,即插即用。本文試圖以人工接口設備(Human interface device,簡稱HID)為主,從問題的由來、類驅動程序、通信協議、描述符、驅動開發等幾個方面來探討一下USB設備的驅動問題。

1 問題的由來

  一個非常簡單的設備安裝有時得花用戶好幾天時間,原因何在?設備的驅動與其他的驅動程序或軟件不兼容,或隱有bug。如果操作系統本身就含有用戶需要的驅動程序,設備一插就能使用,這是最好不過的事情。

  現已有上千種不同的設備,許多功能大致一樣。操作系統不可能為所有的設備提供全部的驅動程序。仔細考慮一下,許多設備可歸屬為少數幾個具有普遍特性和需求的類,因而為每種類定義一個通用的API接口,寫出通用的驅動程序是可實現的。

通過定義不同的設備類型,USB試圖實現通用驅動程序這一目標。在USB規范里,除定義了基本的協議和構造用來配置設備和傳輸數據,還為所有的USB設備定義了機械和電器性能要求。USB規范定義了通信、打印、圖像、儲存、音頻和人工接口設備等類。一些設備是單一的類,一些是多種類的綜合體。具有多種類的設備稱為混合設備,在USB規范對設備有詳細的劃分。

2 類驅動程序

  由于一些類尚未形成標準,Win2000只包含了部分USB類的驅動程序。一旦形成標準得到認可,通用的驅動程序也就自然嵌入到操作系統了。圖1為操作系統中USB驅動接口框圖。這是一個標準的Windows驅動程序模型(WDM),是一種分層模式。核心USB Driver Stack模型描述設備如何安裝和啟動,以及如何為用戶請求服務和與硬件打交道,并為上層USB驅動提供接口。上層驅動完成設備功能并為用戶層提供接口,這使得向USB總線發出請求是通過多層結構。

?

  HID類是為一些人工的輸入或輸出設備而設計的,最常用的象鍵盤、鼠標、游戲控制器。這種類同時也包含了前面板顯示區和鍵盤區(象電話或VCR遠程控制),還有觸覺和聽覺反饋設備。對于HID類的設備,操作系統已經給出了相應的驅動程序。

連接到計算機的USB設備幾乎都包含HID類,用以信號控制。比如一個USB揚聲器,音量、音調控制用HID類,但音頻數據傳輸用音頻類。

  通常情況下,USB設備與主機通信是經過USB端口,類驅動程序無須擔心或考慮ISA總線、PCI總線、SCSI、IDE或ATAPI接口、串口、并口、鍵盤或鼠標口、游戲接口及相關的一些東西。類驅動程序甚至不需要了解USB端口,這個物理接口被USB主機驅動程序管理形成抽象層,也正因為這個抽象層及其他相應層,使通用驅動程序成為可能。每一層有自己的功能,并為上一層提供了API接口,上層沒有必要了解下一層如何工作及內部體系結構,各層為一個封裝體。

  圖2所示為USB各層之間的通信流程。USB用明確定義了的層協議來減少復雜化且有利于標準化,各層均有連接,但大多為邏輯型的。最低層的是USB主機控制器和USB設備接口之間的物理連接,包括連接線、連接器、狀態機。其次在計算機方面為USB主機驅動程序,這是操作系統所必須的。在設備方是用于設備管理和請求的固件程序(Firmware),此層是配置和控制USB接口的邏輯連接。第三層在主機方是設備驅動程序,通常稱為類驅動程序;在設備方是類屬性的固件程序,通過邏輯連接用于特殊類的控制和請求。最頂層為用戶層,為用戶所關心和考慮,比如在主機客戶方為飛行模擬仿真,在設備方則為操縱桿。此時用戶所關心的是操縱桿的輸入,不用考慮這些輸入如何讀、如何打包、如何傳輸。

?

3 通信協議

  與USB設備進行通信,主機軟件打開一系列的管道來傳輸數據。不同的管道對應于USB的不同端口(endpoint)。USB有四種傳輸方式,分別為控制、中斷、同步和批量,每種方式對應各自的管道。除同步方式外,均有握手信號,保證了數據傳輸的準確性。

  一般的USB設備通常用控制、中斷或數據管道,如圖3所示。數據管道是單向的,用于批量或同步傳輸方式時使用。HID設備通常僅用控制和中斷兩個管道。控制管道為缺省,也可被USB設備用來接收、響應特殊的請求或命令。中斷管道向主機異步發送數據,其實USB不支持真正的中斷,而是用來傳輸無時序特征的信號變化。比如按下鍵、鼠標移動、操縱桿運動,不用特殊的請求就可實時地傳輸數據。

?

  每一種數據傳輸方式中包含了多個事務數據,這些數據被綜合完成一定功能。一個事務數據由三個部分組成:信令包段(Token Packet phase)、數據包段(Data Packet phase)、握手信號包段(Handshade Packet phase)。信令包定義了事務的類型,設備的地址也包含在其中。一些信令包單獨存在,后面沒有跟別的包。數據包里包含了與傳輸有關的負載。在單個的事務數據最大能承載1023個字節。

  基于相同的管道配置和命令、通用的API接口,USB設備通用驅動程序得以實現,設備之間的差異則使返回的數據結構不同。

4 描述符

  USB設備用預先定義好的數據結構來表示他們的標識符、性能、請求和協議,通常稱為描述符。設備一插入到主機,操作系統就能立刻根據描述符找到與之相對應的類驅動程序,完成USB設備的枚舉及其他功能。在USB規范里定義了必要的設備、配置、接口、端口、字符串描述。HID類除此之外又定義了報告描述符。報告描述符提供了HID類驅動程序能理解和解釋的報告,報告雖然靈活但卻很復雜。描述符可用固件程序來寫,編譯生成二進制格式后儲存到設備中使用,便于類驅動識別和解釋。

  下面是作者設計的一個利用EZUSB芯片提供的I2C連接多部醫監設備的報告描述符。圖4為報告描述符所表達的數據結構。

?

ReportDescriptor??? :???; Generated with HID Tool, copied to here

  DB?? 6,0,0FFH??????; Usage_Page (Vendor Defined)?

  DB?? 9,1????????????; Usage (I/O Device)?

  DB?? 0A1H,1???????? ; Collection (Application)

  DB?? 19H,1????????? ; Usage_Minimum?

  DB?? 29H,2????????? ; Usage_Maximum?

  DB?? 15H,0????????? ; Logical_Minimum (0)?

  DB?? 26H,255,0???? ; Logical_Maximum (255)

  DB?? 75H,8????????? ; Report_Size (8)

  DB?? 95H,1????????? ; Report_Count (1) = Read Address

  DB?? 81H,2????????? ; Input (Data,Var,Abs)

  DB?? 19H,1????????? ; Usage_Minimum?

  DB?? 29H,2????????? ; Usage_Maximum?

  DB?? 95H,2????????? ;?Report_Count (2)=Write Address+Data

  DB?? 91H, 2???????? ; Output (Data,Var,Abs)

  DB?? 0C0H????????????; End_Collection

  ReportLength? EQU $-ReportDescriptor

5 驅動程序的開發

  對于USB設備來說,開發驅動程序是一件比較復雜的事情。通常驅動程序要實現以下的功能:

  ·設備的初始化;

  ·即插即用創建和刪除設備;

  ·處理Win32打開和關閉文件句柄的請求;

  ·類功能定義IOCTL(I/O Control)、功能實現;

  ·IRP(I/O Request Packet)的調用處理;

  ·調用其他的驅動程序;

  ·訪問硬件。

  USB驅動程序設計的核心是端點(Endpoint)及數據傳輸類型的選擇,通過端點建立起管道通信,實現定義的功能。這樣,在應用層和設備之間就建立起了虛擬的通道,所有這些通過多線程的句柄調用實現。

  每個驅動程序都必須有一個DriverEntry入口函數,用于系統調用。

NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject,

???????????????????? IN PUNICODE_STRING RegistryPath)

{

  NTSTATUS status = STATUS_SUCCESS;

  // Export other driver entry points...

  DriverObject->DriverUnload = USBUnload;

  DriverObject->MajorFunction[IRP_MJ_CREATE]=USBCreate;

  DriverObject->MajorFunction[IRP_MJ_CLOSE]=USBClose;

  DriverObject->MajorFunction[IRP_MJ_READ]=USBRead;

  DriverObject->MajorFunction[IRP_MJ_WRITE] =USBWrite;

  DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = USBDeviceControl;

  RegisterForPnpNotification(DriverObject);

  return status;

}

  寫驅動程序的軟件較多,目前比較流行的軟件是DriverStudio、WinDriver等。它們均提供用于生成USB驅動的代碼生成器,用戶按照提示可以定義設備的配置和功能,然后做功能修改即可。利用軟件提供的例子進行修改也是一個比較好的捷徑。

USB技術的應用,是計算機產業的一大發展。目前以微軟為代表的各大公司積極對其進行開發,使得應用越來越廣泛。微軟操作系統集成了HID類、音頻類的USB驅動程序。作者用EZUSB以HID類連接醫監設備,不用寫驅動程序在Win2000上運行良好。針對開發USB器件的需要,作者根據HID規范定義了自己特殊的類并重新寫上層的類驅動程序,測試較為滿意。從長遠的角度來看,操作系統通過集成類驅動程序來支持各種USB設備勢在必行。

?

參考文獻

1 Compaq,Intel,Microsoft,NEC.Universal Serial Bus Specification.Revision2.0 May 18,2000

2 Chris Cant.Writing Windows WDM Device Drivers

3 EZ-USB Technical Reference Manual Version1.6.Anchor Chips Incorporated. Copyright1999

4 Jim Lyle.USB Primer Classer and Drivers

5 Device Class Definition for Human Interface Devices (HID). Firmware Specification 4/7/99. Version 1.1.

July 4, 1999

6 Peter G.Viscarola &W.Anthony Mason.Windows NT Device Driver Development

7 Mike Zerkus,John Lusher,Jonathan Ward.USB Primer

?

? Practical Design Guide
本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          欧美日韩在线综合| 国产一区二区高清视频| 亚洲欧美一区二区视频| 亚洲国产裸拍裸体视频在线观看乱了中文| 国产精品亚洲一区二区三区在线| 国产日韩在线一区| 亚洲欧洲精品成人久久奇米网| 女人香蕉久久**毛片精品| 欧美成人精品在线视频| 国产精品二区在线| 欧美日韩成人综合在线一区二区| 蜜桃久久av| 亚洲国产人成综合网站| 久久久久久久久久码影片| 欧美成人自拍| 国产精品a久久久久| 欧美成人午夜剧场免费观看| 国产一区二区欧美日韩| 国产亚洲在线观看| 一区二区三区我不卡| 欧美一区二区黄| 日韩亚洲一区在线播放| 一区视频在线看| 亚洲中字在线| 国产精品一区二区久久国产| 久久琪琪电影院| 一区二区日本视频| 亚洲人成毛片在线播放| 男人的天堂亚洲在线| 欧美日韩一区二区三区在线看| 欧美麻豆久久久久久中文| 亚洲日本成人网| 欧美~级网站不卡| 激情成人综合网| 欧美a级一区| 亚洲二区视频在线| 国产一区视频网站| 亚洲性夜色噜噜噜7777| 欧美成人精品一区| 亚洲精品久久久久久久久久久久| 亚洲精品免费网站| 伊人久久婷婷色综合98网| 欧美一区午夜视频在线观看| 欧美国产日韩一区| 欧美精品国产精品日韩精品| 欧美精品免费在线| 亚洲国产天堂久久综合| 欧美久久婷婷综合色| 欧美四级在线| 亚洲国产综合在线看不卡| 亚洲精品美女久久7777777| 久久久久成人精品免费播放动漫| 国产精自产拍久久久久久| 国产午夜精品久久久久久免费视| 亚洲第一精品影视| 国产精品hd| 欧美精品一区二区三区蜜臀| 久久久国产91| 国产亚洲欧洲997久久综合| 欧美精品一区二区三区在线看午夜| 国产欧美精品日韩区二区麻豆天美| 亚洲黄色av| 亚洲欧洲99久久| 黄网动漫久久久| 欧美在线精品免播放器视频| 亚洲国产精品成人一区二区| 精东粉嫩av免费一区二区三区| 国产在线国偷精品产拍免费yy| 久久夜色精品亚洲噜噜国产mv| 国产精品vip| 国产乱子伦一区二区三区国色天香| 亚洲日本中文| 久久青青草原一区二区| 久久国产精品久久精品国产| 香蕉久久久久久久av网站| 亚洲精品无人区| 欧美日韩亚洲精品内裤| 国产欧美一区二区三区在线老狼| 一区二区三区日韩欧美| 99国产精品久久久久久久久久| 欧美日韩国产在线播放网站| 亚洲欧美国产精品桃花| 尤物网精品视频| 一区二区三区免费看| 国产一区二区三区在线播放免费观看| 国产欧美 在线欧美| 久久偷看各类wc女厕嘘嘘偷窃| 亚洲深夜福利在线| 久久露脸国产精品| 国产精品久久久久一区二区三区| 亚洲美女黄色| 国产午夜久久久久| 久久综合一区二区三区| 欧美中文字幕久久| 激情成人综合| 午夜精品视频网站| 一区二区三区精品在线| 伊人久久亚洲热| 老牛影视一区二区三区| 欧美劲爆第一页| 久久久中精品2020中文| 亚洲免费视频观看| 国产精品免费一区二区三区观看| 狠狠入ady亚洲精品经典电影| 国产精品欧美在线| 久久精品二区亚洲w码| 激情久久综艺| 亚洲国产成人久久| 免费黄网站欧美| 亚洲一区二区三区高清| 你懂的国产精品永久在线| 国产日韩精品一区二区三区| 久久嫩草精品久久久精品一| 精品999网站| 亚洲国产精品成人久久综合一区| 亚洲视频在线观看三级| 国产精品狼人久久影院观看方式| 欧美黄色成人网| 亚洲免费电影在线| 亚洲色诱最新| 亚洲福利视频专区| 一区二区三区蜜桃网| 激情小说亚洲一区| 亚洲精品黄网在线观看| 午夜精品视频在线观看一区二区| 欧美在线视频观看| 欧美一区二区在线免费播放| 亚洲女爱视频在线| 欧美日韩在线免费观看| 欧美岛国激情| 国产精品免费看| 欧美日韩mv| 欧美亚洲视频在线看网址| 亚洲欧美日本伦理| 性亚洲最疯狂xxxx高清| 欧美日韩精品在线播放| 欧美片第1页综合| 亚洲天堂av在线免费| 国产伦精品一区二区三区高清| 久久久噜噜噜久久狠狠50岁| 国产精品超碰97尤物18| 欧美成人午夜免费视在线看片| 日韩午夜在线播放| 蜜臀va亚洲va欧美va天堂| 欧美片第一页| 韩国成人福利片在线播放| 亚洲三级性片| 欧美日韩国产精品专区| 在线观看免费视频综合| 伊人狠狠色j香婷婷综合| 欧美日韩国产区一| 欧美三级视频在线| 精品999久久久| 一区二区免费在线观看| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美激情影院| 亚洲国产日韩欧美在线99| 国产精品久久久一本精品| 欧美在线视频在线播放完整版免费观看| 亚洲社区在线观看| 久久成人精品一区二区三区| 国产精品免费网站| 欧美四级伦理在线| 久久综合久久88| 久久aⅴ乱码一区二区三区| 亚洲美女精品成人在线视频| 国产欧美日韩一区二区三区在线| 国产日韩欧美综合一区| 亚洲女人av| 狠狠色狠狠色综合日日小说| 久久这里有精品15一区二区三区| 亚洲午夜在线观看视频在线| 久久九九精品99国产精品| 国产精品黄视频| 亚洲欧美一级二级三级| 亚洲欧洲精品天堂一级| 一区二区在线观看av| 在线成人av网站| 一本色道**综合亚洲精品蜜桃冫| 欧美精品一区二区久久婷婷| 欧美成人一区二区三区在线观看| 狠狠色噜噜狠狠狠狠色吗综合| 亚洲精品一区在线观看| 亚洲免费网址| 久久青草久久| 亚洲一区二区高清视频| 国产精品第13页| 亚洲欧洲av一区二区三区久久| 国产一区二区电影在线观看| 午夜一区二区三区在线观看| 国产精品人人做人人爽| 一区二区三区视频在线观看| 久久国产精品99久久久久久老狼| 欧美女主播在线| 国产小视频国产精品| 亚洲视频网站在线观看| 国产美女高潮久久白浆| 欧美成人按摩| 欧美精品一区在线播放| 午夜精品国产精品大乳美女| 欧美精品激情blacked18| 欧美视频一区在线| 欧美亚洲一级片| 国产乱码精品一区二区三区五月婷| 国内一区二区在线视频观看| 久久精品水蜜桃av综合天堂| 欧美日韩国产综合久久| 久久精品在这里| 久久se精品一区精品二区| 1024精品一区二区三区| 欧美精品电影| 国内免费精品永久在线视频| 亚洲日本va午夜在线电影| 欧美韩国一区| 一道本一区二区| 亚洲高清123| 久久综合激情| 性久久久久久久久久久久| 久久久久国产精品麻豆ai换脸| 国产精品久久久久久久电影| 久久久久久久久久久久久久一区| 久久艳片www.17c.com| 快播亚洲色图| 欧美专区在线| 欧美在线视频观看免费网站| 国产精品美女主播在线观看纯欲| 欧美影院久久久| 欧美视频一区二区三区在线观看| 一本久道久久久| 美女黄色成人网| 欧美国产日本在线| 欧美视频二区36p| 亚洲精品一区二区三区在线观看| 亚洲女ⅴideoshd黑人| 国产精自产拍久久久久久| 国产精品人人爽人人做我的可爱| 国产综合色在线视频区| 欧美三级韩国三级日本三斤| 欧美日韩一区二区三区四区五区| 亚洲成人中文| 欧美在线网址| 欧美国产精品va在线观看| 在线不卡a资源高清| 亚洲精选在线观看| 欧美日韩三级电影在线| 亚洲性感美女99在线| 欧美一级午夜免费电影| 在线播放一区| 国产一区二区三区在线观看免费视频| 亚洲国产高清高潮精品美女| 欧美视频在线观看| 亚洲毛片在线观看.| 欧美精品国产精品日韩精品| 欧美偷拍另类| 久久久久久一区二区三区| 亚洲国产精品一区二区尤物区| 亚洲午夜一级| 欧美日韩精品免费| 妖精视频成人观看www| 欧美一区二区在线观看| 久久精品欧美日韩| 欧美日本韩国在线| 国产精品一区三区| 亚洲精品乱码久久久久久按摩观| 欧美国产日韩一区二区在线观看| 一区二区三区免费观看| 激情欧美一区二区| 久久9热精品视频| 亚洲高清在线| 亚洲人成免费| 在线成人av| 亚洲在线国产日韩欧美| 亚洲国产高清自拍| 亚洲欧美日韩国产成人| 久久久www免费人成黑人精品| 国产日韩欧美电影在线观看| 久久久91精品国产一区二区精品| 国产日韩精品一区二区三区| 亚洲三级免费观看| 亚洲综合色激情五月| 影音先锋久久资源网| 亚洲精品在线一区二区| 米奇777在线欧美播放| 亚洲国产精品久久久久久女王| 国产精品成人观看视频国产奇米| 国产主播一区二区三区四区| 黑人巨大精品欧美一区二区小视频| 99视频在线精品国自产拍免费观看| 欧美一区二区在线看| 欧美日韩一区二| 欧美电影美腿模特1979在线看| 国产一区二区在线观看免费播放| 男男成人高潮片免费网站| 欧美日韩国产美女| 国产精品久久久久久久一区探花| 亚洲欧美日韩国产另类专区| 麻豆精品在线观看| 欧美黑人国产人伦爽爽爽| 亚洲国产成人午夜在线一区| 亚洲电影激情视频网站| 欧美极品影院| 久久综合久久美利坚合众国| 亚洲精品综合久久中文字幕| 久久嫩草精品久久久久| 亚洲综合视频1区| 久久亚洲美女| 一本色道久久综合狠狠躁的推荐| 久久午夜精品一区二区| 欧美激情精品久久久久久| 亚洲国产精品va在线看黑人动漫| 性色av一区二区三区在线观看| 久久天堂精品| 国产精品欧美日韩一区二区| 国产精品video| 一本色道久久综合亚洲精品不| 亚洲欧美成aⅴ人在线观看| 国产精品国产三级国产a| 国产日产欧美精品| 欧美一区日韩一区| 一区二区三区国产| 欧美视频不卡中文| 一区二区三区视频在线观看| 亚洲激情av在线| 最近中文字幕mv在线一区二区三区四区| 最新69国产成人精品视频免费| 欧美在线视频全部完| 国产精品国产三级国产专播品爱网| 亚洲国产日韩综合一区|