HID(Human Interface Device,人機接口設(shè)備)是USB設(shè)備中常用的設(shè)備類型,是直接與人交互的USB設(shè)備,例如鍵盤、鼠標與游戲桿等。在USB設(shè)備中,HID設(shè)備的成本較低。另外,HID設(shè)備并不一定要有人機交互功能,只要符合HID類別規(guī)范的設(shè)備都是HID設(shè)備。
Wndows操作系統(tǒng)最先支持的HID設(shè)備。在windows 98以及后來的版本中內(nèi)置有 HID設(shè)備的驅(qū)動程序,應(yīng)用程序可以直接使用這些驅(qū)動程序來與設(shè)備通信。
在設(shè)計一個USB接口的計算機外部設(shè)備時,如果HID類型的設(shè)備可以滿足需要,可以將其設(shè)計為HID類型設(shè)備,這樣可以省去比較復(fù)雜的USB驅(qū)動程序的編寫,直接利用Windows操作系統(tǒng)對標準的HID類型USB設(shè)備的支持。
HID設(shè)備的特點
- 交換的數(shù)據(jù)儲存在稱為報表(Report)的結(jié)構(gòu)內(nèi),設(shè)備的固件必須支持HlD報表的格式。主機通過控制和中斷傳輸中的傳送和請求報表來傳送和接收數(shù)據(jù)。報表的格式非常靈活。
- 每一筆事務(wù)可以攜帶小量或中量的數(shù)據(jù)。
低速設(shè)備每一筆事務(wù)最大是8B,一個報表可以使用多筆事務(wù)。
全速設(shè)備每一筆事務(wù)最大是64B
高速設(shè)備每一筆事務(wù)最大是1024B。
- 設(shè)備可以在未預(yù)期的時間傳送信息給主機,例如鍵盤的按鍵或是鼠標的移動。所以主機會定時輪詢設(shè)備,以取得最新的數(shù)據(jù)。
- HID設(shè)備的最大傳輸速度有限制。主機可以保證低速的中斷端點每10ms內(nèi)最多1筆事務(wù),每一秒最多是800B(8×100)。保證全速端點每lms一筆事務(wù),每一秒最多是64000B(64×1000)。保證高速端點每125 us三筆事務(wù),每一秒最多是24.576MB(1024×8000×3)。
- HID設(shè)備沒有保證的傳輸速率。如果設(shè)備是設(shè)置在10ms的時距,事務(wù)之間的時間可能等于或小于10ms。除非設(shè)備是設(shè)置在全速時在每個幀傳輸數(shù)據(jù),或是在高速時在每個微幀傳輸數(shù)據(jù)。這是最快的輪詢速率,所以端點可以保證有正確的帶寬可供使用。
HID設(shè)備除了傳送數(shù)據(jù)給主機外,它也會從主機接收數(shù)據(jù)。只要能夠符合HlD類別規(guī)范的設(shè)備都可以是HID設(shè)備。
設(shè)備除了HlD接口之外,它可能同時還包含有其他的USB接口。例如影像顯示設(shè)備可能使用HID接口來做亮度、對比度的軟件控制,而使用傳統(tǒng)的影像接口來傳送要顯示的數(shù)據(jù)。USB擴音器可以使用實時傳輸來播放語音,同時使用HID接口來控制音量、低音等。
HID類別設(shè)備的規(guī)范文
HID類別設(shè)備的規(guī)范文件主要是以下兩份:
- Device Class Definition for Human interface Devices
- HID Usage Tables
其中前者是HID的基本規(guī)范文件,后者可以是前者的附件,為開發(fā)人員提供實際的控制類型的描述。文件是用來定義讓主機了解以及使用HID數(shù)據(jù)的數(shù)值。這兩份文件是由 USB Device Working Group制定的,可以在網(wǎng)址http://www.usb.org 下載。
HID設(shè)備的硬件要求
HID接口必須符合Device Class Definition for Human interface Devices規(guī)范內(nèi)所定義的HID類別的需求。在此文件內(nèi)描述了所需的描述符、傳輸?shù)念l率以及傳輸?shù)念愋偷取榱朔弦?guī)范,HID接口的端點與描述符都必須符合數(shù)個要求。
所有的HID傳輸都是使用默認控制管道或是一個中斷管道,HID設(shè)備必須有一個中斷輸入端點來傳送數(shù)據(jù)到主機,中斷輸出端點則不是必需的。
傳輸類型 |
數(shù)據(jù)來源 |
數(shù)據(jù)類型 |
是否需要管道 |
控制 |
設(shè)備(輸入) |
沒有嚴格時間限制的數(shù)據(jù) |
是 |
|
主機(輸出) |
沒有嚴格時間限制的數(shù)據(jù) 或是沒有中斷輸出管道時的任何數(shù)據(jù) |
|
中斷 |
設(shè)備(輸入) |
定時或低延遲的數(shù)據(jù) |
是 |
|
主機(輸出) |
定時或低延遲的數(shù)據(jù) |
是 |
主機與設(shè)備之間所交換的數(shù)據(jù),可以分成兩種類型:
- 低延遲的數(shù)據(jù),必須盡快地到達目的;
- 配置或其他的數(shù)據(jù),沒有嚴格時間限制的需求。
中斷管道是控制管道之外的另一種數(shù)據(jù)交換的方式,特別適合使用在接收端需要定時或是盡可能及時收到數(shù)據(jù)的時候。中斷輸入管道攜帶數(shù)據(jù)到主機,中斷輸出管道則是攜帶數(shù)據(jù)到設(shè)備。在總線忙的時候,控制管道可能會被延遲,而中斷管道保證會有可得到的帶寬。HID不需要一定有中斷輸出管道。如果沒有中斷輸出管道,主機會在控制管道上使用HID設(shè)備特有的Set_Report請求來傳送所有的報表。
HID固件的要求
主機的驅(qū)動程序要與HID設(shè)備通信,設(shè)備的固件必須符合下列需求:
- 設(shè)備的描述符必須識別該設(shè)備包含有HID接口。
- 除了默認控制管道外,固件必須另外支持一個中斷輸入管道。
- 固件必須包含一個報表描述符來定義要傳送與接收的設(shè)備數(shù)據(jù)
如果要傳送數(shù)據(jù),固件必須支持Get_Report控制傳輸與中斷輸入傳輸。如果要接收數(shù)據(jù),固件必須支持Set_Report控制傳輸與選擇性的中斷輸出傳輸。
所有的HID數(shù)據(jù)都必須使用定義過的報表格式來定義報表中數(shù)據(jù)的大小與內(nèi)容。設(shè)備可以支持一個或多個報表。在固件中的一個報表描述符用來描述此報表,以及如何使用報表數(shù)據(jù)的信息。
在每一個報表中的一個數(shù)值,定義此報表是一個輸入(Input)、輸出(Output)或是特征(Feature)報表。主機在輸入報表中接收數(shù)據(jù),在輸出報表中傳送數(shù)據(jù),特征報表可以在任何方向傳遞。
Windows 98以及后來版本的HID驅(qū)動程序使用中斷傳輸來傳遞輸入報表。輸出報表的傳輸類型要根據(jù)設(shè)備支持的端點與Windows的版本而定。Windows 98 Gold只符合HID 1.0規(guī)范,它的HID驅(qū)動程序使用控制傳輸來傳遞輸出報表。Windows 98 SE、Wndows 2000符合HID 1.1規(guī)范,HID驅(qū)動程序在有中斷輸出端點時使用中斷傳輸,否則使用控制傳輸來傳遞輸出報表。特征報表都是使用控制傳輸。 |