其实我对USB还是很有感情的,第一个USB是2005年给航天智通的彩票机做一个客户显示系统,就是彩票机上那个给买彩票的人看的小显示器。之前他们用的是串口,后来很多机器串口少了,而且串口一般还要给POS机之类的其他终端使用,因此需要做这么一个模块。不过当时由于初次做USB, 而且还要写Linux和Windows下的驱动,当时觉得还是用自定义的设备,使用Bulk传输比较简单,最后在AN2131(Cypress)上做了这个项目,大概卖了一千多套,后来被人山寨了,前前后后也赚了点钱,也算是为清苦的研究生生活添加了一点精彩。
其实这个项目完全可以使用HID来实现,估计这样驱动的工作还会更简单些,至少不用下载WinDriver和DDK这种庞然大物了。其实很多MSP430和8051F的仿真器就有使用HID协议的,使用这个协议最大的优点就是不用写驱动,用Windows和Linux自带的驱动即可。其实HID的枚举方式和自定义的差别并不是很大,一般都是先Get Device Descriptor,然后是Get Configuration Descriptor,然后可能会发起多个重复的Device Descriptor和Configuration Descriptor,不过长度可能有点差异,总之就是从Descriptor开头取需要的长度返回就OK了。 如果有String的话还会发起Get String Descriptor。对于HID来讲,跟HID Class相关的是会发起Get HID Report的请求,其大概过程如下(........... 表示省略):
20.0 CTL 80 06 00 02 00 00 ff 00 Get Configuration Descriptor
20.0 DI 09 02 29 00 01 01 00 a0 c8 09 04 00 ........... 返回Configuration
00 0a 07 05 02 03 40 00 0a
38.0 CTL 80 06 00 01 00 00 12 00 Get Device Descriptor
38.0&nb

本文回顾了一个基于USB的项目,探讨了如何使用HID(Human Interface Device)协议简化驱动开发,特别是强调了HID Report Descriptor的重要性和作用。通过列举枚举过程,解释了设备如何响应Get HID Report请求,并介绍了用于测试HID设备的VB6和VC6测试程序的修改与使用方法。
最低0.47元/天 解锁文章
4万+

被折叠的 条评论
为什么被折叠?



