《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 業界動態 > 通用串行總線(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红桃一区二区小说| 欧美h视频在线| 亚洲国产高清一区二区三区| 亚洲特级毛片| 亚洲另类自拍| 亚洲国产日韩欧美在线图片| 激情校园亚洲| 激情一区二区三区| 国内偷自视频区视频综合| 国产欧美在线视频| 国产女精品视频网站免费 | 欧美色另类天堂2015| 欧美日韩高清在线一区| 欧美日韩午夜精品| 欧美少妇一区二区| 国产精品乱码| 国产毛片精品国产一区二区三区| 国产精品嫩草99a| 国产精品爽爽ⅴa在线观看| 国产欧美日韩亚洲| 国产在线精品一区二区中文| 国产手机视频精品| 狠狠狠色丁香婷婷综合激情| 揄拍成人国产精品视频| 亚洲国产专区| 亚洲最新视频在线播放| 亚洲欧美精品中文字幕在线| 小黄鸭精品aⅴ导航网站入口| 欧美亚洲在线视频| 亚洲福利视频免费观看| 最新成人av网站| 正在播放欧美一区| 西西裸体人体做爰大胆久久久 | 久久国产精品一区二区| 久久久久女教师免费一区| 久久综合色播五月| 欧美国产成人精品| 欧美手机在线视频| 国产日韩在线视频| 亚洲电影在线播放| 一区二区日韩免费看| 香蕉久久a毛片| 亚洲欧洲中文日韩久久av乱码| 99视频精品全部免费在线| 亚洲视频www| 久久动漫亚洲| 欧美激情a∨在线视频播放| 国产精品成人av性教育| 国内精品福利| 亚洲日本中文| 亚洲自拍三区| 亚洲精品美女在线观看播放| 亚洲主播在线播放| 玖玖精品视频| 国产精品啊啊啊| 精品96久久久久久中文字幕无| 99国产精品99久久久久久| 午夜国产精品视频免费体验区| 91久久国产精品91久久性色| 亚洲一级二级| 免费不卡在线观看av| 国产精品国产三级欧美二区| 伊甸园精品99久久久久久| 一区二区三区日韩| 亚洲电影免费在线观看| 亚洲在线一区二区| 欧美成人午夜激情| 国产精品专区h在线观看| 亚洲片在线观看| 欧美在线|欧美| 亚洲一区二区动漫| 欧美电影在线| 国产婷婷色一区二区三区四区| 亚洲人成网站色ww在线| 久久精品青青大伊人av| 亚洲免费小视频| 欧美成人一区二区三区| 国产婷婷精品| 国产精品99久久久久久久女警| 亚洲欧洲精品成人久久奇米网| 欧美一区二区大片| 欧美人成在线| 亚洲成人直播| 欧美一区二区三区四区在线| 欧美日韩国产精品一区二区亚洲| 国产精品一香蕉国产线看观看 | 亚洲国产日韩美| 小嫩嫩精品导航| 欧美日韩一区二区在线播放| 在线播放日韩专区| 欧美伊人久久久久久午夜久久久久 | 欧美一区二区三区精品| 欧美日韩一区二区高清| 在线免费观看成人网| 欧美一区视频在线| 欧美在线不卡| 国产精品久久久久久亚洲毛片 | 国产精品久久久久久模特| 亚洲欧洲免费视频| 亚洲激情一区二区三区| 久久久午夜电影| 国产麻豆午夜三级精品| 亚洲伊人伊色伊影伊综合网| 亚洲在线电影| 欧美视频福利| 一本色道88久久加勒比精品| 一本一本久久a久久精品综合妖精| 欧美成人69av| 1000精品久久久久久久久| 久久成人久久爱| 久久久久久久激情视频| 国产在线播放一区二区三区| 性做久久久久久| 欧美在线免费| 国产香蕉久久精品综合网| 午夜视频在线观看一区二区三区| 午夜精品美女久久久久av福利| 欧美三区在线视频| 99天天综合性| 亚洲一区二区精品| 国产精品久久久久久久久久妞妞| 亚洲视频在线观看网站| 亚洲免费在线观看视频| 国产精品久久久久久影视| 亚洲色图自拍| 欧美一区1区三区3区公司| 国产精自产拍久久久久久| 午夜精品久久久久久| 久久精品免费| 韩国v欧美v日本v亚洲v| 久久精品国产99精品国产亚洲性色| 久久久久久久久综合| 韩国女主播一区二区三区| 亚洲第一色在线| 欧美gay视频| 日韩视频免费看| 亚洲免费婷婷| 国产亚洲va综合人人澡精品| 久久精品国产视频| 欧美黄色精品| 国产精品99久久久久久久久| 欧美在线日韩在线| 精久久久久久久久久久| a4yy欧美一区二区三区| 国产精品久久久久av免费| 午夜激情亚洲| 女女同性女同一区二区三区91| 亚洲精品乱码久久久久久蜜桃91| 亚洲天堂网在线观看| 国产精自产拍久久久久久| 亚洲高清在线观看| 欧美日产一区二区三区在线观看 | 午夜视频一区在线观看| 美女脱光内衣内裤视频久久影院| 亚洲精品男同| 欧美一区二区观看视频| 在线日韩精品视频| 亚洲愉拍自拍另类高清精品| 国产一区二区三区在线观看免费视频 | 久久精品国产欧美亚洲人人爽| 欧美韩日视频| 亚洲影院在线观看| 老鸭窝91久久精品色噜噜导演| 亚洲精品婷婷| 欧美专区在线观看| 亚洲国产天堂久久国产91| 亚洲欧美国产精品桃花| 伊人久久综合97精品| 亚洲午夜av电影| 国外精品视频| 亚洲午夜精品网| 国内精品久久久久影院 日本资源| 亚洲人久久久| 国产精品自在欧美一区| 亚洲精品色婷婷福利天堂| 国产精品乱码| 亚洲精品日产精品乱码不卡| 国产精品亚洲а∨天堂免在线| 亚洲黄色免费| 国产精品久久久爽爽爽麻豆色哟哟| 久久精品99国产精品| 欧美视频一区二区三区四区| 欧美一区二区三区另类| 欧美日本一区| 亚洲国产成人tv| 国产精品女主播一区二区三区| 亚洲国产专区校园欧美| 国产精品午夜电影| 亚洲最黄网站| 欲香欲色天天天综合和网| 性刺激综合网| 99精品欧美一区二区蜜桃免费| 久久精品一区二区国产| 一区二区欧美日韩| 欧美高清视频一二三区| 久久av最新网址| 国产精品三级视频| 一区二区三区精密机械公司| 一色屋精品亚洲香蕉网站| 欧美在线看片a免费观看|