USBホストシステムの試作 |
最近はUSBデバイス製作記事というのは珍しくなくなりましたが、今回は一般のスレーブ側のUSBデバイスではなく、ホスト、つまりPC側の役割を行うデバイスの製作を行ってみました。といっても、PCのように様々なデバイスをサポートするわけにもいきませんので、一般的なHIDデバイスの中でもUSBマウスとUSBキーボードの制御を行うものとし、アクアプラスで発売中の携帯ゲーム機であるP/ECEのデバイスプロキシ的な機能も織り込んでみることにしました。
1.設計仕様
仕様は冒頭にあるように、HIDデバイスとUSBハブに対応します。当たり前のことながら、USBの特徴であるプラグ&プレイに対応し、ダイナミックなデバイスの挿抜に対応できるようにします。 また、デバイスプロキシをサポートするということは、必然的にUSBデバイスを2つ以上つなげることを意味します。このため、HIDデバイスだけでなくUSBハブの制御機能も実装し、1ハブ、4デバイスまでをサポートするシステムとします。これにより、小規模ではありますが基本的な機能をほぼ含んだUSBホストシステムとなります。
|
2.使用したコントローラ
今回使用したコントローラはある方よりの頂き物なのです(^^; 実際のところ、かなり入手が難しいのでアレなんですが・・・。
●USBホスト/スレーブコントローラ ScanLogic SL811HST (silicon rev1.2)
このコントローラには以下のような特徴があります。
特にソフトウェアレベルではSOFパケットが自動生成されることで、比較的小規模のマイコンでもUSBホストを構成することが可能になっています。また、5Vインターフェイスに直結可能ですので、いろいろなマイコンで使用可能です。今回は、コントローラを制御するAVRマイコンを5V動作させています。
●コントロールCPU ATMEL AT90S8515−8PC
3.ハードウェアの構成
あんまり解説することもないのですが(^^; 単にコントローラとCPUをつなげて、USBトランシーバの入出力に一般的なUSBホストインターフェイスを構成しているだけです(^^; USBトランシーバの入出力には、普通のまともな機器であればフィルタがついているものですが、まぁ今回は趣味で作っただけですので(^^;
種類 | メーカー | 型番 |
---|---|---|
USBホストコントローラ | ScanLogic | SL811HST |
CPU | ATMEL | AT90S8515-8PC |
CMOS汎用 | 各社 | 74HC14 |
RS232Cレベルシフタ | AnalogDevices | ADM232A |
MOS-FET | NEC | 2SJ325 |
トランジスタ | ローム | DTC124XSA |
5.0Vレギュレータ | NS | LM3940CT |
3.3Vレギュレータ | NS | LM2940CT |
セラミック振動子 | ローム | CST4.912MT |
水晶振動子 | − | 12.000MHz |
ダイオード | 東芝 | 1S1588 |
4.ソフトウェアの構造
ファームウェアは先に説明したようにすべてアセンブラで記述されています。基本的な動作としては、HIDデバイスをタイマ割り込みで監視し、デバイスで要求されたインターバルでデバイスからデータを取得します。もし有効であれば、このデータをRS232C側にモニタとして出力します。
さらに、動作中はデータ線の状態を監視し、デバイスの挿入、または削除を検出すると、USBポートを初期化、デバイス列挙動作を行います。ハブが接続さえている場合には、ハブのポート状態を監視し、ポート状態に変更があれば、そのポートに接続されているデバイスの検出削除処理を行います。
このとき、接続されたデバイスがP/ECEであれば、内部デバイス管理変数にそのポートを登録して、他にHIDデバイスが存在すれば、そのデバイスから有効なデータが取得されたときに、同時にP/ECEに対してもそのデータを投げるというような処理を行っています。
これらの処理はすべて割り込みを使わず、ポーリングで実現しています。タイマ割り込みは、内部のデバイスごとに割り振られているカウンタ変数を減算する処理のみを行うようになっており、プログラムのメインループでは、カウンタ値が0になったかどうかをチェックして、0になったときに該当するデバイスの処理を行います。
※エラッタに関する注意(重要)
今回使用したホストコントローラのリビジョン1.3以下のバージョンには、USBハブの下にあるLSデバイス(1.5Mbps)から受信処理を行うとプリアンブルパケットを正常に処理できず、まともに制御できない状態になります。一応、ScanLogic社の出している回避策である程度は直りますが、たまにこけます(^^; そんなわけで、実際にまともに商品に使うのであれば、ハブをサポートしないか、あるいはリビジョン1.4以上のバージョンを使用する必要があります。
●USBホスト回路図、ファームウェア、P/ECEソースコード
●P/ECE側PROXY経由HIDデバイス接続での動作フロー
5.P/ECEのUSBスレーブデバイスPROXYデモ
|
6.製作を終えて。
USB機器の作成は、ネタとしてはすでに手垢が付きすぎているものですが(^^;、ホストに関するネタはいままでほとんどありませんでしたので、比較的楽しめるのではないかと思います。結構、スレーブデバイスを使っているだけではわからないこともいろいろ勉強できたのがよかったかな(^^;
携帯機器などでUSBを使うために新しい規格もできたようですが、従来資産を生かす上ではこのような小規模のUSBホストも使う場面もあるかと思いますので、そのときにこの記事が参考になれば幸いです。