私は、SPI インターフェイスを介してマイクロ コントローラーと通信する組み込みデバイス用のデバイス ドライバーを作成する任務を負っています。最終的には、USB インターフェイスを使用して更新されたコードを外部からダウンロードし、検証段階で使用します。
私の質問は、組み込みシステム内の USB プロトコル スタック/デバイス ドライバーの実装/設計をカバーする優れたリファレンス デザイン、ドキュメント、またはオンライン チュートリアルを知っている人はいますか? 私はまだ始めたばかりで、650 ページの USB v2.0 仕様を読むのは、現時点では少し大変です。
参考までに、私が使用しているマイクロコントローラーは Freescale 9S12 です。
マーク
ゴールデンミーン (-AD) のコメントに基づいて、次の情報を追加したいと思います。
1) 組み込みデバイスはカスタム エグゼクティブを使用し、COTS または RTOS を使用しません。
2) デバイスは割り込みを使用して、デバイスからデータを取得する準備が整ったことを示します。
3) Linux に関するいくつかのドキュメントを読みましたが、Linux にまったく詳しくないので、現時点ではあまり役に立ちません (ただし、すぐに役立つことを願っています)。
4) 設計アプローチは、少なくとも現時点では、USB デバイス用のデバイス ドライバーを作成し、USB プロトコル層 (I/O) をデバイス ドライバーの上に配置してデータを解釈します。私は間違っているかもしれませんが、これが最善のアプローチだと思います。
編集 - 1年後
二度と USB デバイスで作業することがない場合に備えて、頭から消える前にいくつかの項目を共有したかっただけです。コードを開発し、それを最初に起動して実行するときに、いくつかの障害に遭遇しました。
私が遭遇した最初の問題は、USB デバイスがホスト (私の場合は Windows) に接続されたときに、ホストがリセット要求を発行したことでした。USB デバイスは、割り込みイネーブル フラグをリセットおよびクリアします。これが起こっていることを知るのに十分な文献を読んでいなかったため、セットアップ要求割り込みを受け取ることはありませんでした。これを理解するのにかなりの時間がかかりました。
私が遭遇した 2 番目の問題は、Set_Configuration のセットアップ要求を適切に処理していないことでした。私はそれを処理していましたが、このセットアップ要求が入ったときに USB デバイスが ACK を送信していなかったため、要求を正しく処理していませんでした。ハードウェア USB プロトコル アナライザーを使用して、最終的にこれを発見しました。
私が遭遇した他の問題もありましたが、これらは、理解するのにかなりの時間を要した 2 つの最大の問題でした。私が心配しなければならなかったもう 1 つの問題は、ビッグ エンディアンとリトル エンディアン、それぞれ Freescale 9S12 と USB データ フォーマット (Intel) です。
過去に行った UART デバイス ドライバーと同様の USB デバイス ドライバーをビルドすることになりました。このコードを次の URL に投稿しました。
http://lordhog.wordpress.com/2010/12/13/usb-drive
私は構造体を多用する傾向があるため、#define を使用するほどポータルではないため、人々はそれらを好まないかもしれません (例: MAX3420_SETUP_DATA_AVAIL_INT_REQR 0x20)。しかし、コードが読みやすくなるので気に入っています。誰かがそれについて質問がある場合は、お気軽に電子メールでお問い合わせください. 「USB Complete: The Developer's Guide」という本は、どの領域に集中すべきかを知っている限り、役に立ちました。これは単純なアプリケーションであり、低速 USB のみを使用しました。