本ウェブサイトでは、JavaScriptおよびスタイルシートを使用しております。
お客さまがご使用のブラウザではスタイルが未適応のため、本来とは異なった表示になっておりますが、
情報は問題なくご利用いただけます。
USBでは、各周辺機器をホスト側で正しく認識させるためにディスクリプタと呼ばれるデータを必ずもっています。各周辺機器のもっているディスクリプタは以下の7つ(USB2.0で2つ追加されました)になります。
|
Endpoint DescriptorはUSB Interface内に存在するバッファを説明するディスクリプタです。Endpoint0を除いたすべてのEndpointはこのディスクリプタを持っています。Interfaceは複数のEndpointを1つにまとめて管理するための単位です。
なぜ、EndpointをまとめてInterfaceとして管理するのかというと、それによって複合の機能を持った装置を設計できるからです。USBではClass, SubclassがDeviceとInterfaceの両方のDescriptorで定義できます。ひとつの例としてスピーカを考えた場合、制御のためのEndpoint 0 (Control転送)、Audioデータを受信するEndpoint 1(Isochronous)が必要になります。また、オプションとしてスピーカ上のボリュームを変化させた時に、結果をPCにフィードバックするためのEndpoint 2 (Interrupt)を持つかもしれません。
Interfaceという概念がない場合、Endpoint0/1だけを持った装置とEndpoint0/1/2を持った装置はともにDevice DescriptorでAudio Classと定義されますが、PC上のデバイスドライバはそれぞれ異なるものになります。それでもドライバを開発できれば問題ありませんが、効率はよくないでしょう。ドライバを開発する場合Endpoint 0/1のドライバとオプションのEndpoint 2用のドライバを分けて開発した方が他への流用はそれだけ行いやすいです。特にスピーカの例ではオプションのEndpoint 2はマウスなどと同じHID Classの装置分類できます。EndpointをInterfaceでまとめて、そのInterfaceにドライバを関連づけることができれば、ドライバを分離して開発できます。このためInterfaceに対してClass、SubClass、Protocolが記述できるようになっているのです。 また、InterfaceレベルではAlternative Settingと言う考えが導入されています。これは特にIsochronous Endpointで有効な考え方です。Audioを考えた場合、Busに送信されるデータ量はPCMのビット数やステレオ/モノラルによって大幅に変わります。
1byte(PCM) X 45(44.1kHz) X 1(モノラル) = 45 byte/ms
1byte(PCM) X 45(44.1kHz) X 2(ステレオ) = 90 byte/ms
2byte(PCM) X 45(44.1kHz) X 1(モノラル) = 90 byte/ms
2byte(PCM) X 45(44.1kHz) X 2(ステレオ) = 180 byte/ms
転送するデータ量にあわせてMax packet sizeを変更しないと、バンド幅を確保できずにクライアントS/Wとファンクションの通信を確立できないかもしれません。Alternative SettingはEndpointのMax Packet SizeをPCからの設定によって変更できる場合に使います。
Endpoint 0以外のEndpointは基本的(Shared Endpointという思想もありますが....)に複数のInterfaceで共有させることはできません。InterfaceとEndpoiの組み合わせを変更する場合には別のConfigurationとして準備し、Configurationそのものを変更して対応することになります。Configurationを複数持つ目的はこのためです。Device DescriptorはUSB規定されているリクエストのGetDescriptor Deviceによってホストによって読み込まれます。対象のドライバの検出はここに記載されているベンダID、製品IDまたはClass,Subclassを“Inf”ファイル内のドライバ リストと比較して行うかInterface Descriptorに記述されている Class、Subclass を“Inf”ファイル内のドライバリストと比較して行います。