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キーボードを接続できるのではと思い買ってみました。
とりあえず買ってみた pic.twitter.com/VUN22zY3LS
— じてんしゃっぷ (@jitenshap) May 15, 2021
データシート通りにこんな感じの配線で仮組みしてみました。
電源はUSBプラグからVBUSを入力、
ボタンを押しながらUSB接続するとUSBスレーブモード、
何もせずつなぐと電源供給のみで、USB HID to UARTブリッジとして動きます。
電源を入れて、USBキーボードとUSB-UART変換をつなぎ、
Tera TermのデバッグモードでUART出力をバイナリ表示してみるとこんな感じでした。
ホスト側もなんか動いたっぽい。何もしなくてもダーってなんか流れてて、キー押すと加速する pic.twitter.com/rhBZTUV8Yq
— じてんしゃっぷ (@jitenshap) May 16, 2021
何も入力していないとき、
0x57 0xAB 0x82 0xA3
が繰り返し流れています。
入力すると、こんな感じのフォーマットでキー入力が拾えることがわかりました。
中国語データシートでなかなか読むのが難しく、詳しくは調べておらず、
現物合わせなのですが、Headersとなっている部分はおそらく状態表示も含んでいて、
微妙に変化があるかもしれませんが、
8バイト目から13バイト目にキー入力が表示されていました。
キー入力のフォーマットは、USB HID仕様の、Usage IDが表示されているようです。
何も入力していなくてもダーっと0x57 0xAB 0x82 0xA3が流れていて、
目で追うのは大変なのでPython3でパーサーを作りました。
押したキーがUsage IDのテーブルを参照して文字で表示できるようになっています。
Lチカ pic.twitter.com/swAYrfeg1H
— じてんしゃっぷ (@jitenshap) May 22, 2021
おまけでNum Lock、Caps Lock、Scroll LockのLEDの制御ギミックも入れています。
これって、キーボードが状態を保持しているんじゃなくてホスト側からの司令で
点いていたんだなぁという発見がありました。(何もしないと点かない)
M5Stackなどの画面付きマイコンボードで文字入力をするのには、GROVEコネクタ1本で
かなり楽ちんに接続できてよさそうです。ぜひ一度お試しください。