9

私は、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 のみを使用しました。

4

7 に答える 7

3

Jan Axelson による以前のバージョンのUSB Complete を使用しました。実に完成度が高い。

編集レビューより:

このユニバーサル シリアル バス (USB) インターフェイスの開発者向けガイドは、現在第 4 版であり、ハードウェア設計、デバイス ファームウェア、ホスト アプリケーション ソフトウェアなど、プロジェクト開発のあらゆる側面をカバーしています。

于 2009-02-09T14:40:25.370 に答える
1

なぜ9S12を選んだのですか?前職で使用しましたが、不満でした。

  • gcc サポートが貧弱だったので、Metrowerks を使用しました
    • C では問題ないかもしれませんが、バグのある C++ が生成されることがよくありました
    • バイナリ プロジェクト ファイルでお粗末な IDE を持っていた!
  • 9s12 も遅く、多くの命令が 5 サイクルで実行されました。
  • 電力効率もあまり良くありません。
  • バレルシフターがないため、組み込みコードで一般的な操作が遅くなりました
  • それほど安くはありません。

私がもっと嫌いなのは 8051 だけです。私は現在の仕事で ARM CortexM3 を使用しています。すべての点で 9S12 よりも優れています (より高速なクロック、より多くの作業がクロックごとに実行され、消費電力が少なく、安価で、優れた gcc サポート) 、32 ビット対 16 ビット)。

于 2009-03-13T20:59:17.363 に答える
0

素晴らしいLUFAおよびV-USBライブラリであるため、次の MCU プロジェクトに AVR を検討してください。

于 2010-12-16T11:42:59.603 に答える
0

どのハードウェアを使用する予定かはわかりませんが、柔軟性があると仮定すると、STMicro は、USB/SPI をサポートする一連のマイクロコントローラーと、それらのパーツで使用できる C コードのライブラリを提供しています。-- 私は彼らの ARM7 シリーズのマイクロを何年も使用してきました。

于 2009-02-09T14:26:41.100 に答える