ケーブルが最初に接続されたときに何をすべきかを説明するUSB​​仕様はどこにありますか?


15

だから、USB.orgサイトにあるUSB 2.0仕様について知っています

私は少し怠け者で、せっかちです。USBケーブルが接続されているときに、周辺機器に何が期待されているかを正確に調べるためにどこに行けばよいか教えてくれますか?

たとえば、周辺機器がプリンターである場合、反対側のコンピューターにプリンター(特定のモデルの説明が含まれていると思います)が接続されたことを伝えるにはどうすればよいですか?コンピューターでは、プリンタードライバーはどのUSBポートがプリンターに接続されているかをどのようにして知るのですか?

私のアプリケーションは、実際にはUSB MIDIです。このUSB-MIDI docも入手しましたが、より基本的なUSBプロトコルが不足しています。

人々の情報のためだけに、私が使用しているUSBチップはFTDI FT220xで、ADSP-21479 SHArCのSPIに接続されています。現在、PC(TeraTermを実行)を「コンソール」として使用するテキスト通信に使用しています。SPIポートをセットアップしてFTDIチップに接続するコードにアクセスできますが、初期通信を行うコードはありません。FT220xが最初にPCに接続されたときに何をするのかわかりません。

私は本を​​読んだり学んだりすることに不満はありませんが、どこから読み始めればよいか知りたいです。100MBのUSBスペックは大きすぎて撮影できません。実行可能なヘルプを提供してくださった皆さんに心から感謝します。


1
FTDI FT220xが舞台裏で何をしているのか知りたいだけですよね?FTDIが多くのUSBを処理するため、FTDIでできることにはいくつかの制限もあります。私はしばらくFT2232Hファミリを使用しましたが、私が知っていることを説明しようとします
...-MarkU

最終的に私がやろうとしているのは、TeraTermを実行しているPCにテキストを前後に送信するのに十分にスマートなこのUSBポートを使用することです。私がしたいのは、同じUSBコネクタを使用してUSB MIDIを実行することです データを32ビットパケットに「パケット化」する方法を理解する必要がありますが、これがUSB MIDIデバイスであることを相手に伝えるプロトコルが必要だと考えました(まだ考えています)。(これまでのところ、私はUSBの要点を把握しておらず、あなたの答えは私を
前進

回答:


21

USBには複数の層があり、それらはUSB 2.0仕様で説明されています。OSI階層化ネットワークモデルに精通している場合、次のように考えることができます。

  • セッションレイヤー=第10章USBホストハードウェアおよびソフトウェア(デバイスドライバー)
  • トランスポート層=第9章USBデバイスフレームワーク
  • ネットワーク層=第8章プロトコル層(ビットストリーム)
  • データリンクレイヤー=第7章電気(回路)
  • 物理層=第6章メカニカル(ケーブルとコネクタ)

概念的には、USBはエンドポイントと呼ばれるデータのストリームに基づいており、IN(ホストへ)またはOUT(ホストから)のいずれかになります。すべてのデバイスには、制御とステータスに使用されるエンドポイント0があります。デバイスには、アプリケーションデータの追加のエンドポイントがある場合があります。各エンドポイントは、FIFOバッファーのように動作します。

データは、バルク(TCP / IPなど、すべてのバイトが正しい順序で到着することを保証)またはアイソクロナス(UDP / IPなど、新鮮であることが保証されるがパケットをドロップする可能性がある)としてエンドポイントで転送されます。紛らわしい名前の「割り込み」転送タイプがありますが、実際にはホストによってポーリングされます。

USB 2.0は、データリンクに差動ペアを使用します。これはUSB 2.0仕様の第7章でカバーされているため、ここでは詳しく説明しません。一般に、PCBレイアウトでは、これを一致した長さの差動ペアとして扱い、USB PHY(物理インターフェース)が使用されています。USBペリフェラルは、D +またはD-ラインの1つで高い値の抵抗を使用して、ホストに高速または低速ペリフェラルであることを通知します。

USBホストがデバイスの存在を検出するとすぐに、ホストはデバイスに一連の記述子を要求します。これは、FTDIチップによって舞台裏で処理されます。記述子については、9.5章で説明します。これらには、デバイス記述子構成記述子インターフェイス記述子エンドポイント記述子文字列記述子、さらにはHIDレポート記述子も含まれます。

デバイスディスクリプタは、 USBを含むVID(ベンダー識別)とPID(製品識別)番号。オペレーティングシステムは、この番号のペアVID_PIDを使用して、このデバイスに使用するデバイスドライバーを決定します。VID番号はUSB実装者フォーラムのメンバーシップによって発行されるため、個人の発明者にとってはこれは一種の問題です。

さらに、HID(Human Interface Device)クラスドライバーがあります。これは、キーボード/マウスなどの汎用入力と汎用入出力を提供します。HIDの利点の1つは、カスタムデバイスドライバーを提供する必要がないことですが、そのスループットはカスタムバルクドライバーに比べていくらか制限されます。HID記述子に関する他の仕様文書があります。また、特定のヒューマンインターフェイスデバイスで使用可能なさまざまな機能を説明するすべてのコード番号の詳細を記載したHID Usage Table ドキュメント

FT220XデータシートなどのFTDIチップは、USB「シリアルインターフェイスエンジン」を提供します(SPIシリアルまたはRS232シリアルと混同しないでください)。これは、第6章、第7章、および第8章で説明されている低レベルのもののほとんどを処理します。

FTDIは、EEPROM(FT2232Hのオフチップ、FT220Xのオンチップ)を使用して、記述子に送られる少量の情報を格納します。VID / PID値をカスタマイズし、カスタムの説明文字列を提供できます。


6
概要が気に入りました。私は自分ですべてのがらくたを把握しなければならなかったため、数週間にわたってTHE ENTIRE 2.0仕様(思い出すと1000ページ以上)を読む必要がありました。楽しい経験ではなかったと言わざるを得ません。(私の場合はHIDを使用できませんでした。)トピックに関する良い本もありません。私 Jan AxelsonのUSBに関する本が嫌いであり、彼女の本をゼロから組み込みマイクロとしてこの作業を行おうとしている人にとっては「ほとんどまったく役に立たない」と考えています。それ以外の場合、実際にはほとんど価値がありません。実装者(カスタムハードウェア)に適した本を知っているなら、タイトルを聞いてうれしいです!! 1
jonk

1
Opの潜在的な市場に応じて、VID / PIDは最大の課題です。Axelsonsの方法論を使用すると、VID(独自の3.5万ドル)を使用して、1つ以上のPIDを無料でリクエストできるという意味で機能します。Microchip / Atmel、FTDI、TIなどの組織からPIDをリクエストすることもできます(VIDに基づいて)。IMOの最高の本はIntelの「例によるUSB設計」で、少し長めですが、USB 2.xには適しています。残念ながら、Visual Studioの改訂による変更により、コード例の多くが壊れています。
ジャッククリーシー

1
趣味でVID / PIDにアクセスする最良の方法は、LUFA(無料)を使用することです:fourwalledcubicle.com/files/LUFA/Doc/130303/html/… .....これらは商用製品では使用できませんが、衝突を大幅に制御できるホーム/デモ用に適しています。
ジャッククリーシー

1
PS。素晴らしい紹介は、「例による組み込みUSB設計:FTDIがリリースしたもの:ftdichip.com/Support/Documents/TechnicalPublications / ... 」を使用することです...これには(もちろんFTDIデバイスに基づく)多くの有用な例があり、 PSOCコントローラーの使用を含む作業ファイル
Jack Creasey

1
USBデバイスが自己給電の場合、D +またはD-プルアップ抵抗器を適用する前に、VBUS電圧が検出されるまで待機する必要があることに注意してください。これに関する認証に失敗しました。
アダムハウン

4

USBの「パートナー」(ホストとデバイス)の動作と相互作用は、USB仕様全体に散在しています。根拠を得る最善の方法は、第10章と第11章で、可能な(必須の)デバイス状態(図9-1)、およびホスト(およびハブ)フレームワークを説明する「デバイスフレームワーク」、第9章を参照することです。プロトコルの詳細(パイプ/トランザクションタイプ/抽象OSIプロトコルレイヤー、PCBレイアウトなど)、ポート状態図(図11-10)を調べることにより、初期相互作用をよりよく把握できます。

本質的に、ケーブルがホストとデバイス間で接続されていない場合、ホストポートは「給電状態」(VBUSがオン)になっていますが、「切断」されています。D +およびD-ワイヤは、15kプルダウンで低く保持されます。

ケーブルが接続されると、VBUSはデバイスに入ります。デバイスは接続されていることを認識し、DワイヤのいずれかをHIGHにプルすることで「接続」イベントを通知します。FS/ HSデバイスの場合はD +、LSデバイスの場合はD-です。

特定のポートでD +/-ワイヤをプルすると、ホストソフトウェアに割り込みが発生し、「ポートステータスの変更」が報告されます。ホストソフトウェア(通常はehci.sys)は、その特定のポートで「ポートリセット」シーケンスを開始します。「USBポートのリセット」が正常に完了すると、ホストポートでUSB通信が有効になります。ポートがアクティブになります(フレームパケットが流れ始めます)。

USBプロトコルを使用して、ホストはこのデバイスに一意のアドレスを割り当て、「デバイス記述子」を読み取ります。これにより、「デバイス列挙」プロセスが開始されます。デバイス記述子には、それが属するデバイスクラスに関する情報(HID、COM、MIDI、プリンターなど)、特定のデバイスのVID / PID、およびその他の情報が含まれています。表9-8を参照してください。

デバイスクラスとVID / PIDを取得した後、ホストソフトウェアはデバイスレジストリ内のこの情報との照合を試み、対応するDEVICEドライバー(汎用ドライバーまたはベンダー固有(存在する場合))をロードします。次に、デバイスドライバーは、「デバイス構成」の設定で終わるデバイスインターフェイスを選択して、列挙プロセスを終了します。すべてのパケットが有効なポートすべてにブロードキャストされる場合でも、USB通信全体がこの特定のポートの背後でのみ認識されることは明らかです。

上記はUSB接続プロトコルの一般的なフレームワークです。特定の目的(MIDIなど)のデータのパケット化は別の話であり、システムが適切なデバイスクラスを取得した場合、アプリケーションレベルまたはデバイスドライバーレベルで処理されます。ネイティブMIDI通信を取得するには、デバイスの記述子にこのクラスが含まれ、すべてのMIDIクラス定義に従う必要があります

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.