USBの基礎知識 ――パケットのフォーマットからプロトコルの詳細まで
● USBターゲット・コントローラのエンドポイント構造
USBにおけるデータのやり取りは,エンドポイントと呼ばれるバッファを介して行われます.
USBコントローラによっては,エンドポイントがRAMとして見え,ランダム・アクセスが可能になっているものもあれば,FIFO構造になっていて,順番に読み出しや書き込みを行う必要があるもの,またはそれらの双方の組み合わせが可能なものもあります.たいていの場合,エンドポイントは複数個実装されており,それぞれに番号を付けて管理しています.
● ディスクリプタとは
ファームウェアによるエンドポイントの読み書きと併せて,USBターゲットとしてのもう一つの重要な要素にディスクリプタがあります.ディスクリプタそのものは単なるデータの塊であり,一般にはUSBターゲット開発時に,ファームウェアに初期値付きの配列として定義する,固定した内容のものです.
例えばパソコンにUSBキーボードを接続すると,ほとんどの場合はドライバの追加インストールが不要で,すぐにデバイスを使うことができます.これは,USBキーボードには「私はUSB仕様に準拠したUSBキーボードです」という情報が記述されいるためです.それを認識したホストは,OSに標準で用意されているUSB標準キーボード・ドライバを読み込むため,ドライバのインストールがいらないのです.このようにUSB周辺機器がどのようなものなのか,その仕様を詳細に列挙したデータ列をディスクリプタと呼びます.
ディスクリプタは一つではありません.どれほど仕様が簡単なターゲットでも,複数のディスクリプタが必要です.最低限必要なディスクリプタは,
- デバイス・ディスクリプタ
- コンフィグレーション・ディスクリプタ
- インターフェース・ディスクリプタ
- エンドポイント・ディスクリプタ
です.エンドポイント・ディスクリプタは,使用するエンドポイントの個数分だけ必要です.