USBシステム: まとめ

jp

オープンソースのUSBホストCoreを利用する事で、下位レベルのCRC計算やNRZIエンコーディング実装の手間を省略でき、比較的短時間でUSBホスト機能をシステムにを実装できました。

今回のUSBホストCoreの実装で気付いた点をまとめました。

バスリセット

システムのパワーONまたはハードウェアリセット後、USBデバイスに対してバスリセットを行わないと、USBデバイスをコネクタに再挿入してCONNECTION_EVENTを検出する事になります。バスリセットを実行すると、USBデバイスをコネクタに挿したままでCONNECTION_EVENTの検出が行えます。

デフォルトアドレス

コントロール転送のSetAddressで一度アドレスを設定すると、システムをリセットしてもそのアドレスが有効である為、システムリセット後のプログラム再実行ではデフォルトアドレス(0)は受け付けられなくなります。バスリセットを行う事でデバイスのアドレスはデフォルトアドレスに戻ります。

ディスクリプタ

コントロール転送でディスクリプタを獲得するとき(GET_DESCRIPTOR)、Descriptor TypeはDEVICEとCONFIGURATIONを使用します。デバイスディスクリプタは、Descriptor Type=DEVICEでのGET_DESCRIPTORで獲得できます。コンフィグレーション、インターフェース、エンドポイントディスクリプタは、Descriptor Type=CONFIGURATIONでのGET_DESCRIPTORで一度に獲得できます。また、USBデバイスがHIDクラスの場合、Descriptor Type=CONFIGURATIONでのGET_DESCRIPTORでインターフェースとエンドポイントディスクリプタの間にHIDディスクリプタが挿入されます。

変化した時だけデータが帰ってくる

ゲームPADに対してインタラプト転送を行ったとき、ゲームPADのボタンの状態が変化していない場合はIN Transactionのデータは0であり、USBホストCoreの受信FIFOにデータはありません。ボタンがONまたはOFFになった場合のみ4バイトのデータが受信FIFOに格納されます。


Page 5 of 5 < Previous12345
タイトルとURLをコピーしました