USB Type-Cで再スタートを切ったWindowsとUSBの関係、USB Type-Cとの関係を深掘りする

USB Type-Cで再スタートを切ったWindowsとUSBの関係

 Windowsでは、USBデバイスの大半は接続するだけで動作する。しかし、ここに来るまでには長い道のりがあった。最初のUSB 1.0の仕様書が公開されたのは1996年。その後1997年あたりからUSBを搭載するPCが販売されはじめたが、Windowsが対応したのは、1997年8月の「Windows 95 OSR2 USB Supplement」からだった。

 これは、Windows 95のPCメーカー向けのバージョンであり、一般ユーザー向けのパッケージではなかった。これに対応したPCでは標準でUSBに対応したが、実際のデバイスはほとんどなく、USBがまともに利用できるようになるのは、1999年のWindows 98 Second Editionあたりからだ。

USBとWindowsの関係の歴史

 Windows 95の登場前後から、PCには新しいインターフェースが次々と登場した。IrDA(1994年)、Bluetooth(1998年)、無線LAN(IEEE 802.11、1997年)などである。

 当時、IBM PC/ATをベースとしたアーキテクチャでは、「レガシー」なデバイスが多数使われていた。たとえば、RS-232に準拠した「シリアル」インターフェースや、IEEE1284(あるいはセントロニクス仕様とも)準拠などの「パラレルポート」、PCキーボードコネクタなどである。

 PC/ATでは、拡張ボードの増設が容易だったこともあり、周辺装置を接続するには、既存のレガシーなデバイスを使うか、拡張ボードを追加して利用するのが一般的だった。たとえば、当時のマウスの接続は、シリアルポートのものが多かったが、拡張ボードを接続する、俗に言う「バスマウス」もあった。その後、手軽さなどから、シリアル、パラレル、PS/2キーボードコネクタなどを利用する周辺機器が増えたが、特殊な接続や高速なデータ転送が必要な場合には拡張ボードの利用が必須だった。

 インテルとマイクロソフトは、1997年から「PC System Design Guide」を発行、PCの「近代化」に着手する。俗に「PC 97」「PC 98」といった仕様である。インテルは、レガシーなインターフェースを廃することによるシステムの高速化や単純化を狙い、マイクロソフトはWindowsの移植の容易さを狙った。

 ハードウェアメーカーが同じCPU、チップセット、周辺デバイスを使うことで、Windowsは容易に動作できるようになり、新しいハードウェアを有効に利用できるようになった。USBは、1999年のPC System Design Guide(PC 99)では、必須装備となった。

 PC System Design Guideにより、PCの「近代化」が急速に進む反面、PCの差別化は困難になり、多くのPCメーカーは、システムとしての統合性が高く、工夫を入れやすいラップトップがビジネスの主流となった。ラップトップなどのモバイルPCがデスクトップPCを追い越したのも2000年あたりである。

 USBは、1998年にはバージョン1.1、2000年にはUSB 2.0として最大480Mbpsとなる。その後、2001年にはWindows XPが登場する。

USBの最大の魅力は接続が簡単なこと

 USB周辺機器の接続が簡単なのは、Windowsが標準的な機器のデバイスドライバーを持っているからである。

 これが可能なのは、USBでは周辺機器を「デバイスクラス」で分類し、それぞれでのデバイスクラスで動作に必要なインターフェースなどを定義しているためだ。より簡単に言えば、USBメモリなどの「マスストレージデバイス」は、PC側からみると全部同じハードウェアのようにみえるようになっているのだ。

 このため、Windows側は汎用のUSBマスストレージデバイスクラスのデバイスドライバーを用意しておけば、どんなUSBメモリであっても、それがUSBマスストレージデバイスクラスに準拠しているものなら接続が可能なのである。

 現時点でのUSBデバイスクラスには、以下の表のようなものがあり、その多くにWindowsは対応している。

 ただし、各デバイスクラスには、サブクラスと呼ばれる動作が違うものがある。たとえば、USB通信デバイスクラスには、シリアルポートもあれば、モデムやイーサーネットなどがある。あるいはHID(Human Interface Device)クラスには、キーボードもあれば、マウスやジョイスティックなどがある。同じデバイスであっても、挙動の違うものも少なくないため、1つのデバイスドライバーで対応するというわけにはいかない。

 さらに、論理的なUSBデバイスを複数まとめた「複合デバイス」もあれば、1つの論理デバイスの中に複数の「インターフェース」を持つデバイスもある。USBのデバイスクラスでは、論理的なデバイスだけでなく、インターフェースも含まれている。

 Windowsでは、「フィルタードライバー」と呼ばれる仕組みを使うことで、デバイスドライバーの挙動を一部変えたり、メーカー固有の機能を制御するといったことが可能になっている。USB周辺機器に付属する「デバイスドライバー」にはこうした構成のものも少なくない。

 なお、Windowsが対応するデバイスクラスやサブクラスのデバイスドライバーがなくても、「汎用USBドライバー」とソフトウェアの組合せでデバイスを制御する方法がある。これが「WinUSB.sys」という仕組みだ。

 デバイスドライバーは、カーネルモードで動作するものであるため、その開発は簡単ではない。WinUSB.sysは、どんなUSBデバイスクラスとも組みあわせられる汎用のデバイスドライバーでその制御は、Win32アプリケーションからできる。アプリケーションは、WinUSB.DLLを介してWinUSB.sysを制御することができる。特定のアプリケーションとの組合せだけで利用するような場合には、この方法でUSB周辺機器を制御することが可能だ。

 なお、USBDeview.exeなどを利用すると、組み込まれたUSBデバイスの情報を表示できる。

Windows 10では、USB Type-Cに対応

 Windows 10の新しい機能としてUSB Type-Cに対応したことがある。USB Type-Cは、それだけではUSBの新しいコネクタのようにしか見えないが、実際にはUSBという仕様の「再スタート」版といえる。

 つまり、今後のUSBは、USB Type-Cを前提にして発展するものであり、その意味では従来のUSBコネクタ(Type-A、Type-Bなどと呼ばれる)は、「レガシーなUSB」になる。

 従来のUSBでは、OTGデバイス以外はホストと周辺デバイスの役割は固定されていたが、USB Type-Cでは、ホストと周辺機器という立場を入れ替えることもできるし、電源供給の方向も、ホストから周辺機器という方向だけでなく、逆に周辺機器側からホストへ、も可能だ。最近の多くのノートPCが対応しはじめたUSB Type-Cによる電源供給もUSB Type-Cだからこそできるものだ。

 こうした利便性が高い反面、USB Type-Cの制御は、簡単ではない。Windows 10では、このために、USB Role Switch(URS)やUSB Type-C Connector System Software Interface(UCSI)ドライバー、UCSIクラス拡張などを取り込んでいる。

 Role(ロール)とは役割のことで、USB Type-Cでは、ホスト/周辺という役割がある。USB Type-C以前は、この役割は固定で、PC側はホストと決まっていたが、USB Type-Cは、双方のネゴシェーションで、これを入れ替えることも可能になる。

 ただし、役割を入れ替えるには双方がUSB-PDに対応している必要がある。これは、USB-PDがネゴシェーション機能を含むからだ。USB Type-Cでは、ホストも周辺もコネクタは1種類だけであるため、逆にいうと、ホスト同士が接続されてしまう可能性もある。

 もちろん、これでPCが炎上するなんてことはない(USB-PDを実装していなくても、Type-Cでは相手の初期状態を取得できる)。双方のUSBコントローラーの実装にもよるが、USB Type-Cでは、ホスト同士の接続で、片方がイーサーネットデバイスをエミュレーションしてネットワーク接続を行うなんてことも可能である。

 あるいは、USB-PDにより、相手から電力の供給を受けることも不可能ではない。どうなるかは、コントローラーやOSの実装次第なのだが、従来のUSBでは御法度だった、ホスト同士の接続であっても使い道があるというのがUSB Type-Cの「新しい」ところだ。

 次回は、このあたりの話もう少し掘り下げることにする。

Windows 10とUSB Type-Cとの関係を深掘りする

 今回は前々回(USB Type-Cで再スタートを切ったWindowsとUSBの関係)の続き。Windows 10とUSB Type-Cの関係についてさらに深掘りしていきたい。

すでに登場から20年以上が経過したUSB

当初の12Mbpsから現在の20Gbpsまで高速化も進んだ

 そのUSB Type-Cは、USBを「再スタート」させるための仕様と言えるかもしれない。USBは、1996年に最初のUSB 1.0の仕様書が出た。当初のUSBの特徴としては、以下の要素が挙げられる

・USBが接続するのはホストとデバイス

・ホスト側にType-Aコネクタ、デバイス側にType-Bコネクタ

・1つのホストに最大127台のデバイス

・USB信号を分岐させるUSBハブ

・ホストによる5Vの電力供給

・データ転送レート1.5Mbps(Low-Speed)

・データ転送レート12Mbps(Full-Speed)

・デバイスは、クラス分けされ、基本操作が同一

 その後、USB 2.0では最大480Mbps(High-Speed)をサポートし、3.0では5Gbps(SuperSpeed)、3.1で10Gbps(SuperSpeedPlus)とさらに拡大した。

 USB 3.0では、信号線を変更する必要があったため、USB 2.0と互換性を持った新たなコネクタが採用された。USB 3.1はUSB 3.0の仕様を含み、これを置き換えるものであるため、SuperSpeedをGen1、SuperSpeedPlusをGen2と呼ぶことがある。

 そして最新の仕様はUSB 3.2。これは、SuperSpeedを2チャンネル同時に使うことで、最大20Gbpsに対応する。ただし、2チャンネル同時接続は、USB Type-Cのコネクタを使うときのみ可能である。さらに年内には最大40Gbpsを実現するUSB 4が登場予定だ。

 従来のUSBコネクタは、向きが決まっていて逆指しができず、使い勝手はよくない。昔ならば、こうした仕様側の都合が優先されるのは普通だったが、PCやスマートフォンが普及するにつれ、広く一般ユーザーが使うようになると、コネクタの区別や向き、ケーブルの種類といった複雑な仕組みは避けるべきという機運が高まった。

 また、USB 3.0でコネクタを変更したものの、主にスマートフォンなどで使われるmicroUSBでのUSB 3.0は、横幅が倍になって機械的に脆弱な部分があった。このため使い勝手をよくするのと同時に、今後の拡張などを考慮して作られたのがUSB Type-Cというわけだ。なお、前述のUSB 4の話を含め、今後登場するUSB関連の仕様は原則USB Type-C用のものとなる予定だ。

USB Type-Cの優秀さは

上下どちらでも挿せることだけではない

 USB Type-CコネクタはUSBの接続を1つの形状のコネクタでまかなう。ユーザーはUSB Type-Cデバイスであれば、ホストやデバイスといった種別を気にすることなく、USB Type-Cケーブルで接続すればよい。その際にホスト同士を接続しても、相手を正しく認識できるため、壊れてしまうようなことはない。

 USB Type-Cコネクタは、従来のType-AやBのコネクタよりも小さくなっているが、信号線は増えており、USB 2.0やUSB 3.2の接続を可能にするほか、役割や電力供給、ケーブルの向きやケーブルのねじれなどもデバイス同士でお互いを認識して自動判別を行う。信号ピンは全部で24本あり、ケーブルの着脱や向き、種別などを判定するための新しい信号線が追加されている。

 USB Type-Cでは、ホスト/デバイスという「役割」(ロール)は、お互いに入れ替わることが可能である。あるときはデバイスとして動作しているが、場合によっては、ホストにもなるという機器を作ることができる。

 また、電力供給の向きは、ホスト/デバイスという役割とは独立しており、デバイスだけど電力を供給できる「ソース」になる、ホストだけど電力供給を受ける「シンク」となることもできる。また、USB Power Delivery(USB-PD)という仕様により、5V以上の電圧の供給も可能だ。これは、ノートPCなどの充電も考慮した結果である。

 ただし現状のType-Cは、従来のUSB 2.0などと比べると、ケーブルのコストが高いだけでなく、一部に仕様を満たさないケーブルが出回っている問題もある。また、PCやデバイス、ケーブルの中には、コネクタはUSB Type-Cだが、中身はUSB 2.0のままというものもあってユーザーの誤解を招きやすい(そのこと自体は仕様としては問題ない)。

 コネクタにSuperSpeed/SuperSpeedPlusロゴがあればわかりやすいが、ロゴが省略されている場合もあり、見た目では判断できないケースがある。また、安価なUSB Type-Cケーブルは、USB 2.0接続用のものもあり、これを使うと、ホスト/デバイス双方がSuperSpeed/SuperSpeedPlusであっても、実際の接続はUSB 2.0相当になってしまう。

Windows 10で正式に対応したUSB Type-C

 Windowsは、Windows 10で初めてUSB Type-Cに正式に対応した。USB Type-Cの仕様成立が2014年8月、Windows 10の最初のリリースが2015年7月なので、対応には約1年かかっている。

 ただ、USB Type-CやUSB Power Deliveryに関しては、仕様策定が何回も行なわれ、特にUSB-PDに関しては、USB Type-Cの成立以前の2012年にUSB PD Rev:1.0という仕様が公開されている。この時点では、USB-PD専用のType-A/Bコネクタを使う予定だったのだ。

 しかし、実際にUSB-PD対応機器が登場したのは、USB Type-Cが成立して、USB PD Rev:2.0が成立してからである。そして2015年のUSB-PD Rev:3.0で、Type-C専用として仕切り直しがなされた。また、すでに市場に製品が出ていたUSB-PD Rev:2.0に関しては、一部を改訂したRev:2.0 Ver.1.2を作り、Rev:3.0との整合性をはかった。こうした経過があるため、Windowsでの対応が2015年のWindows 10以降という話は理解できなくもない。

 さて、USB Type-Cへの対応は、具体的には、

・デュアルロールへの対応

・USB-PDへの対応

・Alternate Modeへの対応(Billboardデバイスクラスの導入など)

という形で進められた。デュアルロールとは、ホストとデバイスという役割の入れ替えだ。

 ホストとデバイスを切り替えるのが「Role-Switch Driver」である。ホストとして動作するときには、「USB Host-side driver」スタックが有効になり、その上でUSBデバイスに対応したUSBクラスドライバが動作する。デバイスとして動作するときには「USB Device-Side Driver」スタックが有効になり、その上でFunction Class Driverが動作する。

 USBデバイスとして動作するときには、なんらかの機能を実現するFunction Class Driverがなければならないが、残念ながらWindows 10には、Function Class Driverは含まれていない。このため、ホスト同士をUSB Type-Cで接続しても、双方でUSBホストコントローラが有効になるだけで、特にお互いをデバイスとして認識することはない。

 USB Type-Cでのデュアルロールは、少し複雑である。USB-OTGではハードウェア(microUSBコネクタの信号ピン)でホストとデバイスを切り替えていたが、USB Type-Cでは、ロールの切替とは別に、電力供給をするのか(ソースデバイス)、電力供給を受けるのか(シンクデバイス)の切り替えもあるからだ。

 このため、ケーブル装着などのユーザー操作に応じて発生したイベントとハードウェアの機能、現在の状態などを考慮して、動作を決定する「ポリシーマネージャー」が必要になる(ポリシーマネージャーはUSB-PDで定義される機能)。

 ポリシーとは、他のデバイスに通知する自身の機能や電力関連の要求条件、要求に対する応答などを定義したもので、USB-PDデバイスの振る舞いを規定する。Windowsの「USB Type-C Policy Manager」は、基本的なWindowsのUSB-PDデバイスの振る舞いなどを定義したものだ。

 なお、ここにはドライバースタックすべてが含まれているわけではない。実際には、先ほどの図の「USB role-swtch drivers」の下にACPIドライバーやUSB Type-Cのコンローラーハードウェアがある。

 一般にPCのオンボードデバイスは、起動時にACPIがこれを検出して、Windowsの起動時にACPIドライバーがこれを列挙する。このため、USB Type-CコントローラーもACPIドライバー経由でロールスイッチドライバーに接続する。また、「USB Type-C Policy Manager」は、Windows側のポリシーマネージャーで、この下にBIOSや埋め込みコントローラーのファームウェアで実現されているPlatform Policy Managerがある。

 Alternate Modeは、USB Type-Cが規定するモードで、USB以外のインターフェース信号(たとえば、DisplayPortやThunderbolt3など)をUSB Type-Cコネクタ経由で送受信する仕組みだ。

 これを使うと、たとえばディスプレイとDisplayPortで接続しつつ、電力供給を受ける(USB-PD)やディスプレイの制御(USB 2.0デバイス)といったことが可能になる。USB Type-CのAlternate Modeは、原則USB Type-Cのハードウェアで行なうため、Windows側が直接Alternate Modeを制御することはない。しかし、Alternate Modeがエラーになったときには、Alternateデバイス側にあるUSBビルボードデバイスからエラー情報を得て、ユーザーに通知する必要がある。

 USB Billboardクラスデバイスは、いわばエラー通知専用のデバイスで、Windows側からは通常のUSBデバイスとしてアクセスが可能で、エラー情報を取り出すことができる。

 USB Type-CやUSB-PDへの対応は、PCの形状に大きな影響があった。最近のノートPCでは、専用の電源コネクタではなく、Type-Cコネクタを介した電力供給に切り替えるものが増えてきた。また、Type-Cコネクタが薄型であることから、従来USB Type-Aコネクタが足かせになっていたPC本体の薄型化なども可能にした。こうした形状の変化もWindows 10がまずまずのタイミングでUSB Type-Cに対応したからで、もし対応が遅れていたら、ノートPCはまだぶ厚いままだったかもしれない。

🍎たったひとつの真実見抜く、見た目は大人、頭脳は子供、その名は名馬鹿ヒカル!🍏