《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 業界動態 > 通用串行總線(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。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲高清视频在线观看| 午夜精品一区二区三区在线播放| 亚洲伦理在线免费看| 狠狠色丁香久久婷婷综合丁香| 国产精品激情av在线播放| 欧美剧在线观看| 欧美成人一区在线| 久久在线播放| 久久久久一区| 久久精品国亚洲| 久久精品国产99| 久久狠狠亚洲综合| 久久国产免费看| 久久精品91久久久久久再现| 欧美一区三区三区高中清蜜桃 | 亚洲天堂男人| 亚洲亚洲精品三区日韩精品在线视频 | 韩国一区二区在线观看| 国产在线视频欧美一区二区三区| 国产欧美日韩精品一区| 国产偷久久久精品专区| 国内精品视频666| 亚洲二区在线| 亚洲看片一区| 亚洲图片欧美午夜| 亚洲欧美日韩精品久久奇米色影视 | 欧美日韩免费精品| 欧美日韩综合久久| 国产精品国内视频| 国产欧美va欧美va香蕉在| 国产亚洲欧美一区二区| 禁久久精品乱码| 亚洲黄色片网站| 日韩香蕉视频| 亚洲欧美日韩爽爽影院| 久久精品99国产精品| 亚洲欧洲一区二区在线观看| 亚洲精品乱码久久久久久| 99视频有精品| 性欧美大战久久久久久久久| 久久久亚洲高清| 欧美好骚综合网| 国产精品国码视频| 国内在线观看一区二区三区| 亚洲国产精品一区二区第一页 | 亚洲视频视频在线| 欧美一区二区高清| 亚洲精品自在在线观看| 午夜精品久久久久99热蜜桃导演| 久久精品麻豆| 欧美精品久久一区二区| 国产精品日韩在线播放| 曰韩精品一区二区| 99re6这里只有精品视频在线观看| 亚洲影院在线观看| 亚洲国产欧美另类丝袜| 中文成人激情娱乐网| 久久精品主播| 欧美日韩亚洲天堂| 国产日韩欧美二区| 亚洲精品久久久久久久久久久久久 | 国产精品国产精品| 精品成人久久| 亚洲深夜福利视频| 久久精品水蜜桃av综合天堂| 亚洲视频观看| 久久综合久久综合久久综合| 欧美午夜大胆人体| 一区二区三区中文在线观看| 中文一区在线| 亚洲精选中文字幕| 久久精品中文| 国产精品久久久久av| 亚洲大胆av| 欧美一级视频精品观看| 国产精品99久久久久久人| 美女诱惑一区| 国产日韩欧美一区二区| 99热在这里有精品免费| 亚洲国产精品一区二区www| 午夜精品区一区二区三| 欧美日韩ab| 1024欧美极品| 久久er99精品| 羞羞答答国产精品www一本| 欧美激情精品久久久久久蜜臀| 国产深夜精品福利| 亚洲午夜91| 一本大道久久精品懂色aⅴ| 麻豆九一精品爱看视频在线观看免费| 国产精品你懂的| 日韩香蕉视频| 99精品国产一区二区青青牛奶| 久久久久免费视频| 国产精品外国| 亚洲无吗在线| 亚洲性xxxx| 欧美日韩一区二区在线观看 | 亚洲裸体视频| 欧美成人官网二区| 黄色亚洲精品| 欧美在线影院| 久久精品国产免费观看| 国产精品日日摸夜夜摸av| 一区二区三区高清在线| 99视频一区二区| 欧美韩日精品| 亚洲肉体裸体xxxx137| 亚洲国产老妈| 久久视频在线免费观看| 国产亚洲欧美另类中文 | 亚洲国产高潮在线观看| 久久国产视频网| 国产亚洲毛片在线| 欧美亚洲一区二区在线| 欧美一区二区三区日韩| 国产精品永久| 欧美一级黄色录像| 久久国产主播| 好吊色欧美一区二区三区四区 | 午夜免费电影一区在线观看| 国产精品久久久久av| 亚洲一区二区三区在线播放| 亚洲欧美日韩国产| 国产精品美女久久久| 亚洲一级在线观看| 午夜欧美精品久久久久久久| 国产精品色网| 午夜亚洲激情| 久久影院午夜论| 亚洲高清视频在线观看| 亚洲精品在线一区二区| 欧美日韩久久久久久| 亚洲视频一区在线观看| 欧美一区二区免费视频| 国产一级一区二区| 久久精品人人做人人综合| 免费h精品视频在线播放| 亚洲国产精品久久久久秋霞蜜臀| 亚洲美女中文字幕| 欧美日韩一区二区免费在线观看| 一区二区三区欧美视频| 香蕉成人久久| 韩国av一区二区三区| 91久久午夜| 欧美日韩一级黄| 亚洲综合三区| 久久中文在线| 日韩网站在线| 欧美一区二区三区久久精品茉莉花| 国产亚洲精品福利| 亚洲日本在线视频观看| 欧美日本三区| 亚洲欧美日韩精品在线| 久热这里只精品99re8久| 亚洲国产精品va在线观看黑人| av不卡免费看| 国产欧美精品一区二区三区介绍| 久久国内精品自在自线400部| 欧美黄在线观看| 一区二区三区四区国产| 欧美中文字幕视频| 亚洲国产精品黑人久久久| 亚洲综合成人在线| 国模 一区 二区 三区| 99热这里只有精品8| 国产精品天美传媒入口| 亚洲国产精品激情在线观看| 欧美午夜视频在线观看| 欧美影院精品一区| 欧美久久视频| 欧美一区二区三区四区在线观看| 欧美a级片一区| 亚洲摸下面视频| 欧美风情在线| 午夜视频久久久| 欧美女同视频| 久久福利影视| 国产精品电影在线观看| 亚洲黄色一区二区三区| 欧美新色视频| 亚洲国产成人在线播放| 国产精品久久一级| 亚洲国产婷婷综合在线精品| 国产精品久久久久久久久免费桃花 | 亚洲最新色图| 好吊妞**欧美| 午夜国产精品影院在线观看| 在线观看一区二区精品视频| 午夜欧美精品久久久久久久| 亚洲三级视频在线观看| 久久精品人人| 亚洲视屏在线播放| 欧美国产日本| 午夜日韩在线| 国产精品理论片| 一本色道久久88综合日韩精品| 国内精品久久久久久久97牛牛| 亚洲欧美清纯在线制服| 亚洲精品日韩综合观看成人91|