USB : Plug and Play 機能

Vendor ID

Vendor ID は、USB-IF より各ベンダー毎に割り当ててもらいます。

Vendor ID は USB の仕様を満たすためには必ず必要な番号なので、商品化する場合には前もって USB-IF とコンタクトを取る必要があります。残念ながらテスト用の Vendor ID は存在しません。個人で USB 開発する場合にネックになりがちです。

Vendor ID は Get Descriptor のタイミングで返却されます。

  • Getting a Vendor ID (USB.org)
    Vendor ID を入手する方法について記載があります。昔は $500- 払えば入手出来たのですが、現在では Vendor ID を取得するだけでも $2,000- 必要のようです。どんどん値上げしています ;-(。
  • USB/仕様
    Vendor ID/Product ID を纏めているサイトを紹介しています。

#ちなみに Intel の Vendor ID は「0x8086」。オシャレですね =)。

Product ID

Product ID は、各ベンダー毎に管理します。

何を割り当てるかは自由ですが、PnP のキーとして重要な番号ですので製品ごとに割り振った方がよいでしょう。OS は、見知りの Class が無い場合には、Vendor ID と Product ID をキーとして Driver を Load します。

通常、Vendor ID と Product ID の組み合わせで、USB 機器を特定することが可能になります。

Enumlation

USB では、USB 機器が Plug-in された時に機器の情報を取得し、正しく設定を行う機能を持っています。Plug-in 時の USB 機器情報取得する動作のことを Enumeration(列挙, enum)と言います。Vendor ID/Product ID, Device Class 等の機器情報は、Plug-in 時に行われる Enumeration で入手するのが一般的です。

以下は、書籍「USB コンプリート」の「5-1 エニュメレーションの過程」からの引用です。

  1. ユーザがデバイスをUSBポートに差し込む。
  2. ハブがデバイスを検出する。
  3. ホストが新しいデバイスについて知る。
  4. デバイスがLow SpeedかFull Speed かをハブが検出する。
  5. ハブがデバイスをリセットする。
  6. Full SpeedデバイスがHigh Speedをサポートしているかどうかをホストが知る。
  7. ハブがデバイスとバスの間に信号路を確立する。
  8. ホストはGet_Descriptorリクエストを送り、デフォルトパイプの最大パケット長を知る。
  9. ホストがアドレスを割り振る。
  10. ホストがデバイスの性能を知る。
  11. ホストがデバイスドライバを割り振り、ロードする(複合デバイスを除く)。
  12. ホストのデバイスドライバがコンフィグュレーションを選択する。

OS は 8. 〜 12. を主に担当しています。

ちなみに「ハブ」は必ずどの USB システムでも用意されており、大本の Hub (システム内部)のことを「Root Hub」と呼びます。


Last-modified: 2006.11.06 (月) 01:53:32 (6607d)