USB接口HID设备说明书.docx
- 文档编号:26783763
- 上传时间:2023-06-22
- 格式:DOCX
- 页数:191
- 大小:365.80KB
USB接口HID设备说明书.docx
《USB接口HID设备说明书.docx》由会员分享,可在线阅读,更多相关《USB接口HID设备说明书.docx(191页珍藏版)》请在冰豆网上搜索。
USB接口HID设备说明书
第8章USB接口HID设备
HID(HumanInterfaceDevice,人机接口设备)是USB设备中常用的设备类型,是
直接与人交互的
本较低。
另外,
HID设备。
USB设备,例如键盘、鼠标与游戏杆等。
在
HID设备并不一定要有人机交互功能,只要符合
USB设备中,HID设备的成
HID类别规范的设备都是
Wndows操作系统最先支持的HID设备。
在windows98以及后来的版本中内置有HID设备的驱动程序,应用程序可以直接使用这些驱动程序来与设备通信。
在设计一个USB接口的计算机外部设备时,如果HID类型的设备可以满足需要,可以
将其设计为HID类型设备,这样可以省去比较复杂的USB驱动程序的编写,直接利用
Windows操作系统对标准的HID类型USB设备的支持。
8.1HID
设备简介
8.1.1HID设备的特点
交换的数据储存在称为报表(Report)的结构内,设备的固件必须支持HlD报表的
格式。
主机通过控制和中断传输中的传送和请求报表来传送和接收数据。
报表的格
式非常灵活。
每一笔事务可以携带小量或中量的数据。
低速设备每一笔事务最大是8B,全速设
备每一笔事务最大是64B,高速设备每一笔事务最大是1024B。
一个报表可以使用
多笔事务。
设备可以在未预期的时间传送信息给主机,例如键盘的按键或是鼠标的移动。
所以
主机会定时轮询设备,以取得最新的数据。
HID设备的最大传输速度有限制。
主机可以保证低速的中断端点每10ms内最多1
笔事务,每一秒最多是800B。
保证全速端点每lms一笔事务,每一秒最多是
64000B。
保证高速端点每125us一笔事务,每一秒最多是24.576MB。
HID设备没有保证的传输速率。
如果设备是设置在10ms的时距,事务之间的时间
可能等于或小于10ms。
除非设备是设置在全速时在每个帧传输数据,或是在高速
时在每个微帧传输数据。
这是最快的轮询速率,所以端点可以保证有正确的带宽可
供使用。
HID设备除了传送数据给主机外,它也会从主机接收数据。
只要能够符合HlD类别规
范的设备都可以是HID设备。
设备除了HlD接口之外,它可能同时还包含有其他的USB接口。
例如影像显示设备
可能使用HID接口来做亮度、对比度的软件控制,而使用传统的影像接口来传送要显示的
数据。
USB扩音器可以使用实时传输来播放语音,同时使用HID接口来控制音量、低音等。
HID类别设备的规范文件主要是以下两份:
DeviceClassDefinitionforHumaninterfaceDevices
HIDUsageTables
其中前者是HID的基本规范文件,后者可以是前者的附件,为开发人员提供实际的控
制类型的描述。
文件是用来定义让主机了解以及使用HID数据的数值。
这两份文件是由
USBDeviceWorkingGroup制定的,可以在网址http:
//www.usb.org/developers/hidpage/
#Class_Definition
下载。
计算机高级接口实践
8.1.2HID设备的硬件要求
HID接口必须符合DeviceClassDefinitionforHumaninterfaceDevices规范内所定
义的HID类别的需求。
在此文件内描述了所需的描述符、传输的频率以及传输的类型等。
为了符合规范,HID接口的端点与描述符都必须符合数个要求。
所有的HID传输都是使用默认控制管道或是一个中断管道,HID设备必须有一个中断
输入端点来传送数据到主机,中断输出端点则不是必需的。
主机
默认控制管道
外设
HID类别
HID类别
驱动程序
设备
中断管道
图8-1
HID传输的传输类型
表8-1
HID设备的传输类型
传输
数据来源
数据类型
是否需
类型
要管道
设备(输入)
没有严格时间限制的数据
是
控制
主机(输出)
没有严格时间限制的数据
或是没有中断输出管道时的任何数据
中断
设备(输入)
定时或低延迟的数据
是
主机(输出)
定时或低延迟的数据
是
主机与设备之间所交换的数据,可以分成两种类型:
低延迟的数据,必须尽快地到达目的;
配置或其他的数据,没有严格时间限制的需求。
中断管道是控制管道之外的另一种数据交换的方式,特别适合使用在接收端需要定时或是尽可能及时收到数据的时候。
中断输入管道携带数据到主机,中断输出管道则是携带数据到设备。
在总线忙的时候,控制管道可能会被延迟,而中断管道保证会有可得到的带宽。
HID不需要一定有中断输出管道。
如果没有中断输出管道,主机会在控制管道上使用HID设备特有的Set_Report请求来传送所有的报表。
8.1.3HID固件的要求
主机的驱动程序要与HID设备通信,设备的固件必须符合下列需求:
设备的描述符必须识别该设备包含有HID接口。
固件必须包含一个报表描述符来定义要传送与接收的设备数据。
如果要传送数据,固件必须支持Get_Report控制传输与中断输入传输。
如果要接收
数据,固件必须支持Set_Report控制传输与选择性的中断输出传输。
所有的HID数据都必须使用定义过的报表格式来定义报表中数据的大小与内容。
设备
可以支持一个或多个报表。
在固件中的一个报表描述符用来描述此报表,以及如何使用报
表数据的信息。
8章USB接口HID设备183
在每一个报表中的一个数值,定义此报表是一个输入(Input)、输出(Output)或是
特征(Feature)报表。
主机在输入报表中接收数据,在输出报表中传送数据,特征报表可
以在任何方向传递。
Windows98以及后来版本的HID驱动程序使用中断传输来传递输入报表。
输出报表
的传输类型要根据设备支持的端点与Windows的版本而定。
Windows98Gold只符合HID
1.0规范,它的HID驱动程序使用控制传输来传递输出报表。
Windows98SE、Wndows
2000符合HID1.1规范,HID驱动程序在有中断输出端点时使用中断传输,否则使用控制
传输来传递输出报表。
特征报表都是使用控制传输。
8.2HID设备描述符
HID设备连接到USB主机后,主机通过发送Get_Descriptor请求读取HID设备的描述符,了解描述符对了解USB设备是至关重要的。
8.2.1HID设备的描述符
HID设备除了支持USB设备的5种标准描述符之外,还支持HID设备特有的3种描述符。
这些描述符是:
USB标准描述符:
设备、配置、接口、端点和字符串描述符。
HID特有的描述符:
HID、报表(Report)和实体(Physical)描述符。
从描述符的关联关系看,HID描述符是关联于接口。
所以如果一个HID设备有2个端
点,设备不需要每个端点有一个HID描述符。
接口描述符
Interface
HID描述符端点描述符
HidEndpoint
HID、报表和实体描
报表描述符
实体描述符
述符是HID设备特
Report
Physical
有的描述符
图8-2
HID描述符的关联关系
从前面的USB描述符可以看出一个规律,描述符的第一、二字节分别是描述符的长
度和类型,描述符的类型字段(bDescriptorType)表明描述符的种类,下表列出了不同描
述符的类型字段数值。
表8-2HID的描述符
184
类型
标准
类别
HID
特定
计算机高级接口实践
描述符
应用
设备
Device
所有设备必须有,只能一个
配置
Configuration
所有设备必须有,至少一个
字符串
String
可选择
接口
Interface
每一个接口一个
端点
Endpoint
除端点0之外的每个端点一个
设备限定Device_Qualiffier
同时支持全速与高速的设备必须有
Other_Speed_Configuration
一个
Interface_power
HID
HID设备必须有
Hub
Report
HID设备必须有
报表
实体
Physical
可选择的
数
值
01
02
03
04
05
06
07
08
21
29
22
23
对于一个HID设备,设备描述符与配置描述符没有HID特定的信息。
其设备描述符的
bDeviceClass和bDeviceSubClass字段的值为0,接口描述符的bInterfaceClass字段值
为03,表示设备的该接口是HID类别。
在接口描述符中其他包含HID特定信息的字段还
有子类别码(blnterfaceSubClass)与协议码(blnterfaceProtocol字段)。
在接口描述符中子类别码字段等于1表示此设备支持启动接口(BootInterface)。
如
果设备有启动接口,即便主机的HID没有加载驱动程序,设备也可以使用。
这种情形可能
发生在计算机是由DOS直接启动,在启动时观看系统设置画面或使用Wndows的安全模
式时。
含有启动接口的键盘或鼠标可以使用BIOS或许多主机支持的默认简单协议。
HID规
范定义了键盘与鼠标的启动接口协议。
如果设备没有启动接口,并且接口描述符中协议码字段是1,表示设备支持键盘接口,
协议码字段是2,表示支持鼠标接口。
接口描述符中协议码字段是0,表示设备不支持启
动协议。
在HIDUsageTables规范中定义了键盘与鼠标的启动描述符(BootDescriptor)。
BIOS不需要从设备中读取描述符,因为它知道启动协议,并且假设设备支持启动协议。
所以要启动的设备不需要在固件内包含启动接口描述符,它只要在主机尚未要求在报表描
述符中的定义协议时支持启动协议即可。
在操作系统加载HlD驱动程序后会使用Set_Protocol请求,将设备由启动协议转换成报表协议。
8.2.2HID描述符
HID描述符的主要作用是用来识别HID通信所使用的额外描述符。
下表是HID描述符结构。
表8-3HID描述符结构
偏移
字段
字节
数值
说明
量
数
类型
0
bLength
1
Numeric
描述符字节数
1
bDescriptorType
1
Constant
0x21=HID描述符
2
bcdHID
2
Numeric
HID规范版本号(BCD)
4
bCountryCode
1
Numeric
硬件设备所在国家的国家代码
5
bNumDescriptors
1
Numeric
类别描述符数目(至少有一个报表描述符)
6
bDescriptorType
1
Constant
类别描述符的类型
7
wDescriptorLength
2
Numeric
报表描述符的总长度
第8章
USB
接口
HID
设备
185
9[bDescriptorType]...
10[wDescriptorLength]...
1
2
Constant
Numeric
附加的描述符的类型,可选的附加的描述符的总长度,可选的
BCD
bcdHID:
设备与其描述符所遵循的HID规范的版本号码,此数值是
格式字符。
例如版本1.1的bcdHID是0110h。
bCountryCode:
硬件目的国家的识别码。
如果不说明,该字段为
bDescriptorType:
HID描述符附属的描述符的类型(报表或实体)
4个16
0。
。
每一个
进位的
HID都
必须至少支持一个报表描述符。
一个接口可以支持多个报表描述符,以及一个或多个实体描述符。
HID
描述符的偏移量为
9和
10的
bDescriptorType
和
wDescriptorLength
可以重复存
在多个。
1.报表描述符
报表描述符定义了执行设备功能的数据格式和使用方法。
报表描述符和USB的其他描述符是不一样的,它不是一个简单的表格,报表描述符
是USB所有描述符中最复杂的。
报表描述符非常复杂而有弹性,因为它需要处理各种用途的设备。
报表的数据必须以简洁的格式来储存,这样才不会浪费设备内的储存空间以及数据传输时的总线时间。
实际上可以这样理解,报表内容的简洁,是通过报表描述符全面的、复杂的数据描述实现的。
报表描述符必须先描述数据的大小与内容。
报表描述符的内容与大小因设备的不同而不同,在进行报表传输之前,主机必须先请求设备的报表描述符,只有得到了报表描述符
才可正确解析报表的数据。
报表描述符是报表描述项目(Item)的集合,每一个描述项目都有相对统一的数据结构,项目很多,通过编码实现。
(1)项目
报表描述符由描述HID设备的数据项目(Item)组成,项目的第一个字节(项目前缀)由三部分构成,即项目类型(itemtype)、项目标志(itemtag)和项目长度(itemsize)。
其中项目类型说明项目的数据类型,项目标签说明项目的功能,项目长度说明项目的数据部分的长度。
HID的项目有短项目和长项目两种,其中短项目的格式如下图。
位序
7
6
5
43
2
1
0
字段
Data(可以是0、1、2、4个字节)
bTag
bTypebSize
图8-3HID报表短项目格式
短项目的数据字节数由bSize的值定义,bSize为0、1、2、3时
分别为0、1、2、4个字节。
短项目的项目类型由bType定义,bType
Data部分的字节数为0、1、2时分别
为Main、Global和Local类型。
长项目可以携带较多的数据,其格式如下图。
计算机高级接口实践
位序
76543210
字段
Data
bLongItemTag
bDataSize
11111110
字节数
1~255
1
1
1
图8-4
HID报表长项目格式
项目中的第一个字节为上图中的特定值时表明该项目是一个长项目。
长项目中的bDataSize说明Data部分的字节数,bLongItemTag在HID规范中没有定义。
下面是通过汇编实现的一个简单的报表描述符,描述符的每一行是一个项目,该描述符描述了一个从设备接收2个字节的输入报表和发送2个字节到设备的输出报表。
HID_Report_desc_table:
db06h,A0h,FFh
;UsagePage(Vendordefined)
定义设备功能
db09h,A5h
;Usage(VendorDefined)
定义用法
dbA1h,01h
;Collection(Application)
开一个集合
db09H,A6h
;
Usage(Vendordefined)
定义用法
;
输入报表
db09h,A7h
;
Usgae(Vendordefined)
定义用法
db15h,80h
;
LogicalMinimum
定义输入最小值=-128
db25h,7Fh
;
LogicalMaximum
定义输入最大值=+27
db75h,08h
;
ReportSize
定义报表数据项大小=8
db95h,02h
;
ReportCount
定义报表数据向个数=2
db81h,02h
;
Input(Data,Variable,Absolute)
输入项目
;
输出报表
db09h,A9h
;
Usgae(Vendordefined)
定义用法
db15h,80h
;
LogicalMinimum
定义输入最小值=-128
db25h,7Fh
;
LogicalMaximum
定义输入最大值=+27
db75h,08h
;
ReportSize
定义报表数据项大小=8
db95h,02h
;
ReportCount
定义报表数据向个数=2
db91h,02h
;
Output(Data,Variable,Absolute)
输出项目
dbC0h;EndCollection关闭集合
(2)项目的分类
报表的项目有Main、Global和Local三大类,每一类都有多个不同的项目,
实现不同
的描述。
Main类项目用于定义报表描述符中的数据项。
也可以组合其中的若干数据项成为一个
集合。
Main项目可以分为带数据的Main项目和不带数据的
Main项目。
带数据项的
Main
用于生成报表中的数据项,包括
Input、Output
和Feature
项目。
不带数据的Main
项目不
生成报表中的数据项,包括
Collection和EndCollection项目。
Global类项目实现对数据的描述,用来识别报表并且描述报表内的数据,包括数据的
功能、最大与最小允许值以及数据项的大小与数目等。
改变由
Main类项目生成的项目状
态表。
Global类项目描述对后续的所有项目有效,除非遇到有新的
Global类项目。
Local类项目定义控制的特征,这一类项目的作用域不超过下一个
Main项目,所以在
每一Main项目之前可能有多个
Local项目。
Local项目用于描述后面的Input、Output和
Feature项目。
第8章USB接口HID设备
187
下表列出的是全部的项目的前缀字和简要功能说明。
表8-4
项目
项目标志(Tag)
项目前缀,
类型
为数据长度
Input
100000nn
Main
Output
100100nn
类项Feature
101100nn
目
Collection
101000nn
EndCollection
110000nn
HID项目列表
nn
功能说明
定义输入报表,主机利用该信息解析设备提供的数据。
主机向控制端口发送Get_Report实现输入
创建输出报表,通过向设备发送Set_Report实现输出
定义送往设备的设置信息
定义2个以上数据(Input、Output和Feature)的关系为集合,Collection开始一个集合,之后的EndCollection结束集合。
Collection项目的数据部分说明Collection的类型
Global
类项
目
Local
类项
目
UsagePage
000001nn
LogicalMinimum
000101nn
LogicalMaximum
001001nn
PhysicalMinimum
001101nn
PhysicalMaximum
010001nn
UnitExponent
010101nn
Unit
011001nn
ReportSize
011101nn
ReportID
100001nn
ReportCount
100101nn
Push
101001nn
Pop
101101nn
110001nn
111101nn
Usage
000010nn
UsageMinimum
000110nn
UsageMaximum
001010nn
DesignatorIndex
001110nn
DesignatorMinimum
010010nn
DesignatorMaximum
010110nn
StringIndex
011110nn
StringMinimum
100010nn
StringMaximum
100110nn
Delimiter
101010nn
101010nn
111110nn
指定设备的功能
另外由于Usage项目有32位数据值,UsagePage项目用于为Usage项目在报表描述符中占居存储空间。
用于存放后续的Usage项目的高16位。
定义变量或数组项目的逻辑最小值和最大值
定义变量或数组项目的物理最小值和最大值,分别
和LogicalMinimum、LogicalMaximum对应
定义数值是基于10的指数
单位
指定报表数据区域所包含的位数
报表ID,该项目在报表中插入一个字节的报表ID
报表中数据域的数目
将Global项目状态表送入堆栈
从堆栈恢复Global项目状态表
–保留
用法索引值,表示对项目或集合建议的用法,用于当一个项目描述多个控制,对每一个变量和数组元素都有建议的用法
定义阵列或位图中控制操作的第一个和最后一个用法
确定用于控制的实体,指向物理描述符中的目标定义阵列或位图目标的起始和终止索引值
确定字符串描述符中的索引值
定义用于阵列或位图控制中字符串序列索引值的最小值和最大值
定义一组Local项目的开始和结束,1=开始,0=结束
–保留
在这些项目中,UsagePage
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- USB 接口 HID 设备 说明书