連載
» 2010年07月20日 12時00分 UPDATE

失敗しないUSB 3.0、規格解説と実現のキーポイント(4):USB 3.0の追加ディスクリプタ、実機動作速度は? (1/2)

最終回は、新たにUSB 3.0に追加された標準ディスクリプタの解説、実機で評価・実測したUSB 3.0動作の結果を紹介する

[インベンチュア株式会社 開発部 中村 孝志,@IT MONOist]
失敗しないUSB 3.0、規格解説と実現のキーポイント インベンチュア株式会社
USB 3.0の高速伝送は、転送速度の向上だけで実現できたわけではない。また、論理層やアプリケーションにもUSB 2.0と異なるアプローチが必要となる。本連載では、USB 3.0のプロトコル面での改善点を中心に解説し、USB 3.0デバイスを実現するポイントを探る。(編集部)

はじめに

 前回はUSB 3.0デバイスを実現するポイントとなるアーキテクチャやハードウェアのアプローチや概念についてご説明させていただきました。特に高速性を求めるデバイスを実現する1つのアイデアとしてお役立ていただけるのではないかと思います。

 最終回の今回は、ホストの認識に必要なディスクリプタ、実機にて確認した転送レート結果についてご紹介いたします。

USBデバイスのファームウェア実装

 USBでは下位互換性を維持するために、ケーブル/コネクタなどの物理的形状、USB 3.0とUSB 2.0以下を決定するステートマシンなどのアーキテクチャなどの仕様が盛り込まれました。また、規格のバージョンアップに伴う重要な下位互換要因の1つとして、ソフトウェア/ファームウェアも大きな要素となります。今回は一般的にファームウェアがその対応を受け持つディスクリプタについてご紹介します。

 規格のアップデートによりUSBデバイスの機能が追加されれば、その情報をホストへ通知する内容も追加しなければなりません。DeviceディスクリプタはホストのUSBデバイス情報をホストと共有する手段となります。ここでは少しおさらいになりますが、USB 2.0以前のDeviceディスクリプタを振り返りながら、USB 3.0で追加された内容をまとめていきます。

USB 2.0デバイスのディスクリプタ

 USB 2.0ディスクリプタについては以下の表、および基本的な構成図をご参照ください。

photo 図1 Deviceディスクリプタ構成
photo 表1 USB 2.0 Deviceディスクリプタ

Device Descriptor

 Deviceディスクリプタはどのバススピードにおいても必ず1つだけ存在し、1つ以上のConfigurationディスクリプタを持ちます。Device固有のVendor ID/Product IDをはじめ、USBバージョンなどの基本的な情報をホストへ供与します。また、USB 3.0では消費電流量bMaxPowerの単位が2mAから8mAへ変更されていることに注意してください。

Configuration Descriptor

 ConfigurationディスクリプタはDeviceディスクリプタに従属するディスクリプタで、デバイスは必ず1つ以上のConfigurationディスクリプタを持つ必要があります。現在のスピードで動作中のデバイスに何個のConfigurationがあるかはDeviceディスクリプタのbNumConfigurationに記述されます。複数のConfigurationを持つデバイスのConfigurationは排他的に設定されます。USB 2.0のConfigurationディスクリプタは従属ディスクリプタとして、Interface Association Descriptor、Interface Descriptor、Endpoint Descriptorがあります。

Interface Descriptor

 InterfaceディスクリプタはConfigurationディスクリプタに従属するディスクリプタで、Interfaceの数はConfigurationディスクリプタのbNumInterfaceに記述されます。Interfaceディスクリプタはエンドポイントの数や、そのInterfaceが持つFunction情報の伝達に使用されます。使用上においては、1つのConfiguration上で複数Interfaceディスクリプタは基本的には同時に使用可能ですが、bInterfaceNumberとbAlternateSettingを使って排他的なInterfaceを形成することも可能です。

Endpoint Descriptor

 EndpointディスクリプタはInterfaceディスクリプタに従属するディスクリプタで、Endpointの数はInterfaceディスクリプタのbNumEndpointsで設定されます。Endpointディスクリプタでは各Endpointの番号、転送方向、転送形態など基本的でかつ極めて重要な情報が伝達されます。

Interface Association Descriptor

 Interface AssociationディスクリプタはConfigurationディスクリプタに従属するディスクリプタであり、USB 2.0仕様としては後に追加されたディスクリプタとなります。このInterface Associationディスクリプタの仕様上の追加により、複数のInterfaceディスクリプタを用いて1つのFunctionとして構成することができるようになりました。

photo 図2 Configuration Descriptor(USB 2.0)

String Descriptor

 Stringディスクリプタは文字列情報を格納するディスクリプタです。デバイスが文字列情報を持つ場合は必ずString0ディスクリプタを持ち、Unicodeの言語IDにて記述されます。デバイスがStringディスクリプタを省略した場合、ヘッダーの2バイトだけ応答します。

Device Qualifier Descriptor

 USB 2.0ではDeviceQualifierディスクリプタはHigh Speedデバイスのみが対応するディスクリプタで、HS動作時はFS動作時の情報を、FS動作時はHS動作時のデバイス情報を示す必要があります。

 ※USB 3.0であるSS動作時にはこのディスクリプタは存在しません。

Other Speed Configuration Descriptor

 USB 2.0ではOther Speed ConfigurationディスクリプタはHigh Speedデバイスのみが対応するディスクリプタで、HS動作時はFS動作時の情報を、FS動作時はHS動作時のConfiguration情報を示す必要があります。

 ※USB 2.0 HSデバイスは、FSでのネゴシエーション(Chirp)を経てHSへ遷移しますので、FS/HSの両方をサポートします。

 ※USB 3.0(SS動作時)にはこのディスクリプタは存在しません。

BOS(Binary Device Object Store) Descriptor

 BOSディスクリプタは従属を持つ根幹となるディスクリプタで、デバイスレベルの拡張能力を従属ディスクリプタとして定義します。現状ではUSB 2.0のLPM(Link Power Management)機能追加に対応するものです。

 ※USB 2.0規格上のLPMはオプションとなります。

 また、USB 2.0 DeviceディスクリプタのbcdUSBの値はデバイスが、BOSディスクリプタ(GetDescriptor(BOS))をサポートしていることを示すことに使用されます。BOSディスクリプタをサポートするデバイスはbcdUSB値が0201H以上である必要があります。

Device Capability Descriptor

 Device CapabilityディスクリプタはBOSディスクリプタの従属ディスクリプタで、Deviceディスクリプタに含まれないUSB 2.0デバイスレベルの追加能力を報告するために使用されます。現状ではUSB 2.0 ExtensionタイプにおいてLPMのサポート有無を示します。

USB 3.0デバイスのディスクリプタ

 USB 3.0の機能追加に対し、USB 2.0をベースにいくつかのディスクリプタが追加されました。デバイスとしてUSB 3.0のサポート機能/特徴を示す内容となります。USB 3.0ディスクリプタについては以下の表、および基本的な構成図をご参照ください。

photo 表2 USB 3.0 Deviceディスクリプタ

SuperSpeed USB Endpoint Companion Descriptor

Endpoint CompanionディスクリプタはEndpointディスクリプタに従属し、USB 3.0で追加されたディスクリプタです。USB 3.0で特に重要なプロトコルであるBurst転送やBulk Stream Protocolなどの追加機能の情報をホストに通知するために使われます。このディスクリプタによって、すべてのEndpoint転送タイプの追加情報を定義しますので、USB 3.0を利用するファームウェアではしっかりとサポートしなければなりません。

photo 図3 Configuration Descriptor(USB 3.0)

Device Capability Descriptor

Device CapabilityディスクリプタはBOSディスクリプタの従属ディスクリプタで、現状ではUSB 2.0 Extension、SuperSpeed USB、Container_IDの3タイプが存在します。USB 3.0で新たに設定されたSUPERSPEED_USBタイプでは、USB 2.0以下のサポートしているバススピードや省電力の復帰時間に関する追加情報をホストへ示します。

photo 図4 USB 3.0 BOS Descriptor
       1|2 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.