当前位置: 网站首页 > 新闻技术 > 产品技术

USB HID 设备类协议入门

一、应用场合 USB HID 类是比较大的一个类,HID 类设备属于人机交互操作的设备。用 于控制计算机操作的一些方面,如 USB 鼠标,USB 键盘,USB 游戏操纵杆, USB 触摸板,USB 轨迹球、电话拨号设备、VCR 遥控等等设备。另外,使用 HID 设备的一个好处就是,操作系统自带了 HID 类的驱动程序,而用户无需去 开发很麻烦的驱动程序,只要直接使用 API 调用即可完成通信。所以很多简单 的 USB 设备,喜欢枚举成 HID 设备,这样就可以不用安装驱动而直接使用。
二、USB HID 类可采用的通信管道 所有的 HID 设备通过 USB 的控制管道(默认管道,即端点 0)和中断管道 与主机通信。 表 1、USB HID 规范定义的 HID 设备可用端点 管道 控制(端点 0) 中断输入 中断输出 要求 必须 必须 可选 说明 传输 USB 描述符、类请求代码以及供查询的消息数据等 传输从设备到主机的输入数据 传输从主机到设备的输出数据 控制管道主要用于以下 3 个方面: ? ? ? 接收/响应 USB 主机的控制请示及相关的类数据 在 USB 主机查询时传输数据(如响应 Get_Report 请求等) 接收 USB 主机的数据 中断管道主要用于以下两个方面: ? ? USB 主机接收 USB 设备的异步传输数据 USB 主机发送有实时性要求的数据给 USB 设备 从 USB 主机到 USB 设备的中断输出数据传输是可选的,当不支持中断输 出数据传输时,USB 主机通过控制管道将数据传输给 USB 设备。
三、与 USB HID 设备有关的描述符 HID 设备的描述符除了 5 个 USB 的标准描述符 (设备描述符、 配置描述符、 接口描述符、端点描述符、字符串描述符,见百合电子工作室的另一篇文章: USB 开发基础--USB 命令(请求)和 USB 描述符)外,还包括 3 个 HID 设 备类特定描述符:HID 描述符、报告描述符、实体描述符。 除了 HID 的三个特定描述符组成对 HID 设备的解释外,5 个标准描述符中 与 HID 设备有关的部分有: ? 设备描述符中 bDeviceClass、 bDeviceSubClass 和 bDeviceProtocol 三个字段的值必须为零。 接口描述符中 bInterfaceClass 的值必须为 0x03, bInterfaceSubClass 的值为 0 或 1,为 1 表示 HID 设备符是一个启动 设备(Boot Device,一般对 PC 机而言才有意义,意思是 BIOS 启动时 能识别并使用您的 HID 设备,且只有标准鼠标或键盘类设备才能成为 Boot Device。如果为 0 则只有在操作系统启动后才能识别并使用您的 HID 设备),bInterfaceProtocol 的取值含义如下表所示: 表 2、HID 接口描述符中 bInterfaceProtocol 的含义 ? bInterfaceProtocol 的取值(十进制) 0 1 2 3~255 含义 NONE 键盘 鼠标 保留 下面分别对这 3 个 HID 设备类特定描述符进行说明。 1、HID 描述符 HID 描述符关联于接口描述符,因而如果一个设备只有一个接口描述符, 则无论它有几个端点描述符,HID 设备只有一个 HID 描述符。HID 设备描述符 主要描述 HID 规范的版本号、HID 通信所使用的额外描述符、报表描述符的长 度等。表 2 所示为 HID 描述符的结构: 表 3、USB HID 类描述符的结构 偏移 量 0 域 bLength 大 小 1 值 描述 数 此描述符的长度(以字节为单位) 字 1 bDescriptorType 1 常 量 描述符种类(此处为 0x21 即 HID 类描述符) 2 bcdHID 2 数 HID 规范版本号(BCD 码),采用 4 个 16 进制的 BCD 格式编码, 字 如版本 1.0 的 BCD 码为 0x0100,版本为 1.1 的 BCD 码为 0x0110 数 字 数 字 常 量 数 字 常 量 数 字 硬件目的国家的识别码(BCD 码)(见表 3) 4 bCountryCode 1 5 bNumDescritors 1 支持的附属描述符数目 6 bDescriptorType 1 HID 相关描述符的类型,取值见表 5 7 wDescriptorLength 2 报告描述符总长度 9 bDescriptorType 1 用于识别描述符类型的常量,使用在有一个以上描述符的设备 10 wDescriptorLength 2 描述符总长度,使用在有一个以上描述符的设备 表 4、HID 硬件目的国家识别码 识别码(十进制) 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 国家和地区 不支持 Arabic Belgian Canadian-Bilingual Canadian-French Czech Republic Danish Finnish French German Greek Hebrew Hungary International (ISO) Italian Japan (Katakana) Korean 识别码(十进制) 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 国家和地区 Netherlands/Dutch Norwegian Persian (Farsi) Poland Portuguese Russia Slovakia Spanish Swedish Swiss/French Swiss/German Switzerland Taiwan Turkish-Q UK US Yugoslavia 17 Latin American 35 36~255 表 5、HID 相关描述符类型定义 Turkish-F Reserved 描述符类型值 0x21 0x22 0x23 HID 相关描述符类型 HID 描述符 报表描述符 实体描述符 2、报告描述符 HID 设备的报告描述符比较复杂也比较难理解。 报告描述符的语法不同于 USB 标准描述符,它是以项目(items)方式排 列而成,无一定的长度。HID 的报告描述符已经不是简简单单的描述某个值对 应某个固定意义了,它已经能够组合出很多种情况,并且需要 PC 上的 HID 驱 动程序提供 parser 解释器来对描述的设备情形进行重新解释,进而组合生成出 本 HID 硬件设备独特的数据流格式, 所以我觉得可以把它理解为“报告描述符脚 本语言”更为贴切。我们使用“报告描述符”专用脚本语言,让用户来自己定义他 们的 HID 设备都有什么数据、以及这些数据各个位(bit)都有什么意义。 有关报告描述符的详细信息可参考 USB HID 协议,USB 协会提供了一个 HID 描述符编辑工具称作 HID Descriptor Tool, 用它可方便生成我们的报告描述 符。 3、实体描述符 实体描述符被用来描述设备的行为特性。实体描述符是可选的描述符,HID 设备可以根据其本体的设备特性选择是否包含实体描述符。表 5 所示为 HID 的 实体描述符结构。 表 6、HID 实体描述符的结构 偏移量 0 域 bDesignator 大小 1 说明 用来指定本体的哪一部分影响项目(含义见表 6) 位指定标志 1 bFlags 1 位 0~4:Effort 位 5~7:Qualifier(含义见表 7) 表 7、bDesignator 取值含义表 bDesignator 取值 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F 0x10 0x11 0x12 0x13 0x14 含义 无 手 眼球 眉 眼皮 耳 鼻 嘴 上唇 下唇 颚 颈 上臂 手肘 前臂 手腕 手掌 拇指 食指 中指 无名指 bDesignator 取值 0x15 0x16 0x17 0x18 0x19 0x1A 0x1B 0x1C 0x1D 0x1E 0x1F 0x20 0x21 0x22 0x23 0x24 0x25 0x26 0x27 0x28~0xFF 含义 小指 头 肩 腰骨 腰 大腿 膝盖 小腿 足 脚 脚跟 拇指 大拇指 第二指 第三指 第四指 小拇指 眉 脸 保留 表 8、Qualifier 取值含义 Qualifier 取值 0x00 0x01 0x02 0x03 含义 无 右 左 两者同时 Qualifier 取值 0x04 0x05 0x06 0x07 含义 其中之一 中间 保留 保留 四、USB HID 类命令(请求) HID 设备类特定的命令(请求)有 6 个,它们分别是 Get_Report、 Get_Idle、Get_Protocol、Set_Report、Set_Idle 和 Set_Protocol。 HID 类请求(命令)数据包格式如表 8 所示: 表 9、HID 类请求(命令)包格式 偏移 量 域 大 小 说明 HID 设备类请求特性如下: 位 7: 0=从 USB HOST 到 USB 设备 1=从 USB 设备到 USB HOST 0 bmRequestType 1 位 6~5: 01=请求类型为设备类请求 位 4~0: 0001=请求对象为接口(interface) 因而,针对 HID 的设备类请求,仅仅 10100001 和 00100001 有效 1 2 4 6 bRequest wValue wIndex wLength 1 2 2 2 HID 类请求(参考表 9) 高字节说明描述符的类型(参考表 5),而低字节为非 0 值时被用来选定 实体描述符。 2 字节数值,根据不同的 bRequest 有不同的意义 该请求的数据段长度 表 10、HID 类请求 数值 0x01 0x02 0x03 0x09 0x0A 0x0B HID 类请求描述符 GET_REPORT GET_IDLE GET_PROTOCOL SET_REPORT SET_IDLE SET_PROTOCOL 仅仅适应于支持启动功能的 HID 设备(Boot Device) 仅仅适应于支持启动功能的 HID 设备(Boot Device) 注释 USB 主机在请求 HID 设备的配置描述符时,设备首先返回的描述符为:配 置描述符、接口描述符、HID 描述符、端点描述符。HID 描述符里包含了其附 属的描述的类型和长度(如报告描述符),然后主机再根据 HID 描述符的信息 请求其相关的描述符。

点击次数:  更新时间:2014-03-10 16:21:03  【打印此页】  【关闭
  • 门禁监控网 版权所有 2008-2016 京ICP备17017930-1
  • QQ:43645175 277727062 Email:mdza2008@163.com
  • 美国hid读卡器 hid控制器 hid感应卡