2021年5月22日土曜日

USB HID-UARTブリッジ CH9350を使ってみる

秋月新商品で、CH340でおなじみWCH製、
USB HID-UART相互変換ブリッジICが出ていました。

USBマウス・キーボード用シリアル通信制御IC 
CH9350L: 半導体 秋月電子通商-電子部品・ネット通販
https://akizukidenshi.com/catalog/g/gI-16308/
 
早速先週末店頭で購入したので試してみます。
USB HIDホストになるUSBポート、USB HIDスレーブ(デバイス)になるUSBポート、
UARTのTx/Rxが付いています。

KVM Switch用に使うことが想定されているようで
このIC同士をシリアルで結ぶと、片方のホスト端子に繋いだUSBキーボードを、
もう片方のスレーブ端子につないだUSBコネクタでPCと接続させることができます。
[キーボード]--USB-->[Rx IC]--UART-->[Tx IC]--USB-->[PC]
という構図です。UARTをバススイッチで切り替えるのは容易ですし、
PCにはHIDとして認識させたまま切り離すとかできそうなのでKVMには最適ですね。
さらに、RS-422ドライバを載せたりすると相当延長できそうですよね。
そんなICです。

本来の使い方ではありませんが、UARTの通信を読めれば、
汎用のUSB HID-UARTとして、
マイコンに、面倒なSPI接続のUSBホストICを繋いだりせず
USBキーボードを接続できるのではと思い買ってみました。


データシート通りにこんな感じの配線で仮組みしてみました。
電源はUSBプラグからVBUSを入力、
ボタンを押しながらUSB接続するとUSBスレーブモード、
何もせずつなぐと電源供給のみで、USB HID to UARTブリッジとして動きます。

電源を入れて、USBキーボードとUSB-UART変換をつなぎ、
Tera TermのデバッグモードでUART出力をバイナリ表示してみるとこんな感じでした。


何も入力していないとき、
0x57 0xAB 0x82 0xA3
が繰り返し流れています。
入力すると、こんな感じのフォーマットでキー入力が拾えることがわかりました。


中国語データシートでなかなか読むのが難しく、詳しくは調べておらず、
現物合わせなのですが、Headersとなっている部分はおそらく状態表示も含んでいて、
微妙に変化があるかもしれませんが、
8バイト目から13バイト目にキー入力が表示されていました。
キー入力のフォーマットは、USB HID仕様の、Usage IDが表示されているようです。

何も入力していなくてもダーっと0x57 0xAB 0x82 0xA3が流れていて、
目で追うのは大変なのでPython3でパーサーを作りました。

押したキーがUsage IDのテーブルを参照して文字で表示できるようになっています。



おまけでNum Lock、Caps Lock、Scroll LockのLEDの制御ギミックも入れています。
これって、キーボードが状態を保持しているんじゃなくてホスト側からの司令で
点いていたんだなぁという発見がありました。(何もしないと点かない)

M5Stackなどの画面付きマイコンボードで文字入力をするのには、GROVEコネクタ1本で
かなり楽ちんに接続できてよさそうです。ぜひ一度お試しください。