前のページ
次のページ
目次
USB は 1994 年に Compaq, Intel, Microsoft, NEC により開発がスタートした.
その仕様(version 1)は 1996 年 1 月に最初にリリースされ, 最新のオフィシャル
version 1.1 は 1998 年 9 月にリリースされた. ドキュメントはまだ作成中であり,
1999 年に version 2.0 がアナウンスされた. より詳細な情報や仕様書は,
USB Implementers Forum を参照のこと.
USB はひとつのホストによりコントロールされる厳格な階層構造をもつ.
ホストは 装着された USB デバイスとコミュニケーションするために master/slave
プロトコルを用いる. この意味は, あらゆる種類のコミュニケーションは,
ホストにより開始され, デバイス同士はいかなるダイレクトな接続の確立もできないということである.
master/slave プロトコルは, 暗黙のうちに分散バスの arbitration や
collision 回避のような問題を解決する.
現在の USB の実装では, 同時に 127 のデバイスの接続が許されており,
コミュニケーション・バンド幅は最大 12Mbit/s である.
今日 USB の Host Controller は, ほとんどのマザーボードのチップセット上に組み込まれている. これら全てのコントローラは Open Host Controller
Interface(OHCI) または Universal Host Controller Interface(UHCI)の
いずれかと互換である. 両タイプのコントローラも互換性をもっており,
USB デバイスは Host Controller について気にする必要はない.
異なった目的に使用するため異なったタイプの USB デバイスが存在する.
最大転送速度でさえも特殊な USB デバイスでは異なることが可能である.
USB 規格は, Full speed デバイスと Low speed デバイスを決めている.
マウスやキーボード, ジョイスティックのような Low speed デバイスは
1.5Mbit/s でコミュニケートする. オーディオやビデオのような
Full speed デバイスは 12Mbit/sの90%(プロトコルのオーバヘッドを
含めて約10Mbit/s)まで使用可能である.
コンピュータの後部パネルには物理的に, 2 つか 4 つの USB ポートが存在する.
これらのポートはハブか普通のデバイスを取り付けるのに使用する.
ハブは他の USB デバイスを接続するためにポート(2 - 8)の数を拡張する
USB デバイスである. 接続できるデバイスの最大の数はバスの上のハブの数に
よって減少させられる. ハブはセルフもしくはバスから(それとも両方)の電力
供給型の Full speed デバイスである.
通常, ホストコントローラの物理的なポートは仮想ルートハブにより扱われる.
このハブはホストコントローラのデバイスドライバによってシミュレートされて,
バストポロジーの統一を助ける. したがって, あらゆるポートは USB サブシステム
のハブドライバにより同様な方法で取扱いが可能である.
(図1を参照).
USB 上でのコミニュ二ケーションは, 3 つの異なる転送のタイプと 2 つの
方向により行なわれる. ホストからデバイスへのデータは downstream あるいは
OUT 転送という. 逆の方向は upstream あるいは IN 転送という.
- 「コントロール転送」は確実な短いデータパケットの転送やリクエストに
用いられる. それはデバイスのコンフィギュレーションに使われる. 全ての
デバイスはコントロール・コマンドの最小セットをサポートすることを要求
されている.
以下に標準のコマンドのリストを示す−
- GET_STATUS
- CLEAR_FEATURE
- SET_FEATURE
- SET_ADDRESS
- GET_DESCRIPTOR
- SET_DESCRIPTOR
- GET_CONFIGURATION
- SET_CONFIGURATION
- GET_INTERFACE
- SET_INTERFACE
- SYNCH_FRAME
ベンダーの特定なデータの転送に追加コマンドが使用可能である.
- 「バルク転送」は確実な最大バンド幅までのデータパケットの転送や
リクエストに用いられる. スキャナや SCSI アダプターのようなデバイス
はこの転送タイプを用いる.
- 「割り込み転送」は, 周期的にポーリングされたバルク転送に似ている.
もしホストコントローラが割り込み転送をサブミットしたなら, ドライバーは
自動的に特定のインターバル(1ms - 255ms)でこの要求を繰り返す.
- 「アイソクロナス転送」は, バスのバンド幅を保証するが, しかし確実で
はないリアルタイムのデータを送信/受信する. 一般的にこれらの転送の
タイプはオーディオやビデオで使用される.
いつ USB デバイスをバスに取り付けようとも, それは USB サブシステム
によりエニュメレーション(各接続デバイスのデバイスドライバに対して識別, コンフィギュレーション及びバインドを行なう進捗中の手順)される. すなわち, ユニークなデバイス番号(1-127)
がアサインされ, そしてデバイス・ディスクリプタが読み込まれまれる.
ディスクリプタとは装置とそのプロパティの情報を含んだ
データ構造体である. USB 規格はディスクリプタのヒエラルキーを定義して
いる(図 2 参照).
-
ひとつの「デバイス・ディスクリプタ」は, 1 台の USB デバイスに
ついての一般的な情報を記述する. それは全てのデバイスのコンフィグレーション
とデバイスに共通に適用される情報を含んでいる.
1 台の USB デバイスは, ただひとつのデバイス・ディスクリプタを持っている.
-
「コンフィグレーション・ディスクリプタ」は, 特定なデバイスの
コンフィグレーションについての情報を与える. 1 台の USB デバイスは
ひとつ以上のコンフィグレーション・ディスクリプタを持っている.
各々のコンフィグレーションはひとつ以上のインターフェイスを
持っており, 各々のインターフェイスは, は 0 以上のエンドポイント
を持っている.
ひとつのエンドポイントは, ひとつのコンフィグレーション内では
同じインターフェイスの交互のセッティングにより使用されるので
なければインターフェイス間で共有できない.
エンドポイントは異なったコンフィギュレーションの一部分のインタフェイス内
でこの制限条件外で共有される.
コンフィギュレーションは標準コントロール転送 set_configuration により
排他的にアクティブにできる. 異なったコンフィギュレーションは電力消費
のような共通のデバイスにセッテイングの変更に用いられる.
-
ひとつの「インタフェイス・ディスクリプタ」はひとつのコンフィギュレーション内で
特定のインタフェイスを記述する.
ひとつのコンフィギュレーションは, 各々が 0 以上のユニークなエンドポイント
のセットで記述されるエンドポイント
ディスクリプタを各々がもつひとつ以上のインターフェイスを提供する.
ひとつのインタフェースはデバイスがコンフィギュアされた後にエンドポイントそして/またはそれらの特性が変えられるのを許容する相互の設定を含みうる. インタフェースのデフォルト設定は常に相互にゼロを設定することである.
標準コントロール転送 set_interface により相互の設定は排他的に選択できる.
例えば, 内部のマイクロホンがあるビデオカメラのような多機能装置は, バス上でバンド幅を変えるために 3 つの相互設定を持つことが可能である.
- カメラをアクティブ
- マイクロホンをアクティブ
- カメラとマイクロホンをアクティブ
-
「エンドポイント・ディスクリプタ」は各々のエンドポイントに関するバンド幅の要求を決定するためにホストによって必要とされる情報を含んでいる. ひとつのエンドポイントは, ひとつの USB デバイスの論理的なデータのソース(パケット送信元)またはシンク(パケット受信)を表す. エンドポイント 0 はすべてのコントロール転送に使用される. そして
このエンドポイントに関するどんなディスクリプタもない. USB 仕様
citeusbspec11 はエンドポイントにもパイプという用語を使用する.
-
「ストリング・ディスクリプタ」は人間の読み込み可能なユニコード形式に任意で, 追加情報を提供する. ベンダー名, デバイス名かシリアル番号にそれらを使用することができる.
標準デバイスとインタフェース・ディスクリプタは分類(クラス, サブクラス, プロトコル)に関連するフィールドを含んでいる.
これらのフィールドはホストシステムにより
デバイスまたはインタフェイスをドライバに関連づけするのに使用される. そしてそれは, クラス仕様でどのように指定されるかに依存する.
デバイスとインタフェースディ・スクリプタのクラスフィールドの有効な値は, USB Device Workig Group によって定義される(図1を参照).
クラスに中にある一緒にグルーピングされたデバイスまたはインタフェイスそして
クラス仕様における特性の指定は, そのクラスに基づく多重実装を管理できるホストソフトウェアの開発を認める.
そのようなホストソフトウェアは, デバイスによって提示される記述的な情報を用いて
その操作を特定なデバイスかインタフェイスに適合させる.
クラス仕様はクラスのメンバとして自分自身を認識する
すべてのデバイスまたはインタフェイスの最小の操作を定義するフレームワークを
提供する.
HID クラス は主としてコンピュータシステムの操作を制御するため人間によって使用されるデバイスから成る. HID クラスデバイスの典型的な例は -
-
キーボード, ポインティング・デバイス, 標準のマウス, トラックボール, およびジョイスティックである.
-
フロントパネルにあるコントロール - ノブ, スイッチ, ボタン, およびスライダー.
-
電話, VCRのリモートコントロール, ゲームまたはシミュレーション装置上にあるコントロール - データグローブ, スロットル, ハンドル, および舵のペダル.
USB デバイスのデバイスドライバを見つけると, いくつかのおもしろい状況が提示される. いくつかの場合, 全体の USB デバイスはただひとつのデバイスドライバによって扱われる. 他の場合では, 装置の各インタフェースは別々のデバイスドライバを持っている.
前のページ
次のページ
目次