其实我对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 Confi