USBHID协议中文版__USB接口HID设备.docx
《USBHID协议中文版__USB接口HID设备.docx》由会员分享,可在线阅读,更多相关《USBHID协议中文版__USB接口HID设备.docx(49页珍藏版)》请在三一办公上搜索。
1、第8章 USB接口HID设备HID(Human Interface Device,人机接口设备)是USB设备中常用的设备类型,是直接与人交互的USB设备,例如键盘、鼠标与游戏杆等。在USB设备中,HID设备的成本较低。另外,HID设备并不一定要有人机交互功能,只要符合HID类别规范的设备都是HID设备。 Wndows操作系统最先支持的HID设备。在windows 98以及后来的版本中内置有 HID设备的驱动程序,应用程序可以直接使用这些驱动程序来与设备通信。在设计一个USB接口的计算机外部设备时,如果HID类型的设备可以满足需要,可以将其设计为HID类型设备,这样可以省去比较复杂的USB驱动程
2、序的编写,直接利用Windows操作系统对标准的HID类型USB设备的支持。8.1 HID设备简介8.1.1 HID设备的特点 交换的数据储存在称为报表(Report)的结构内,设备的固件必须支持HlD报表的格式。主机通过控制和中断传输中的传送和请求报表来传送和接收数据。报表的格式非常灵活。 每一笔事务可以携带小量或中量的数据。低速设备每一笔事务最大是8B,全速设备每一笔事务最大是64B,高速设备每一笔事务最大是1024B。一个报表可以使用多笔事务。 设备可以在未预期的时间传送信息给主机,例如键盘的按键或是鼠标的移动。所以主机会定时轮询设备,以取得最新的数据。 HID设备的最大传输速度有限制。
3、主机可以保证低速的中断端点每10ms内最多1笔事务,每一秒最多是800B。保证全速端点每lms一笔事务,每一秒最多是64000B。保证高速端点每125 us三笔事务,每一秒最多是24.576MB。 HID设备没有保证的传输速率。如果设备是设置在10ms的时距,事务之间的时间可能等于或小于10ms。除非设备是设置在全速时在每个帧传输数据,或是在高速时在每个微帧传输数据。这是最快的轮询速率,所以端点可以保证有正确的带宽可供使用。HID设备除了传送数据给主机外,它也会从主机接收数据。只要能够符合HlD类别规范的设备都可以是HID设备。设备除了HlD接口之外,它可能同时还包含有其他的USB接口。例如影
4、像显示设备可能使用HID接口来做亮度、对比度的软件控制,而使用传统的影像接口来传送要显示的数据。USB扩音器可以使用实时传输来播放语音,同时使用HID接口来控制音量、低音等。HID类别设备的规范文件主要是以下两份: Device Class Definition for Human interface Devices HID Usage Tables其中前者是HID的基本规范文件,后者可以是前者的附件,为开发人员提供实际的控制类型的描述。文件是用来定义让主机了解以及使用HID数据的数值。这两份文件是由 USB Device Working Group制定的,可以在网址http:/www.usb
5、.org/developers/hidpage/ #Class _Definition下载。8.1.2 HID设备的硬件要求HID接口必须符合Device Class Definition for Human interface Devices规范内所定义的HID类别的需求。在此文件内描述了所需的描述符、传输的频率以及传输的类型等。为了符合规范,HID接口的端点与描述符都必须符合数个要求。所有的HID传输都是使用默认控制管道或是一个中断管道,HID设备必须有一个中断输入端点来传送数据到主机,中断输出端点则不是必需的。HID类别驱动程序HID类别设备主机外设默认控制管道中断管道图8-1 HID传
6、输的传输类型表8-1 HID设备的传输类型传输类型数据来源数据类型是否需要管道控制设备(输入)没有严格时间限制的数据是主机(输出)没有严格时间限制的数据或是没有中断输出管道时的任何数据中断设备(输入)定时或低延迟的数据是主机(输出)定时或低延迟的数据是主机与设备之间所交换的数据,可以分成两种类型: 低延迟的数据,必须尽快地到达目的; 配置或其他的数据,没有严格时间限制的需求。中断管道是控制管道之外的另一种数据交换的方式,特别适合使用在接收端需要定时或是尽可能及时收到数据的时候。中断输入管道携带数据到主机,中断输出管道则是携带数据到设备。在总线忙的时候,控制管道可能会被延迟,而中断管道保证会有可
7、得到的带宽。HID不需要一定有中断输出管道。如果没有中断输出管道,主机会在控制管道上使用HID设备特有的Set_Report请求来传送所有的报表。8.1.3 HID固件的要求主机的驱动程序要与HID设备通信,设备的固件必须符合下列需求: 设备的描述符必须识别该设备包含有HID接口。 除了默认控制管道外,固件必须另外支持一个中断输入管道。 固件必须包含一个报表描述符来定义要传送与接收的设备数据。如果要传送数据,固件必须支持Get_Report控制传输与中断输入传输。如果要接收数据,固件必须支持Set_Report控制传输与选择性的中断输出传输。所有的HID数据都必须使用定义过的报表格式来定义报表
8、中数据的大小与内容。设备可以支持一个或多个报表。在固件中的一个报表描述符用来描述此报表,以及如何使用报表数据的信息。在每一个报表中的一个数值,定义此报表是一个输入(Input)、输出(Output)或是特征(Feature)报表。主机在输入报表中接收数据,在输出报表中传送数据,特征报表可以在任何方向传递。Windows 98以及后来版本的HID驱动程序使用中断传输来传递输入报表。输出报表的传输类型要根据设备支持的端点与Windows的版本而定。Windows 98 Gold只符合HID 1.0规范,它的HID驱动程序使用控制传输来传递输出报表。Windows 98 SE、Wndows 2000
9、符合HID 1.1规范,HID驱动程序在有中断输出端点时使用中断传输,否则使用控制传输来传递输出报表。特征报表都是使用控制传输。8.2 HID设备描述符HID设备连接到USB主机后,主机通过发送Get_Descriptor请求读取HID设备的描述符,了解描述符对了解USB设备是至关重要的。8.2.1 HID设备的描述符HID设备除了支持USB设备的5种标准描述符之外,还支持HID设备特有的3种描述符。这些描述符是: USB标准描述符:设备、配置、接口、端点和字符串描述符。 HID特有的描述符:HID、报表(Report)和实体(Physical)描述符。从描述符的关联关系看,HID描述符是关联
10、于接口。所以如果一个HID设备有2个端点,设备不需要每个端点有一个HID描述符。图8-2 HID描述符的关联关系接口描述符Interface端点描述符EndpointHID描述符Hid报表描述符Report实体描述符PhysicalHID、报表和实体描述符是HID设备特有的描述符从前面的USB描述符可以看出一个规律,描述符的第一、二字节分别是描述符的长度和类型,描述符的类型字段(bDescriptorType)表明描述符的种类,下表列出了不同描述符的类型字段数值。表8-2 HID的描述符类型描述符应用数值标准设备 Device所有设备必须有,只能一个01配置 Configuration所有设备
11、必须有,至少一个02字符串 String可选择03接口 Interface每一个接口一个04端点 Endpoint除端点0之外的每个端点一个05设备限定 Device_Qualiffier同时支持全速与高速的设备必须有一个06Other_Speed_Configuration07Interface_power08类别HIDHID设备必须有21Hub29HID特定报表 ReportHID设备必须有22实体 Physical可选择的23对于一个HID设备,设备描述符与配置描述符没有HID特定的信息。其设备描述符的bDeviceClass和bDeviceSubClass字段的值为0,接口描述符的bI
12、nterfaceClass字段值为03,表示设备的该接口是HID类别。在接口描述符中其他包含HID特定信息的字段还有子类别码(blnterfaceSubClass)与协议码(blnterfaceProtocol字段)。在接口描述符中子类别码字段等于1表示此设备支持启动接口(Boot Interface)。如果设备有启动接口,即便主机的HID没有加载驱动程序,设备也可以使用。这种情形可能发生在计算机是由DOS直接启动,在启动时观看系统设置画面或使用Wndows的安全模式时。含有启动接口的键盘或鼠标可以使用BIOS或许多主机支持的默认简单协议。HID规范定义了键盘与鼠标的启动接口协议。如果设备没有
13、启动接口,并且接口描述符中协议码字段是1,表示设备支持键盘接口,协议码字段是2,表示支持鼠标接口。接口描述符中协议码字段是0,表示设备不支持启动协议。在 HID Usage Tables规范中定义了键盘与鼠标的启动描述符(Boot Descriptor)。BIOS不需要从设备中读取描述符,因为它知道启动协议,并且假设设备支持启动协议。所以要启动的设备不需要在固件内包含启动接口描述符,它只要在主机尚未要求在报表描述符中的定义协议时支持启动协议即可。在操作系统加载HlD驱动程序后会使用Set_Protocol请求,将设备由启动协议转换成报表协议。8.2.2 HID描述符HID描述符的主要作用是用来
14、识别HID通信所使用的额外描述符。下表是HID描述符结构。表8-3 HID描述符结构偏移量字段字节数数值类型说明0bLength1Numeric描述符字节数1bDescriptorType1Constant0x21 = HID描述符2bcdHID2NumericHID规范版本号(BCD)4bCountryCode1Numeric硬件设备所在国家的国家代码5bNumDescriptors1Numeric类别描述符数目(至少有一个报表描述符)6bDescriptorType1Constant类别描述符的类型7wDescriptorLength2Numeric报表描述符的总长度9bDescripto
15、rType.1Constant附加的描述符的类型,可选的10wDescriptorLength.2Numeric附加的描述符的总长度,可选的bcdHID:设备与其描述符所遵循的HID规范的版本号码,此数值是4个16进位的BCD格式字符。例如版本1.1的bcdHID是0110h。bCountryCode:硬件目的国家的识别码。如果不说明,该字段为0。bDescriptorType:HID描述符附属的描述符的类型(报表或实体)。每一个 HID都必须至少支持一个报表描述符。一个接口可以支持多个报表描述符,以及一个或多个实体描述符。HID描述符的偏移量为9和10的bDescriptorType和wDe
16、scriptorLength可以重复存在多个。1. 报表描述符报表描述符定义了执行设备功能的数据格式和使用方法。报表描述符和USB的其他描述符是不一样的,它不是一个简单的表格,报表描述符是USB所有描述符中最复杂的。报表描述符非常复杂而有弹性,因为它需要处理各种用途的设备。报表的数据必须以简洁的格式来储存,这样才不会浪费设备内的储存空间以及数据传输时的总线时间。实际上可以这样理解,报表内容的简洁,是通过报表描述符全面的、复杂的数据描述实现的。报表描述符必须先描述数据的大小与内容。报表描述符的内容与大小因设备的不同而不同,在进行报表传输之前,主机必须先请求设备的报表描述符,只有得到了报表描述符才
17、可正确解析报表的数据。报表描述符是报表描述项目(Item)的集合,每一个描述项目都有相对统一的数据结构,项目很多,通过编码实现。(1)项目报表描述符由描述HID设备的数据项目(Item)组成,项目的第一个字节(项目前缀)由三部分构成,即项目类型(item type)、项目标志(item tag)和项目长度(item size)。其中项目类型说明项目的数据类型,项目标签说明项目的功能,项目长度说明项目的数据部分的长度。HID的项目有短项目和长项目两种,其中短项目的格式如下图。Data (可以是0、1、2、4个字节)bTagbTypebSize7 6 5 4 3 2 1 0位序字段图8-3 HID
18、报表短项目格式短项目的数据字节数由bSize的值定义,bSize为0、1、2、3时Data部分的字节数分别为0、1、2、4个字节。短项目的项目类型由bType定义,bType为0、1、2时分别为Main、Global和Local类型。长项目可以携带较多的数据,其格式如下图。bDataSize1 1 1 1 1 1 1 07 6 5 4 3 2 1 0位序字段图8-4 HID报表长项目格式bLongItemTagData字节数1111255项目中的第一个字节为上图中的特定值时表明该项目是一个长项目。长项目中的bDataSize说明Data部分的字节数,bLongItemTag在HID规范中没有定
19、义。下面是通过汇编实现的一个简单的报表描述符,描述符的每一行是一个项目,该描述符描述了一个从设备接收2个字节的输入报表和发送2个字节到设备的输出报表。HID_Report_desc_table:db 06h, A0h, FFh; Usage Page(Vendor defined) 定义设备功能db 09h, A5h; Usage(Vendor Defined) 定义用法db A1h, 01h; Collection(Application) 开一个集合db 09H, A6h;Usage(Vendor defined) 定义用法;输入报表db 09h, A7h;Usgae(Vendor def
20、ined) 定义用法db 15h, 80h;Logical Minimum 定义输入最小值=-128db 25h, 7Fh;Logical Maximum 定义输入最大值=+27db 75h, 08h;Report Size 定义报表数据项大小=8db 95h, 02h;Report Count 定义报表数据向个数=2db 81h, 02h;Input(Data,Variable,Absolute) 输入项目;输出报表db 09h, A9h;Usgae(Vendor defined) 定义用法db 15h, 80h;Logical Minimum 定义输入最小值=-128db 25h, 7Fh
21、;Logical Maximum 定义输入最大值=+27db 75h, 08h;Report Size 定义报表数据项大小=8db 95h, 02h;Report Count 定义报表数据向个数=2db 91h, 02h;Output(Data,Variable,Absolute) 输出项目db C0h; End Collection 关闭集合(2)项目的分类报表的项目有Main、Global和Local三大类,每一类都有多个不同的项目,实现不同的描述。Main类项目用于定义报表描述符中的数据项。也可以组合其中的若干数据项成为一个集合。Main项目可以分为带数据的Main项目和不带数据的Mai
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- USBHID 协议 中文版 _USB 接口 HID 设备
链接地址:https://www.31ppt.com/p-1938223.html