今年3月3日に開催された(というか、この原稿を書いてる時点ではまだ絶賛開催中である)のCeBITで、USB-IFはSuperSpeed USB PIL(Platform Interoperability Lab)を開設したことをアナウンスした

今回はこちらの編集部では取材が無いようで(自分で行けとか言われそうだが)あれなのだが、会場ではお馴染みJeff RavencraftがUSB 3.0対応のSpecial SSDを持ち込んで、170MB/secでの動作デモを行っていたらしい(こちらの記事のスライド14・15枚目にデバイスやベンチマーク結果が掲載されている)。転送速度デモそのものはIDFでも行われていたが、この時はHost、Device共にFPGAで作成されており、プロトコル的には問題ないとは言え実際のデバイスではなかったから、やはり実際のデバイスを使ってのアプリケーションがとりあえず動作するようになった、というのは大きな進歩であろう。

また、こうした新規格に準拠したデバイスで相互接続性を確認しようとするときの問題は、最低でも2種類のHost/Deviceが無いと話にならない事だが、前回も触れたように既に2社がFPGAベースとは言えHost/DeviceのIPを提供しており、またNECがHost Controllerを、富士通がDevice(SATA Bridge)をすでに準備しているわけで、そういう点では相互接続性の確認を行いやすい状況になりつつあるのは間違いない。

さてそのUSB 3.0であるが、まず大枠の説明から入る事にしよう。USBにはUSB 1.1/2.0という2つのバージョンがあり、それぞれ異なるスピードとコントローラが用意される。USB 3.0はこのスキームに準拠している。

■表1
ホストコントローラ 転送速度 配線 トランザクション 備考
USB 1.1 OHCI/ UHCI 1.5Mbps/ 12Mbps 差動式・一対・半二重 Host制御、ポーリング・ブロードキャスト -
USB 2.0 EHCI 480Mbps 同上 同上 USB 1.1との完璧な下位互換性
USB 3.0 XHCI 5Gbps 差動式・二対・全二重 Host制御、非同期転送・非ブロードキャスト USB 1.1/2.0との完璧な下位互換性

表1にこれをちょっとまとめてみたが、USB 1.1の場合デバイスの転送速度は1.5Mbps(low-speed)と12Mbps(full-speed)で、1対(2本)の信号線からなる差動式伝送で、下り(Host→Device)と上り(Device→Host)で信号線を共有する形になる。当然同時に送受信は行えないので、ホストから制御する形で送受信を時分割で行う半二重形式となっている。また、USB Deviceは自発的にHostに対して要求を出すことは出来ない。このため、定期的にUSB Hostは全部のデバイスのPollingを行い、それぞれのデバイス毎の処理を行う事になる。Speedについては、例えばマウスとかキーボードなどはデータ量が少なく、かつ発生頻度も低いので1.5Mbpsを、USBサウンドとかではもう少しデータ量が多い上に常時転送が発生するので、12Mbpsを使うといった形が想定されていた。

このUSB 1.1、USB Host側の規格はUHCI(Universal Host Controller Interface)とOHCI(Open Host Controller Interface)の2種類があった。UHCIはIntelが採用した方式で、後にVIA Technologyも採用したが、基本的にはコントローラの詳細が非公開であった。そこでVIA/Intel「以外」のベンダーが制定したのがOHCIである。メインとなったのはCompaq/Microsoft/National Semiconductorであるが、当時のIntel/VIA以外のPC向けチップセットや、後には様々な8/16/32bit MCUなどにも採用されることになった。機能的な点ではさして違いが無い(厳密に言えば多少違いがあるが、ドライバレベルでこれが吸収されてしまっているので、まず意識する必要が無い)状況である。ちなみにOHCIのSpecificationはあちこち(例えばココ)から入手できるが、UHCIは未だに非公開のままである。

余談であるが、USB 1.1が世の中に出た当初といえばWindows 95とかWindows 98が主流であったが、Microsoftが標準で提供するマトモなドライバがUHCIのものしかない(というか、OHCI対応のドライバもあったが、「実際の製品が無い」という理由で殆どテストせずにリリースしていたたため、標準ドライバのままではまず動かなかった)という状況だった。これはWindows 98 Second Editionとか、その後に登場したWindows 2000などでは大きく改善されたが、やはり当初の普及の大ブレーキになったことは間違いない。そうした反省もあってか、USB 2.0ではIntelはEHCIのSpecificationを一般公開しており、この結果世の中に存在するUSB 2.0のHost Controllerはほぼ全てがEHCI対応となっている。

EHCIでは、表1に示すように480Mbpsの転送速度が追加された。ただし配線などは共用であり、要するにHostに繋いだDeviceがUSB 2.0対応ならば480Mbpsで、非対応ならば1.5/12Mbpsで接続するような構図になっている。面白いのは、USB 2.0はUSB 1.1との完璧な互換性を保っているが、EHCI自身はUSB 1.1には非対応である。この結果、例えばWindowsのDevice ManagerでUSBのコントローラツリーを展開するとこんな具合になる(Photo01)。

Photo01: IntelのICH7なので、USB 1.1のコントローラはUHCIである。

これを模式図化したのが図1だ。EHCIはその下に複数のポートをぶら下げる事ができるが、UHCI/OHCIは1つのコントローラあたり2ポートまでしかぶら下げられない事になっており、この結果例えばICH7ならばUHCIコントローラが4つも内蔵されることになっているわけだ。

(続く)