透過ESP32S2的USB Host模擬HID Keyboard輸入. ... 是從influxdb客戶端輸入,似乎也不是我要的;scrapemetrics是從網頁傳資料,感覺也不太是,所以是line protocol?) ... <看更多>
usb hid傳資料 在 [USB] 用HIDLibrary進行電腦和裝置的HID通訊(使用Robird G31 ... 的美食出口停車場
(1) HIDLibrary是一個開源程式,這裡用的是由Mike O'Brien和Austin Mullins所開發的函式庫,利用C#程式開發而成。 ... <看更多>
usb hid傳資料 在 USB HID EP0 Control Transfer - 看板ASM - 批踢踢實業坊 的美食出口停車場
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
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.221.214
... <看更多>