USB HID 设备类协议入门

发布者:NexusDream最新更新时间:2016-08-05 来源: eefocus关键字: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 NONE
1 键盘
2 鼠标
3~255 保留

 

下面分别对这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
4 bCountryCode 1 数字 硬件目的国家的识别码(BCD码)(见表3)
5 bNumDescritors 1 数字 支持的附属描述符数目
6 bDescriptorType 1 常量 HID相关描述符的类型,取值见表5
7 wDescriptorLength 2 数字 报告描述符总长度
9 bDescriptorType 1 常量 用于识别描述符类型的常量,使用在有一个以上描述符的设备
10 wDescriptorLength 2 数字 描述符总长度,使用在有一个以上描述符的设备

 

 

表4、HID硬件目的国家识别码
识别码(十进制) 国家和地区   识别码(十进制) 国家和地区
00 不支持 18 Netherlands/Dutch
01 Arabic 19 Norwegian
02 Belgian 20 Persian (Farsi)
03 Canadian-Bilingual 21 Poland
04 Canadian-French 22 Portuguese
05 Czech Republic 23 Russia
06 Danish 24 Slovakia
07 Finnish 25 Spanish
08 French 26 Swedish
09 German 27 Swiss/French
10 Greek 28 Swiss/German
11 Hebrew 29 Switzerland
12 Hungary 30 Taiwan
13 International (ISO) 31 Turkish-Q
14 Italian 32 UK
15 Japan (Katakana) 33 US
16 Korean 34 Yugoslavia
17 Latin American 35 Turkish-F
    36~255 Reserved

 

 

表5、HID相关描述符类型定义
描述符类型值 HID相关描述符类型
0x21 HID描述符
0x22 报表描述符
0x23 实体描述符

 

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取值 含义   bDesignator取值 含义
0x00 0x15 小指
0x01 0x16
0x02 眼球 0x17
0x03 0x18 腰骨
0x04 眼皮 0x19
0x05 0x1A 大腿
0x06 0x1B 膝盖
0x07 0x1C 小腿
0x08 上唇 0x1D
0x09 下唇 0x1E
0x0A 0x1F 脚跟
0x0B 0x20 拇指
0x0C 上臂 0x21 大拇指
0x0D 手肘 0x22 第二指
0x0E 前臂 0x23 第三指
0x0F 手腕 0x24 第四指
0x10 手掌 0x25 小拇指
0x11 拇指 0x26
0x12 食指 0x27
0x13 中指 0x28~0xFF 保留
0x14 无名指    

 

 

表8、Qualifier取值含义
Qualifier取值 含义   Qualifier取值 含义
0x00 0x04 其中之一
0x01 0x05 中间
0x02 0x06 保留
0x03 两者同时 0x07 保留

 

四、USB HID类命令(请求)

  HID设备类特定的命令(请求)有6个,它们分别是Get_Report、Get_Idle、Get_Protocol、Set_Report、Set_Idle和Set_Protocol。

  HID类请求(命令)数据包格式如表8所示:

 

表9、HID类请求(命令)包格式
偏移量 大小 说明
0 bmRequestType 1

HID设备类请求特性如下:
位7:
0=从USB HOST到USB设备
1=从USB设备到USB HOST
位6~5:
01=请求类型为设备类请求
位4~0:
0001=请求对象为接口(interface)

因而,针对HID的设备类请求,仅仅10100001和00100001有效

1 bRequest 1 HID类请求(参考表9)
2 wValue 2 高字节说明描述符的类型(参考表5),而低字节为非0值时被用来选定实体描述符。
4 wIndex 2 2字节数值,根据不同的bRequest有不同的意义
6 wLength 2 该请求的数据段长度

 

 

表10、HID类请求
数值 HID类请求描述符 注释
0x01 GET_REPORT  
0x02 GET_IDLE  
0x03 GET_PROTOCOL 仅仅适应于支持启动功能的HID设备(Boot Device)
0x09 SET_REPORT  
0x0A SET_IDLE  
0x0B SET_PROTOCOL 仅仅适应于支持启动功能的HID设备(Boot Device)

 

  USB主机在请求HID设备的配置描述符时,设备首先返回的描述符为:配置描述符、接口描述符、HID描述符、端点描述符。HID描述符里包含了其附属的描述的类型和长度(如报告描述符),然后主机再根据HID描述符的信息请求其相关的描述符。

关键字:USB  HID  设备类协议 引用地址:USB HID 设备类协议入门

上一篇:USB接口介绍(下)
下一篇:前置USB接口的问题?

推荐阅读最新更新时间:2024-05-03 00:34

USB在PCR仪嵌入式系统中的应用
  0 引 言   聚合酶链反应(Polymerase Chain Reaction,PCR)是20世纪80年代中期发展起来的体外核酸扩增技术。该技术是分子生物学发展史上的一个里程碑,它使得DNA分子可以在生物体外进行放大扩增。在短短的数年内,这项技术已广泛应用于生命科学的研究中,对基因克隆、DNA序列分析等现代分子生物学技术的发展起到了重要的作用。我国目前使用的PCR仪主要依赖于进口,为了在该技术领域追赶国际先进水平,与海尔集团联合对PCR仪进行了开发研究。   随着U盘的普遍使用和USB技术的嵌入式系统应用,方便用户进行程序修改和程序的存储,PCR设计中采用可以热插拔的USB接口,即在PCR硬件系统中加入了USB主控芯
[嵌入式]
基于USB接口的嵌入式无线传输系统设计
  基于USB接口的嵌入式无线传输系统设计在涉及通信接口时,为了解决PC机串口和并口严重不足的问题以及方便仪器设备之间的连接,提出了无线传输技术和USB接口相结合的方案。无线传输和USB接口在各自的应用领域都不再是新概念,但将两者相结合确是一个较为独特的设计创新。   1 系统结构总体设计   整个设计主要实现基于USB接口的数字无线RF发送与接收,系统结构设计如图1所示,可分为3大部分:无线RF电路、微控制器电路、USB接口电路。   无线RF电路的主要功能是将从微控制器送来的数据按照预设的调制格式送到天线激励电磁波发射,并将从天线接收到的调制信号解调得到基带信号,再送给微控制器。微控制器(AT89C51)电路是整个设
[嵌入式]
电源小贴士:使用USB Type-C端口进行电力共享
USB Type-C 功率输出(Power Delivery,PD)标准允许在任何地方通过一个USB Type-C端口输送7.5W (5V, 1.5A)至100W (10V, 5A) 的功率。但在任一特定系统内,可用的输入功率总是受限的。那么在多端口系统中,应该如何在不同端口之间进行功率分配呢? 一种显而易见的电力共享方法是限制每个端口的功率,从而确保输出的总功率不超过输入功率。但在这种情况下,由于功率被平均分配到各个端口中,插入系统的任何器件都无法充分利用可用的输入功率。 另一种方法是为其中一个端口提供高功率输出,但对其余端口的供电实行严格限制。采用这种方法,可以让用户对功率较大的电子设备进行快速充电。但是,大多数用户不
[电源管理]
电源小贴士:使用<font color='red'>USB</font> Type-C端口进行电力共享
手机USB充电所面临的绿色挑战
    谁能想到手机产业会影响环境?当你在思考如何减少生态污染时,想到的可能是改变汽车设计,或使用绿色能源,根本不会是手机。然而,我们确实看到 手机充电器 对环境造成了很大的影响。手机行业已经开始使用 通用充电解决方案 (UCS)来解决这个问题,UCS将改变手机制造商设计手机的方式。本文将对实现安全充电接口需要考虑的因素加以分析。     一个手机用户一年会产生约17公斤的二氧化碳,相当于汽车行驶111公里。这个数字不是很大,在保护环境方面似乎不是优先考虑的对象。然而,如果换一个角度看,你会发现,去年全球手机出货量达12亿部,每一部手机都有自己专用的充电器。在这12亿部手机中,估计有5亿部是替代性手机。拿到一部新手机通常都
[电源管理]
手机<font color='red'>USB</font>充电所面临的绿色挑战
Diodes 公司将符合汽车规格的双通道译码器用于 USB PD 3.1 SPR、PPS 和 QC 协定
Diodes 公司将符合汽车规格的双通道译码器用于 USB PD 3.1 SPR、PPS 和 QC 协定 【2022 年 12 月 14 日美国德州普拉诺讯】 Diodes 公司 (Nasdaq:DIOD) 针对车内预装 USB 充电快速增加的各种机会,推出高度整合的双通道 USB Type-C® 协议译码器。 AP43776Q 支持 USB 电力传输 (PD) 3.1 标准功率范围 (SPR) 和可程序电源 (PPS),以及 Quick Charge™ QC5 快充协议。此产品亦支持旧型电池充电 (BC) 1.2,对多端口车用 USB 装置充电系统中的表现优化。 AP43776Q 内建的微控制器单元 (MCU) 附
[模拟电子]
Diodes 公司将符合汽车规格的双通道译码器用于 <font color='red'>USB</font> PD 3.1 SPR、PPS 和 QC 协定
SIMCom发布两款EDGE无线模块方案
  SIMCom近期推出了二款EDGE无线模块解决方案:SIM700、SIM700D。SIM700 EDGE无线模块是四频 GSM/GPRS/EDGE 的解决方案,采用板对板连接方式,具有工业标准接口,可传输数据、语音、短消息、传真等特点。SIM700满足多种工业应用产品的设计需求。SIM700D EDGE无线模块在同一平台上,采用SMT贴片封装,其紧凑的设计可以灵活地应用于各种产品方案中,如PC卡、Express卡、USB调制解调器、手持设备和M2M应用等等。   SIMCom为客户提供从产品定义、设计到生产的本地技术支持,帮助客户加速产品上市进程。    SIM700模块具备以下主要特性   GSM/GPRS/EDGE
[手机便携]
网络启动再进化,亚信USB以太网iPXE方案全新登场
亚信电子USB 以太网 iPXE 解决方案,将先进的iPXE网络启动技术集成到亚信最新USB以太网芯片产品应用中,提供用户更强大、更灵活、与高效率的iPXE网络启动再进化新体验。 亚信电子(ASIX Electronics Corporation) 今天宣布推出最新的「USB以太网iPXE解决方案」,透过将先进的iPXE网络启动技术集成到亚信USB以太网芯片产品应用中,为用户提供更强大、更灵活、与高效率的iPXE网络启动再进化新体验。 此方案可支持亚信电子最新的USB以太网芯片,包括AX88279、AX88179B/AX88179A/AX88179,以及AX88772E/AX88772D等。 (图一)亚信电子U
[网络通信]
网络启动再进化,亚信<font color='red'>USB</font>以太网iPXE方案全新登场
linux USB 摄像头 驱动 移植,使用
1、USB摄像头的配置 UVC,全称为:USB video class 或USB video device class,是Microsoft与另外几家设备厂商联合推出的为USB视频捕获设备定义的协议标准,目前已成为USB org标准之一。 如今的主流操作系统(如Windows XP SP2 and later, Linux 2.4.6 and later, MacOS 10.5 and later)都已提供UVC设备驱动,因此符合UVC规格的硬件设备在不需要安装任何的驱动程序下即可在主机中正常使用。使用UVC技术的包括摄像头、数码相机、类比影像转换器、电视棒及静态影像相机等设备 下面就开始配置UVC的linux驱动。
[单片机]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved