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値をカスタマイズし、カスタムの説明文字列を提供できます。