USB HID EP0理论上可以每 1ms传送 64B (B for Byte, b for bit)
等于是 64KBps, 用 UART来传需要 640,000bps才作得到,
这个是 full speed device就有的,现在有提供 USB interface
的 MCU几乎都有做到 full speed.
我实作了一个,测出 58KBps,很可能是受到 CPU忙碌程度的影响?
也许是软件效率不够高?
为什么不用 UART? 因为 COM Port 需要安装 driver,而 HID 几乎
所有的 OS都不用安装 driver, 起码主流的那几个都不需要。
如果你作的系统经常会拿到新电脑上使用,用这招比随身带着
FT232R driver package方便多了 :)
所以我实作的东西,报给 OS的是 HID Keyboard, 但实际上是一个
MCU + ADC for sensors. 既然没有keyboard的部分,所以回报 keyboard
的 firmware code都不用写了。
比较麻烦的是软件的部分,COM Port的应用程式在这边相对简单,
就是百年不变的写法,但 HID会需要一些很底层的 API, 如果不想
锻炼那样深的功力,可以直接使用网络上的资源,最有名的是 libusb。
还有很多个人分享的 DLL可以使用。
其实写一次就知道了,几乎各家 DLL的程序都差不多,首先要找到 device,
比对 PID, VID, 确认你要的 device, 执行 endpoint0 上的
SetFeature, GetFeature。前者是传资料给 device, 后者是传资料给host (PC)
firmware上实作Set Feature, Get Feature, 才能跟software配合上。
以上做完后,你就可以用 USB标准协定传资料了。
补充一下,这样做其实开发阶段很不方便,一旦你用 break point停止 MCU
工作,理论上不会回应 USB了,所以 Host可能直接把装置断线,resume MCU后
又要重来一次 USB enumeration... 所以开发时候把 UART拉出来,走
USB + UART + JTAG 三重路线也不错啦 orz