HID规范
+ -

HID 简介

2021-04-30 21723 133

 HID(Human Interface Device,人机接口设备)是USB设备中常用的设备类型,是直接与人交互的USB设备,例如键盘、鼠标与游戏杆等。在USB设备中,HID设备的成本较低。另外,HID设备并不一定要有人机交互功能,只要符合HID类别规范的设备都是HID设备。

  Wndows操作系统最先支持的HID设备。在windows 98以及后来的版本中内置有 HID设备的驱动程序,应用程序可以直接使用这些驱动程序来与设备通信。1601133666495

  在设计一个USB接口的计算机外部设备时,如果HID类型的设备可以满足需要,可以将其设计为HID类型设备,这样可以省去比较复杂的USB驱动程序的编写,直接利用Windows操作系统对标准的HID类型USB设备的支持。

HID设备的特点

  • 交换的数据储存在称为报表(Report)的结构内,设备的固件必须支持HlD报表的格式。主机通过控制和中断传输中的传送和请求报表来传送和接收数据。报表的格式非常灵活。
  • 每一笔事务可以携带小量或中量的数据。

    低速设备每一笔事务最大是8B,一个报表可以使用多笔事务
    全速设备每一笔事务最大是64B
    高速设备每一笔事务最大是1024B。

  • 设备可以在未预期的时间传送信息给主机,例如键盘的按键或是鼠标的移动。所以主机会定时轮询设备,以取得最新的数据。
  • HID设备的最大传输速度有限制。主机可以保证低速的中断端点每10ms内最多1笔事务,每一秒最多是800B(8×100)。保证全速端点每lms一笔事务,每一秒最多是64000B(64×1000)。保证高速端点每125 us三笔事务,每一秒最多是24.576MB(1024×8000×3)。
  • HID设备没有保证的传输速率。如果设备是设置在10ms的时距,事务之间的时间可能等于或小于10ms。除非设备是设置在全速时在每个帧传输数据,或是在高速时在每个微帧传输数据。这是最快的轮询速率,所以端点可以保证有正确的带宽可供使用。

HID设备除了传送数据给主机外,它也会从主机接收数据。只要能够符合HlD类别规范的设备都可以是HID设备。

设备除了HlD接口之外,它可能同时还包含有其他的USB接口。例如影像显示设备可能使用HID接口来做亮度、对比度的软件控制,而使用传统的影像接口来传送要显示的数据。USB扩音器可以使用实时传输来播放语音,同时使用HID接口来控制音量、低音等。

HID类别设备的规范文

HID类别设备的规范文件主要是以下两份:

  • Device Class Definition for Human interface Devices
  • HID Usage Tables

其中前者是HID的基本规范文件,后者可以是前者的附件,为开发人员提供实际的控制类型的描述。文件是用来定义让主机了解以及使用HID数据的数值。这两份文件是由 USB Device Working Group制定的,可以在网址http://www.usb.org 下载。

HID设备的硬件要求

HID接口必须符合Device Class Definition for Human interface Devices规范内所定义的HID类别的需求。在此文件内描述了所需的描述符、传输的频率以及传输的类型等。为了符合规范,HID接口的端点与描述符都必须符合数个要求。

所有的HID传输都是使用默认控制管道或是一个中断管道,HID设备必须有一个中断输入端点来传送数据到主机,中断输出端点则不是必需的。

HID设备的硬件要求

传输类型 数据来源 数据类型 是否需要管道
控制 设备(输入) 没有严格时间限制的数据
主机(输出) 没有严格时间限制的数据 或是没有中断输出管道时的任何数据
中断 设备(输入) 定时或低延迟的数据
主机(输出) 定时或低延迟的数据

主机与设备之间所交换的数据,可以分成两种类型:

  • 低延迟的数据,必须尽快地到达目的;
  • 配置或其他的数据,没有严格时间限制的需求。

  中断管道是控制管道之外的另一种数据交换的方式,特别适合使用在接收端需要定时或是尽可能及时收到数据的时候。中断输入管道携带数据到主机,中断输出管道则是携带数据到设备。在总线忙的时候,控制管道可能会被延迟,而中断管道保证会有可得到的带宽。HID不需要一定有中断输出管道。如果没有中断输出管道,主机会在控制管道上使用HID设备特有的Set_Report请求来传送所有的报表。

HID固件的要求

 主机的驱动程序要与HID设备通信,设备的固件必须符合下列需求:

  • 设备的描述符必须识别该设备包含有HID接口。
  • 除了默认控制管道外,固件必须另外支持一个中断输入管道。
  • 固件必须包含一个报表描述符来定义要传送与接收的设备数据

  如果要传送数据,固件必须支持Get_Report控制传输与中断输入传输。如果要接收数据,固件必须支持Set_Report控制传输与选择性的中断输出传输。

  所有的HID数据都必须使用定义过的报表格式来定义报表中数据的大小与内容。设备可以支持一个或多个报表。在固件中的一个报表描述符用来描述此报表,以及如何使用报表数据的信息。

  在每一个报表中的一个数值,定义此报表是一个输入(Input)、输出(Output)或是特征(Feature)报表。主机在输入报表中接收数据,在输出报表中传送数据,特征报表可以在任何方向传递。

  Windows 98以及后来版本的HID驱动程序使用中断传输来传递输入报表。输出报表的传输类型要根据设备支持的端点与Windows的版本而定。Windows 98 Gold只符合HID 1.0规范,它的HID驱动程序使用控制传输来传递输出报表。Windows 98 SE、Wndows 2000符合HID 1.1规范,HID驱动程序在有中断输出端点时使用中断传输,否则使用控制传输来传递输出报表。特征报表都是使用控制传输。

HID人机交互QQ群:564808376    UAC音频QQ群:218581009    UVC相机QQ群:331552032    BOT&UASP大容量存储QQ群:258159197    STC-USB单片机QQ群:315457461    USB技术交流QQ群2:580684376    USB技术交流QQ群:952873936   

0 篇笔记 写笔记

Windows下枚举系统中所有HID设备
Windows下对任何设备,文件的打开都是通过CreateFile来实现的,不过要打开一个设备得首先知道设备或文件名。由上节可知道,对于HID设备,都会注册一个接口类型为{2ACCFE60-C130-11D2-B082-00A0C91EFB8B}的GUID。我们可以通过Setup系列函数枚举出系统中......
HID 设置协议SetProtocol
SetProtocol用于设置ID设备的协议值。对于USB引导设备,该协议是必须对;对于非引导设备,是可选的。详见:USB请求bmRequestType(1):0x21bRequest(1): SetProtocol,值为0bwValue(2):数据为0表示引导协议,为1表示报告协议。wInd......
HID 设置报告请求SetReport
SetReport请求用于主机向设备发送报告请求。详见:USB请求bmRequestType(1):0x21bRequest(1): SET_REPORT,值为09.wValue(2):高字节报告类型,低字节为报告ID.01:表示输入报告02: 表示输出报告03: 表示特定报告wIndex......
HID 触摸屏的报表描述符
讲道理,这个触摸屏的报告描述符是我从网上搜索的一段代码,这个触摸屏的报告内容本人也进行了测试。测试是通过本站编写的虚拟触摸屏驱动实现的。0x05, 0x0d, // USAGE_PAGE (Digitizers) 0 0x......
HID 简介
 HID(Human Interface Device,人机接口设备)是USB设备中常用的设备类型,是直接与人交互的USB设备,例如键盘、鼠标与游戏杆等。在USB设备中,HID设备的成本较低。另外,HID设备并不一定要有人机交互功能,只要符合HID类别规范的设备都是HID设备。  Wndows操作系......
HID 体系结构
Windows 中的 HID 驱动程序堆栈的体系结构基于名为 hidclass.sys 的类驱动程序。 客户端和传输微型驱动程序从用户模式或内核模式下访问的类驱动程序。HID类驱动程序在系统提供的 HID 类驱动程序是 WDM 功能驱动程序和总线驱动程序 HID 设备安装程序类 (HIDClass)......
HID 报表描述符数字显示实例
USAGE_PAGE (Alphnumeric Display) 05 14USAGE (Alphanumeric Display) 09 01LOGICAL_MINIMUM (0) 15 00 CO......
HID键盘设备数据抓包分析实践
本文使用 Bus Hound 工具对 USB HID 设备数据包进行分析,并结合官方手册及网上文章进行整理。在进行数据分析前,我们先回顾一下USB相关的基础知识。USB描述符USB 主机是通过各种描述符来识别设备的,有设备描述符,接口描述符,端点描述符,字符描述符,报告描述符(HID)等。和普通的......
USB复合HID设备报告描述符的区分
在USB规范中,设备的功能是通过接口来承载的,在USB规格书中就是接口描述符。对于一般的设备,一般一个接口就是一个功能,这个功能可以是鼠标,键盘或其它设备类型。当然这个只是对USB简易设备而言的,对于一些USB复杂设备如UVC摄像头,UAC音频等是多接口相互配合来实现其功能的,为了整合这么多接口使......
HID 设备描述符关系
HID设备连接到USB主机后,主机通过发送Get_Descriptor请求读取HID设备的描述符,了解描述符对了解USB设备是至关重要的。HID设备的描述符HID设备除了支持USB设备的5种标准描述符之外,还支持HID设备特有的3种描述符。这些描述符是:USB标准描述符:设备描述符、配置描述符、......
HID描述符
HID描述符的主要作用是用来识别HID通信所使用的额外描述符。下表是HID描述符结构。偏移量字段字节数数值类型说明0bLength1Numeric描述符字节数1bDescriptorType1Constant0x21 = HID描述符2bcdH......
HID报告描述符详解
HID的报告描述符和其它描述符不一样,不是具有固定的数据结构,而是由固件开发商根据上报的数据自行组装的。这个组装的原材料是HID规范定义的ITEM。所以说HID报告描述符就像搭积木一样,其最终的数据结构和设计图纸是什么,都是由固件开发商决定的,但是其最终的产品又是由HID规范提供的各个标准积木模块搭......
HID 报表描述符远程控制实例
USAGE_PAGE (Consumer Devices) 05 0CUSAGE (Consumer Control) 09 01COLLECTION (Application) A1 01 ......
HID 报表描述符键盘实例
通过下面的报告描述符的定义,我们根据上面的注释可知,包含一个中断输入报表描述符和一个中断输出报告描述符。其中断输入报告描述符用于USB HID键盘中断输入端点,输出报表描述符用于USB HID键盘中断输出端点。USB HID键盘的中断输入报告对于中断输入端点,数据格式定义如下:BYTE0:该字......
USB通用父驱动usbccgp.sys的过滤UVC摄像头、UAC麦克风和HID设备硬件ID
激动的心情,无溢言表。。虽然只是一个很简单的东西。。但相于折腾了这么久,还是很开心的了。最近有个需求,功能是这样的:有一个USB复合设备,连接到windows系统中它在windows下的设备树如下:USB Composite Device(usbccgp.sys)UVC CameraUAC ......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!