IBM PC、PC/AT互換機からDOS/Vマシン、さらにはArmベースのWindows PC、M1 Mac、そしてラズパイまでがPCと呼ばれている昨今。その源流からたどっていく大原雄介さんによる解説連載の第8回。前回はPCのアーキテクチャを巡るIntelとMicrosoftの動きを描いたが、今回はそこでIntelの取り組みの成果の一つとして挙げたUSBのお話である。
USBはいろいろ失敗もある(というか、現在進行形で失敗し続けている気もしなくはない)が、それでも大成功したインタフェースである。そして単にPCだけではなくマイコン(※1)などでも普通にサポートされるようになってきており、加えてPD(Power Delivery)規格の普及もあって、既にPCという枠を超え、インフラに近い所まで発展しつつあるが、一時期は「PC=USBを装備しているもの」という時代が確かにあった。
※1: ここで言うマイコンは、連載第1回で出てきた方のマイコンではなく、MCU(Micro Controller Unit)として分類される、現在も広範に使われる8〜32bitのプロセッサの方。Raspberry PiとかRISC-V PCはここには入らない。ArduinoとかMbedボード、M5Stackなどに搭載されているやつのことだ
そのUSB、どうも調べた限りではかなり早い段階からUSB(というか、Universal Serial Bus)という名前でIAL(前回登場したIntel Architecture Labs)で開発が始まったらしい(誰がこの名前を思いついたのかはついに調べきれなかった)。そのUSBが生まれるきっかけになったのは、アジャイ・バット氏(写真1)である。
写真1:これは2002年にPCI-SIG DevConが行われた際のスナップ。基調講演の会場を自ら撮影しているバット氏だが、この15分後には壇上に立って自ら基調講演スピーチを行っていた。そういえばここ10年ほどお会いしてない(2016年にIntelを退職された)のだが、元気だろうか?当時バット氏はIntelのchipset architecture teamのsenior staff architectというポジションにいたのだが、自宅で奥さんのPCにプリンタをつなぐ作業中に、そのあまりの手間の掛かり方に軽くキレたようだ。
プリンタだけでなく、モデムやジョイスティック、スキャナーなど全ての周辺機器の接続には、当時それなりのスキルと忍耐力が必要とされていた……と書いても想像できない人の方が今では大多数だろう。ただバット氏、そこでキレて終わりにするのではなく、これを解決できる方法があると確信し、それに向けて動き始める。
USBのアイデアそのものは珍しくない。バス形式は高速シリアルで、ここはちょっと独創的というか当時高速バスといえばパラレル(セントロニクスがこちら)を使う方が多かったから多少勇気がいる決断ではあったが、他に例がないわけでもなかった(例えばAppleのGeoPort)。むしろ問題はそれがエコシステムに受け入れられるかどうか、の方だった。
ここで幸いだったのは、USBに先行して開発や規格化が進んでいたPCIの経験がフィードバックされたことだ。つまり標準化プロセスの作り方とか、どういうタイミングでどう仕様を公開してメンバーからのフィードバックを得るかとか、どうやってエコシステムパートナーを説得するか、といった事柄の多くは、PCIの開発の中で得られたものをフィードバックしたらしい。
バット氏は基本的なアイデアをまとめ、これをベースにIALでチームを組んで開発を始める。恐らくはここで基本的なPoC(Proof of Concept:概念実証)が終わった段階で、Intelは主要なメーカーに声を掛けた。DEC、Compaq、Microsoft、IBM、Northern Telecom、ECF(※2)というのがそのメンバーで、最終的にIntelを加えて7社(ECFの代わりにNECが入った)が最終的にUSB-IF(USB Implementation Forum)の創立メンバーとなった。ちなみにバット氏は1992年からIALにおけるUSBのChief Architectとなり、1996年までUSBの開発に携わっている。
※2:これはIntelのジム・パパス氏(現在の肩書はDirector of Technology Initiativesで、CXL Consortiumの議長も兼任中)へのインタビューで出てきた社名だが、このECFがさっぱり分からない。筆者は、これはNEC(それもNEC Americaの部隊)だったと記憶しているのだが
話を戻すと、USB-IFが公式に創立されたのは1994年のことだが、これに先立ち創立メンバーは水面下でいろいろ作業を行っていたようだ。
これに関してはIALのPCIに関する取り組みからのフィードバックが多かったと考えられる。例えば初期段階では不必要に参加企業を増やさないというのが一つ。多くのメーカーからの参加を募ると、船頭多くして船が山どころかエベレスト登頂を始めかねない。最小限の参加に留め、その中で議論を深めるのが効率的。参加者を多くすると合意を得るだけで数年を要したりしかねないからだ。
もう一つ重要なのは、「この企業が早期から参加して策定した規格だから、きっと良いものに違いない」と後追いの参加企業に思わせるようなメンバーを選ぶことだという。USBの例でいえば、IBMやCompaq、Microsoftといったメンバー企業が当初から参画していることで、「ああこれは将来のPCに必須な技術になるのだ」と思わせるに十分な効果を発揮していた(ちなみに後追いでHPもすぐに参加している)。
ちなみにこのメンバー企業を募る際にはSIG(Special Interest Group)とするのがIALの通例であり、実際PCIはPCI SIGという名称になったのだが、USBがUSB SIGではなくUSB-IFとなった理由を調べたが分からなかった。
USB SIGでもUSB-IFでもいいのだが、IALの方針としてもう一つ重要視されていたのは、標準化に当たってのIPの扱いだ。
これはSoC内部の回路の方ではなく、知的所有権の方。もっと正確にいえば特許だ。
要するにUSBの策定にあたり、どこかの企業が持つ特許に抵触する、あるいはUSBの実装に関連して特許を取り、その特許なしでは実装不可能にする、なんてことがあると普及の大きな妨げになる。これは上でちょっと出てきたAppleのGeoPortがその代表例である。
もともとはLocalTalkの後継というか拡張規格で、最大2Mbpsで通信できるようにしたもので、これで高速モデムを接続できるという触れ込みだった。実際AppleはこのGeoPortを利用してモデムを接続するためのMTA(Macintosh Telephony Architecture)というAPI(MicrosoftのTAPIに相当するもの)を開発し、さらにこのGeoPortとMTAをサポートするためにVersit AllianceをIBMやNovell、Siemensとともに立ち上げるなどがんばったのだが、GeoPortそのものの性能の低さや拡張性不足に加え、AppleがGeoPortでロイヤリティーを取ろうとしたことも致命的な理由の一つになり、結局Quadra 660AV/840AV辺りから一部機種で実装されたものの、消えてしまった。
Pippin Atmarkにも実装されていたらしいが、GeoPortが理由でPippinがダメだった、という悪口とPippinが理由でGeoPortがダメだった、という両方の悪口を目にしたことがある。多分どっちもダメだったのだろう。
USBを真に普及する規格とするためには、ロイヤリティーフリーで実装できることが必要というのがIALの方針であり、USBをIntel自身が主導するのではなく、USB-IFというある意味業界で中立な団体に任せたのもこうした意向による部分が大きい。
実際にはVender IDの取得とかCertificationの取得にコストは必要だが、これはある意味実費であって、またVender IDは安価(最近はちょっと値段が上がってOne Time Processingだと6000ドル、USB-IFのメンバーに参画すると無償で提供されるが参加費が年間5000ドルになる)であり、しかもこれは製品の出荷個数によらず一定金額である
ではIntelのメリットは? という話だが、これはIALそのものと同様に、短期的な利益ではなく長期的にPCの出荷台数が増えたり、周辺機器が増えたりしてマーケット全体が大きくなることがIntelの利益につながるというビジョンであり、そのための投資を惜しまなかったという話でもある。
話そのものをUSBに戻すと、1994年末には早くもRevision 0.8のSpecificationがリリースされる。ただ実際はここからが長かった。そもそもUSBはPCIと比較しても、実装上の難易度が高かった(PCIの話はまた次回に)。
ハードウェア的な観点でいえば、Intelがチップセット内にUSBのコントローラーを実装して提供していたから、マザーボードメーカーはUSBコネクターをチップセットにつなぐだけで、あとは周辺機器メーカー任せという話で実装の難易度は低かった。
1996年2月にIntelは430VX(Triton VX)および430HX(Triton II)とあわせて、APICとUSB 1.1をサポートしたPIIX3(82371SB)をリリースする(写真2)。
写真2:1995年にリリースされたPIIX(82371FB)と基本的には同じだが、図の下側の濃い部分(USBとAPIC)がPIIX3で追加された。出典はIntelの"82371FB (PIIX) AND 82371SB (PIIX3) PCI ISA IDE XCELERATOR"というデータシート1998年3月にリリースしたSpecification UpdateではErrataが15個(うち14個がUSB関連)で、しかもPIIX3のRevision Upで解消されるのはそのうち7つだけ(写真3)といった具合に、製品クオリティーに達しているとは言いがたいレベルだった。
写真3:Intelの"Intel 82371FB (PIIX) and 82371SB (PIIX3) PCI ISA IDE Xcelerator Specification Update March 1998"からの抜粋これをサポートするソフトウェアの方も大変だった。
USBを最初にサポートしたOSはWindows 95のOSR(OEM Service Release) 2であった(公式にはOSR 2.1以降)が、確かOSR 2の段階だと「UHCIは試したけどOHCIはテストしてない(当時OHCIのコントローラーの実物がないため、テストできなかった)」とかドキュメントに書いてあった始末で、実際OHCIだとうまく動かなかったりした。OSR 2.1で多少改善した記憶はある。
どういうことかというと、IntelはUSBのコントローラーをUHCI(Universal Host Controller Interface)という名称で提供したが、なぜか当初このUHCIのAPIとかを一切公開しなかった(その後、EHCIを公開した後で公開している)のである。それもあって、UHCIのライセンスを受けたVIA Technologies以外の互換チップセットベンダーはUSBのコントローラーを実装できなかった。
この対抗策としてOHCI(Open Host Controller Interface)という規格がCompaq、Microsoft、National Semiconductorの3社により策定された。ただこれは当然Microsoftを始めとするソフトウェアベンダーにとっては面倒以外の何物でもなかった。
この背景には、USBが複雑な動きをすることが挙げられる。USBはPlug & Playを実現する必要があり、このためには、
- 動的に接続/切断できる仕組みをハードウェアとソフトウェアでカバーする
- 接続されたデバイスが何かを認識して、それに合わせてドライバをダイナミックにロード/アンロードできる
が必要である。
おまけに、カスタマイズできる余地を残さないと差別化が出来ない。これをソフトウェア的に実現するため、ドライバは図1のように三層構造となった。最下位のハードウェア層は物理的にハードウェアであって、その真上にあるのがBus Driverである。ここはハードウェアを直接制御する部分で、USBのPlug/UnPlugとかデータの送受信など、純粋に物理的なアクセスの管理行う。この部分はハードウェアベンダーが提供するもので、UHCIならIntelなりVIAが、OHCIはそのコントローラーのベンダーがドライバを用意する。
その上位に位置するのがClass Driverである。USBではさまざまな「クラス」が用意されている。例えばキーボードとかマウスならHID(Human Interface Device) Classだし、USBスピーカーならAudio Classというように、製品カテゴリー別にClassを用意し、この中で「基本的な動作」をカバーする。例えばHIDなら、キーを押されたらそのキーコードを伝えるとか、マウスの動作に応じてその移動量を通知するとか左右ボタンが押されたことを通知するといったものだ。
基本的な動作はこのClass Driverが担ってくれるおかげで、A社のマウスをB社のものに置き換えても、取りあえず使う分には問題なく動作するというわけだ。
もちろん、中には複数の機能を持つものもある。最近の複合機(FAX/電話/スキャナー/メディアリーダー付きプリンタとか)だと、
- FAX/電話:Communication Device Class
- スキャナー:Imaging Class
- メディアリーダー:Smart card Class(モノによってはMass Storage Classか?)
- プリンタ:Printer Class
というように複数のClassに対応する場合もある。
この場合は複合機の側で「FAX/電話はCommunication Device Classで接続」「プリンタ機能はPrinter Classで接続」という具合に対応するわけだ。このClass Driverは通常OSベンダー(WindowsならMicrosoft)の責任である。
その上位に当たるのがFilter Driverである。例えば「1000ピクセル移動したらガーと鳴くマウス」が企画されたとする(本当にこんなマウスがあったらごみ箱直行だが )。
これを実装するのにマウスの中で移動量を検出するのはコストが上がりすぎるので、ソフトウェアで実装したい。が、Class Driverには手を入れられない(というか、入れたらまずい)。そこで活躍するのがFilter Driverである。この謎マウスを使う場合、移動量を監視し、累積で1000ピクセル移動したら「ガー」という音声を出力するようなユーティリティーを呼び出す、という仕組みをFilter Driverの中に仕込むことで、無駄に迷惑なマウスが追加のハードウェアコスト無しに出来上がるわけだ。
このFilter Driverは個々のUSBベンダーが勝手に作成して追加できる。このマウスをUSBポートにつないだだけだとただのUSBマウスだが、添付されているドライバソフト(と、ガーと鳴るユーティリティー)を追加でインストールすると、迷惑なマウスに早変わりするというわけだ。
このFilter Driverは複数重ねることもできる。
例えば先ほどFAX/電話はCommunication Deviceだと説明したが、FAXと電話では機能が違うし、他にも昔ならモデム、今ならWi-Fiとか3G/4G/5GのWWANモデムその他各種が全部ここに入ることになる。
そこで、大きなくくりではCommunication Deviceではあるが、小分類として電話用、FAX用、LAN用……と別々のFilter Driverが提供される(これは主にOSベンダーから提供されることが多いが、後追いで機器ベンダーから提供されるケースもあるというか、あった)。このFilter Driverに、「FAXを受けたらガーと鳴る」Filter Driverを重ねる、なんてことも可能になっている。
こうした3層のドライバ構造とすることで、やっとIntelやMicrosoftが長らく望んでいたPlug & Playの環境が実現できたわけだが、こんな複雑なものが一発でまともに動くわけがない。
Windows 95 OSR2ではUHCIのBus DriverといくつかのClass Driverが用意された程度。OSR 2.1になって「まともに動くUHCIのBus Driver」が追加され、OSR 2.5でClass Driverが大分マシになったとはいわれたものの、まだこの当時はマウス以外の用途ではいろいろ問題が多かった時代である。
Windows NT 4.0でもいろいろ問題は多く、ある程度まともになったのは1999年発売のWindows 2000の時代あたりからだったと記憶している。これはUSB-IF自体が定期的に(しかも頻繁に)PlugFestと呼ばれる相互接続性の確認を行うイベントを行い、ここに多くのメーカーが自社の機材を持って集まり、さまざまなプラットフォームやデバイスとの相互接続性試験を実際に行っていく中で、次第に互換性が高まり、安定性が増していったという裏の事情がある。
当初はClass Driverのインプリメントに問題があったり、Filter Driverの作り方の問題でシステムがクラッシュすることも珍しくなかったが、こうした問題も次第に減ってゆき、2000年に入ってからUSBは本格的にLegacy I/F(つまりPS/2マウス・キーボードや通信用のRS-232C、プリンタ接続用のIEEE 488など)を置き換え始める。特に2000年4月にUSB 2.0が登場すると、Storage Classの代替としても活躍するようになり、外付けデバイス用のSCSIが急速にシェアを落としていく。
USBの普及の一助となったのは、Appleが初代iMacでADBやSCSIポートなどを廃してUSBのみとしたことで、Macintosh向け周辺機器を製造していたメーカーが一斉にUSB対応に舵を切ったことだろう。
ただそれ以前からIALやUSB-IFは、この新しいI/Fが世界を変えると確信して地道に普及活動や品質向上、パートナー企業増加などを行ってきており、その結果としてPCとはUSBが使えるプラットフォーム」になった訳だ。
関連記事
からの記事と詳細 ( USBが誕生したのは「奥さんのプリンタをつなげる手間にキレたから」 USBの設計当時を振り返る - ITmedia )
https://ift.tt/3xJiXv5
確かに


No comments:
Post a Comment