采用HID类的USB人机接口设计

网友投稿 386 2022-10-31

采用HID类的USB人机接口设计

USB设备及其驱动程序的复杂性给开发人员带来了很大的开发难度。本文给出一种采用C8051F120微控制器和PDIUSBD12 USB控制器结合的方式实现人机接口设备(Human Interface Devices)的方法,以及如何编写应用程序来对它进行访问。此设备无需编写USB设备驱动程序,Windows系统能够自动识别。

关键词 HID 人机接口设备 USB 描述符 中断传输 报告

1  HID协议简介

①  交换的数据存储在报告的结构内,设备必须支持HID报告格式。  ②  每笔事务可以携带小量或中量的数据。低速设备每笔事务最大为8字节,全速设备每笔最大为64字节,高速设备最大为1 024字节;  ③  有最大传输速度的限制。低速设备最快10 ms一笔事务,最高速度为800 B/s;全速设备最快1 ms一笔事务,最高速度为64 KB/s;高速设备最快125 μs一笔事务,最高速度为24.576 MB/s。  ④  没有传输速度的保证。

当插入USB设备后,主机会向设备请求各种描述符来识别设备。为了把一个设备识别为HID类别,设备在定义描述符的时候必须遵守HID规范。图1显示了HID各种描述符之间的关系。事实上,每个设备可以有多个接口描述符来实现多接口设备,而且每个接口描述符下应该有多个端点描述符。

从图1中可以看出,除了USB标准定义的一些描述符外,HID设备还必须定义HID描述符。另外设备和主机的通信是通过报告的形式来实现的,所以还必须定义报告描述符;而物理描述符不是必需的。还有就是HID描述符是关联于接口(而不是端点)的,所以设备不需要为每个端点都提供一个HID描述符。

USB设备有4种传输方式与主机进行通信: 控制方式、中断方式、批量方式和同步方式。每种方式都有它的应用领域。HID只支持控制和中断传输方式。如图2所示,HID设备必须要有默认的控制管道和一个中断输入端点;中断输出端点是可选的。

中断输出传输是USB1.1规范才有的内容,且必须获得Windows系统的支持。从Windows98 SE版本开始才支持中断输出传输方式,所以如果需要中断输出传输方式的设备应该选择相应的操作系统。表1列出了传输类型和相关情况。

USB协议定义了11种请求命令,通过这些请求来获得设备的信息及对设备进行设置。HID类设备除了要支持这11种标准的请求外,还要实现以下6种特定请求:

①  Get_Report——主机用控制传输从设备接收数据,所有HID类设备都要支持这个请求;  ②  Set_Report——设备用控制传输接收主机的数据,设备可以不支持此请求;  ③  Get_Idle——主机读取设备当前的空闲速率,设备可以不支持此请求;  ④  Set_Idle——设置闲置状态,设备可不支持此请求;  ⑤  Get_Protocol——主机获得设备的当前活动是引导协议还是报告协议;  ⑥  Set_Protocol——在引导协议和报告协议间切换,设备如果支持系统引导(如键盘和鼠标),就必须支持Get_Protocol和Set_Protocol请求。

2  HID接口固件设计与实现

该设备采用C8051F120微控制器和PDIUSBD12芯片来实现,如图3所示。

这样,后面数据的输入和输出都必须满足报告的格式才能够进行传输。

3  应用程序设计实现

Windows为应用程序访问HID设备提供了强大的支持,有一整套对HID设备进行访问的API。应用程序要访问设备就必须先枚举到设备,图4为应用程序枚举HID设备流程。

WriteFile的使用也同样要求异步操作,与ReadFile的使用差不多。

4  小结

充分利用PDIUSBD12主端口的双缓冲特性后,测试设备与PC间传输速度能达到8 KB/s以上,对于一些传输数据量不大,速度要求不高,而又必须在短时间内做出响应的场合基本能够满足要求。在此基础上只要生成不同的报告描述符,就能开发出各种不同的嵌入式设备;而且这样的设备无需驱动,在插入PC后就能立刻开始工作,省去了安装驱动程序的过程,方便使用。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:从零开始入门 K8s | 手把手带你理解 etcd
下一篇:spring boot如何配置静态路径详解(404出现的坑)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~