- 基本定义
- USB是一种通用的串行总线,它支持一个主机与一个或多个外设之间通信。采用串行数据传输通信协议。
- USBHID设备
- 定义:USBHID是USB设备中的一大类,即Human Interface Devices,人机接口设备。它主要用于人与计算机进行交互,并且是USB最早支持的一类设备。HID设备支持低速、全速、高速三种设备。由于HID设备要求用户输入能够得到及时响应,故其传输方式通常采用“中断方式”。
在USB协议中,HID设备的定义放置在接口描述符中,USB的设备描述符和配置描述符中不包含HID设备信息。因此,对于某些特定的HID设备,可以做HID复合设备,所谓的复合设备就是具有两个独立的USB设备功能,但是集中在同一个硬件上的USBHID设备。可参考此链接《https://blog.csdn.net/gd6321374/article/details/79919917》
- 项目中为什么使用?
- 无需安装驱动就能交互,硬件接口方便;
- 通信简单,主要用于数据量小,传输速率低延迟的场景。
- HID设备的特点
- 数据交互存储在报表结构内,主机通过控制和中断传输方式请求收发数据。
- 适用于小量和中量的数据传输。低速每一笔事务最大8b,全速最大64B,高速最大1024B。
- 设备可以在未预期的时间传输信息给主机。(可采用轮询方式获取新数据)
- HID设备的最大传输速度有限制。主机低速设备中断断点每10ms内最多1笔事务,每秒最多800B;全速断点每1ms一笔事务,每一秒最多64000B;高速断点每125us三笔事务,每秒最多是24.576MB。
- HID设备没有保证的传输速率。
- HID设备的硬件要求
- 符合Device Class Definition for Human interface Devices(https://www.usb.org/documents?search=&items_per_page=50&page=2)
- 所有HID传输都是默认控制或中断传输,HID设备必须有中断输入端点来传送数据到主机。
- 控制(Control)传输主要用于以下3个方面:
- 接收和响应USB控制和类数据的请求;
- HID类驱动程序轮询时传输数据(使用Get_Reportrequest);
- 主机接收数据。
- 中断传输主要用于2个方面
- 主机接收设备的异步传输数据;
- 主机发送有实时性要求的数据给设备。
HID设备类一般配置数据传输端点为中断传输,由于USB不支持硬件中断,所以USB的中断传输实际上是主机在一定的时间内不断地轮询设备检查其是否有数据需要传输,有3个重要参数需要在端点描述符中进行配置:
- 传输类型
- 轮询时间间隔
- 每次传输的最大数据包大小
而轮询的周期非常重要,太低数据可能会流失;太高又会占去太多的总线带宽。对于全速设置(12Mbps)而言,端点可以设定 1ns至255ms之间的轮询间隔。因此,换算可得全速设备的最快轮询速度为IKHz。另外对于低速设备而言,仅能设定10ms至255ms的轮询间隔,如果因为错误而发生传送失败的话,可以在下一个轮询期间重新再传送一次。
- HID固件要求
- 设备固件必须符合下列要求:
- 设备描述符必须识别该设备包含有 HID 接口(描述符);
- 除了默认控制管道外,固件必须另外支持一个中断输入管道;
- 固件必须包含一个报表描述符来定义要传送与接收的设备数据。
- 传输数据要求
- 固件必须支持 Get_Report 控制传输与中断输入传输,Set_Report 控制传输与选择性的中断输出传输;
- 所有的HID数据都必须使用定义过的报告描述符格式来定义数据的大小与内容。