最終回は、新たにUSB 3.0に追加された標準ディスクリプタの解説、実機で評価・実測したUSB 3.0動作の結果を紹介する
前回はUSB 3.0デバイスを実現するポイントとなるアーキテクチャやハードウェアのアプローチや概念についてご説明させていただきました。特に高速性を求めるデバイスを実現する1つのアイデアとしてお役立ていただけるのではないかと思います。
最終回の今回は、ホストの認識に必要なディスクリプタ、実機にて確認した転送レート結果についてご紹介いたします。
USBでは下位互換性を維持するために、ケーブル/コネクタなどの物理的形状、USB 3.0とUSB 2.0以下を決定するステートマシンなどのアーキテクチャなどの仕様が盛り込まれました。また、規格のバージョンアップに伴う重要な下位互換要因の1つとして、ソフトウェア/ファームウェアも大きな要素となります。今回は一般的にファームウェアがその対応を受け持つディスクリプタについてご紹介します。
規格のアップデートによりUSBデバイスの機能が追加されれば、その情報をホストへ通知する内容も追加しなければなりません。DeviceディスクリプタはホストのUSBデバイス情報をホストと共有する手段となります。ここでは少しおさらいになりますが、USB 2.0以前のDeviceディスクリプタを振り返りながら、USB 3.0で追加された内容をまとめていきます。
USB 2.0ディスクリプタについては以下の表、および基本的な構成図をご参照ください。
■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として構成することができるようになりました。
■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 2.0をベースにいくつかのディスクリプタが追加されました。デバイスとしてUSB 3.0のサポート機能/特徴を示す内容となります。USB 3.0ディスクリプタについては以下の表、および基本的な構成図をご参照ください。
■SuperSpeed USB Endpoint Companion Descriptor
Endpoint CompanionディスクリプタはEndpointディスクリプタに従属し、USB 3.0で追加されたディスクリプタです。USB 3.0で特に重要なプロトコルであるBurst転送やBulk Stream Protocolなどの追加機能の情報をホストに通知するために使われます。このディスクリプタによって、すべてのEndpoint転送タイプの追加情報を定義しますので、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以下のサポートしているバススピードや省電力の復帰時間に関する追加情報をホストへ示します。
Copyright © ITmedia, Inc. All Rights Reserved.