格安USBホストIC(CH559)を試す

2020-03-15TechCH559, Embedded, Japanese

簡単にUSBホスト機能を自作のプロジェクトに追加できる方法を知ったので紹介したいと思います。

背景

開発中のFamily mrubyというプロジェクトの基板で、PS/2キーボードを使用しているのですが、最近ではPS/2キーボードを購入することもなかなか難しいので、USBキーボードに対応したいと考えていました。

マイコンと連携させやすいUSBキーボード、USB HIDデバイスへの対応方法としては以下のような事例があります。

USBホストシールドはMAX3421EというICを使用しており、SPIで制御します。

PICを使用する場合、検索するといくつか作例が出てきます。

Family mrubyに搭載しようとした場合、ESP32の空きピンがほとんどないため、SPIで直接制御ができず、間に別の制御マイコンを挟む必要があり、困っていました。一応試作はしてみたものの、まだうまく動かせていないです。

PICの場合は、ソフトの書き込みにライターが必要になるとの、開発環境を整えるのが億劫で敬遠してました。

そんな中、CH559というICがいけてそうという情報を見つけました。

CH559とは

USBホスト(+デバイス)機能を備えたICです。

内部にはE8051が搭載されており、プログラムを書き込んで実行させることができます。(ROM 64KB、RAM 6KB)

ICをUSBデバイスとして認識させることで、ライター不要で、PC直結でソフトの書き込みを行うことができます。

価格はLCSCでひとつ120円程度(10個買いの場合)。(2020/3/14時点)

MAX3421Eと比較すると1/3程度でした。(MAX3421EはDigiKeyで探すと更に高いです)

クロックの外付けなし、プログラムの実行機能までオールインワンなので、安くてお手軽で言うことなしです。

ESP32で色々な作品を作ってる、bitluniさんと、atc1441さんが協力して、使いやすい環境をgithubに提供してくれています。以下の動画を参照ください。

試してみる

実際にLCSCから購入して、実験してみました。

開発環境は、atc1441さんが、githubに準備してくれています。

本家の環境の使い方を把握するには、中国語のデータシートを読み解いたりする必要があってかなりハードル高いのですが、Windowsでコンパイルするために必要なものが一式そろえてくれていて大変たすかります。

https://github.com/atc1441/CH559sdccUSBHost

データシートの英訳をしてくれている方もいます。

https://github.com/kprasadvnsi/CH559_Doc_English

CH559T
CH559T on a breakout board

USBのマウスを接続して、入力を読み取った結果をUARTでESP32に送るサンプルを動かしてみます。

Readmeを参考にドライバをインストールして、手元の環境に合わせてバッチファイルを手直しすれば動くかと思います。

Wired CH559
Wired CH559
Simple UART test
Simple UART test

以下がESP32がUARTで受け取ったログです。

Result of sample code
Result of sample code

マウスを接続したところ、ちゃんと入力を拾っていることが確認できました。

ただし本格的に使用する場合、ディスクリプタの解析は更に作り込み必要です。USBのディスクリプタの解析部分は、Arduinoシールドのようにライブラリがあるわけではないので、自分でデバイスに合わせてなんとかする必要があります。このあたりも今後、ライブラリを作る人が増えると、より嬉しいですね。

いずれにせよ、ICとコンデンサ少し追加するだけで、USBデバイスを色々利用できるになるのは大変夢が広がります。

今後は、Family mrubyにPS/2の代わりにUSBコネクタを搭載したものを作成してみたいと思っています。(合わせてFabGLの入力部分の差し替えも行う必要あるので、けっこう大掛かりな修正になります)