>目的とするUSBデバイス(ゲームPAD)が動作するシンプルなドライバを作成します。ContentsUSBホストCoreの初期設定USBデバイスとのデータ転送ディスクリプタの獲得ゲームPADデータの獲得テストプログラムプログラム(抜粋)USBホストCoreの初期設定ゲームPADを接続してUSBホストCoreからバスリセットを行うと、USBデバイスはデフォルトステートに移行ます。USBホストCoreからはCPUに対して接続イベント(CONNECTION_EVENT)インタラプトが発生します。この状態で、USBデバイスのデフォルトアドレス0に対してアクセスが可能になります。デフォルトステートまでの処理USBデバイスとのデータ転送USBホストCoreとUSBデバイスは、IN/OUT/SETUPのTransactionを用いてデータ転送を行います。Transaction)USBホストからUSBデバイスにデータを転送します。Transactionを実行します。Transaction)USBデバイスからデータを受信します。Tokenが送信されます。USBデバイスからデータを受信するとUSB_INTERRUPT_STATUS_REGのTRANS_DONE_BITが1になります。USB_RX_FIFO_DATA_COUNT_LSBの値を読み出し、その回数だけUSB_RX_FIFO_DATAのデータをリードします。Transactionを実行します。ディスクリプタの獲得どのようなデバイスがUSBバスに接続されているかは、そのデバイスの標準ディスクリプタを獲得する事で判断できます。デバイスディスクリプタコンフィグレーションディスクリプタインターフェースディスクリプタHIDディスクリプタエンドポイントディスクリプタ各ディスクリプタは、コントロール転送でUSBデバイスから獲得します。Device)ディスクリプタは、HIDクラス独自のディスクリプタです。各ディスクリプタの詳細はこちら各ディスクリプタから、USBデバイス(ゲームPAD)についての以下の情報が得られます。コンフィグレーション数は1インターフェース数は1エンドポイント数は1(除くエンドポイント0)インターフェースクラスは3(HID)エンドポイントのアドレスは1エンドポイント1の転送はインタラプトIN転送エンドポイント1の最大パケットサイズは4インタラプト転送ディスクリプタ情報から、USBデバイス(ゲームPAD)のデータは、エンドポイント1へのインタラプト転送で獲得できることがわかりました。CPUのタイマー割り込みを用いて、一定間隔のインタラプト転送をUSBデバイスに対して発行し、その時のゲームPADの状態を獲得します。インタラプト転送フローゲームPADデータの獲得ゲームPADのデータ(どのボタンが押されたか、どの方向キーが押されたか)は、インタラプト転送で獲得したデータに格納されています。データフォーマットは、HIDクラスのREPORTディスクリプタから得られます。今回使用したゲームPADは、4ByteのデータとしてPADの状態がホストに返されます。PADの状態は次のフォーマットで格納されています。ON:1テストプログラム簡単なテストプログラムで動作の確認を行いました。OpenCoresのサイトのFAQページが参考になります。組み込みシステムにネットワーク機能が加わる事で、より柔軟なシステム設計が可能になります。ディジタル技術資料タイトルとURLをコピーしました。