USBホスト開発
Suzuno32RVの搭載しているCH32V203C8T6はUSBホスト機能にも対応しています。まだ記事や情報が少ないですが、発展的・応用的な使い方として、USBホスト機能にも挑戦してみましょう。
本ページでは、公式サンプルコードをもとにしたUSBキーボードの入力読み取りを解説します。
なおUSBデバイス開発で利用したTinyUSBは、本ページ執筆時点ではUSBホスト機能には対応していません。
公式サンプルコード
WCH提供のサンプルコードは、EVTパッケージ内 EVT/EXAM/USB/USBFS
にあります。”HOST_*” がUSBホスト機能のサンプル、DEVICE/
以下がUSBデバイス機能のサンプルです。
USBキーボードの読み取り、MTPデバイス接続、USBメモリ(マスストレージ)のアクセスなどができます。
公式サンプルコードはMounRiver Studio向けのプロジェクトです。必要なファイルのコピーやC++環境向けの改変をすることで、PlatformIOでビルド可能な場合もあります。
公式サンプルコード: https://github.com/openwch/ch32v20x/tree/main/EVT/EXAM/USB/USBFS
Arduinoでビルド可能なUSBキーボード→シリアル出力
公式サンプルコードをわたしが改変した、USBキーボード入力を読み取って情報をシリアルへ出力するコードです。Arduino IDEでビルドできます。
https://github.com/verylowfreq/arduino_ch32v203_uart_usbhost_keyboard
USBでのキーボードの入力読み取りは、ホスト側(ここではSuzuno32RV)が定期的にデータを要求し、接続されたキーボードが入力の状態を返答することで行なわれます。
ポートにキーボードが直接接続された場合と、USBハブを経由している場合で処理が若干異なるため、サンプルコードでは切り分けてコードが書かれています。
なお本コードは簡易的なものであり、入力が正常に読み取れないキーボードもあります。