現代PCの基礎知識(7):仕様書を紐解くとわかる―本当はややこしいUSB

2016年12月21日(水)
沖 勝(おき まさる)

はじめに

今回はUSBについて解説する。Universal Serial Busの頭文字を並べたUSBは、自由に抜き差しが可能な有線接続の通信インタフェースとしてだけでなく、スマートフォンなどの小型電子機器への電源供給手段として最も身近なインタフェースだろう。そんな手軽で便利で身近なみんな大好きUSBだが、実際にはかなりややこしい存在なのだ。今回はそんなお話である。

ややこしいその1 巨大すぎる規格

USBの規格はUSB Implementers Forum, Inc.(USB-IF)という業界団体が策定し公開している。現在USB-IFから取得できる主な規格書は、以下のようなものだ。

  • Universal Serial Bus Revision 3.1 Specification
  • Universal Serial Bus Revision 2.0 Specification
  • Wireless USB Specification Revision 1.1
  • USB Power Delivery Specification Rev. 2.0
  • USB Power Delivery Specification Rev. 3.0, v1.0a
  • USB Battery Charging Specification, Revision 1.2

他にも、USBでサポートされるさまざまなデバイスに関する仕様もあるが、ざっくりした概要としては、USB 2.0とUSB 3.1がUSBの仕様として現行のものと言える(図1)。

なお、USB-IFが公開している「Universal Serial Bus Revision 3.1 Specification」はzipフォーマットで68.8MBというサイズで、zipファイルには下記のドキュメントが含まれている。

  1. The USB 3.1 Specification released on July 26, 2013 and ECNs approved through September 12, 2016
  2. USB 3.1 Appendix E: Repeaters
  3. USB 3.0 Adopters Agreement
  4. On-The-Go and Embedded Host Supplement to the USB Revision 3.0 Specification Revision 1.1 as of May 10, 2012
  5. Inter-Chip Supplement to the USB Revision 3.0 Specification, Revision 1.02 as of May 19, 2014
  6. USB 3.1 Device Class Specification for Debug Devices as of July 14, 2015
  7. USB Type-C Port Controller Interface Specification as of July, 2016
  8. USB Type-C Locking Connector Specification, March 9, 2016
  9. USB Type-C Cable and Connector Specification Revision 1.2, March 25, 2016 and ECNs
  10. USB Power Delivery Specification Rev. 2.0, Version 1.2, March 25, 2016 and ECNs, and corresponding Adopters Agreement
  11. USB Authentication Specification Rev. 1.0, March 25, 2016

1のUSB 3.1仕様だけで631ページという巨大なドキュメントで、総量を考えるとめまいがしてくる。これらはUSBデバイスの開発者も必要に応じて参照する類のリファレンスドキュメントであるが、一度頭から通読しても得られる知識は労力に見合わないと思われる。英語が苦手であればなおさらだ。本稿でも、必要に応じてドキュメント名と見出しを参照していくことにする。

ややこしいその2 複雑なコネクタ形状

「The USB 3.1 Specification (USB 3.1)」仕様の「5.2.1 Connectors」には、USB 3.1で定義されるコネクタの種類がリストアップされている。Table 5-1より表を引用する。

Receptacle (Standard or PD) Plugs Accepted (Standard or PD)
USB 2.0 Standard-A USB 2.0 Standard-A or USB 3.1 Standard-A
USB 3.1 Standard-A USB 3.1 Standard-A or USB 2.0 Standard-A
USB 2.0 Standard-B USB 2.0 Standard-B
USB 3.1 Standard-B USB 3.1 Standard-B or USB 2.0 Standard-B
USB 2.0 Micro-B USB 2.0 Micro-B
USB 3.1 Micro-B USB 3.1 Micro-B or USB 2.0 Micro-B
USB 2.0 Micro-AB USB 2.0 Micro-B or USB 2.0 Micro-A
USB 3.1 Micro-AB USB 3.1 Micro-B, USB 3.1 Micro-A, USB 2.0
6Micro-B, or USB 2.0 Micro-A

左がUSBデバイスの受け口、右は繋がるケーブルのプラグとなっている。AはUSBのホスト側(PCなど)、Bはデバイス側(周辺機器)だ(図2、図3)。この表を見て気づく方もいると思うが、かつてPSP(PlayStation Portable)などで一世を風靡したMini-BはUSB 3.1で定義されていない。また、転送規格と混同されがちなType-Cコネクタの記載がない点にも注目していただきたい。

図2:USB 3.1対応の標準Aコネクタ(受け口)。仕様で推奨されている通り青い

図3:USB3.0(3.1 Gen1)対応の標準Bコネクタ。Aコネクタと同様に青い

Mini-Bコネクタ(図4)については、USB 2.0仕様のzipに含まれる「USB 2.0 Specification Engineering Change Notice (ECN) #1」に仕様書への変更として定義が加わっている。写真で比較すれば一目瞭然だが、もともとの標準のBコネクタは大きすぎてモバイル機器などに搭載するには不都合があったことから作られたコネクタ仕様ということだ。

図4:PSPや初代PocketWiFiなどで使われて一世を風靡したminiB

もうひとつ見ておいていただきたいのは、USB 2.0 Micro-B(図5)とUSB 3.1 Micro-B(図6)の違いだ。実際に並べてみると一目瞭然だが、一般に我々がMicroUSBとしてなじみがあるのはUSB 2.0 Micro-Bである。MicroUSBの仕様にはMicro-BだけでなくMicro-Aも定義されているが、筆者は残念ながらこの目で実物を見たことがない。

図5:スマートフォンに使われているおなじみのmicroUSB

図6:主にポータブルHDDで使われているUSB 3.1 microB。なじみがない方もいるだろう

写真を見るとわかるというか皆さんご存知の通り、これらのコネクタには向きがあり表裏が逆だと差し込めないようになっている。よく確認せずに差し込もうとして逆だったという経験を持つ方も少なくないだろう。間違えに気づかず無理に差し込もうとすると壊れるのは本体側で被害甚大となることも多いが、このあたりは改めて注意喚起するまでもなく皆さん経験済みだと思う。この裏表問題についてはAppleのiOS機器が表裏の区別なく接続できる独自のLightning端子(USBの信号に変換できるがUSB仕様ではない)を採用し、一方で大半のAndroidスマートフォンはMicro-B端子を採用しており表裏問題を解消できていないのが実情である。

USB 3.1の標準Aコネクタは、USB 2.0と区別できるようにコネクタ内側のプラスチック材を青色(Pantone 300C)にすることが推奨されている。現在販売されている製品の多くが推奨通りのコネクタ・ケーブルを用意している。「青くなければ間違いなくUSB 2.0!」と断定してよいほどの強制力はないが、大よそは色を見て判断しても良いだろう。「高速なはずなのに速度が出ない」といったケースでは、本当にUSB 3.1に対応しているかを疑ってみてもいいかもしれない。

ややこしいその3 USB-C=USB 3.1ではない

標準化されたUSB端子で表裏問題を解消したのがUSB Type-C(USB-C)だ(図7)。世間的に認知度が向上したのはAppleのMacBookへの採用によるものだが、現在ではHPやDELLのノートPC、あるいは一部のAndroidスマートフォン製品などにも採用されている。

図7:超小型クラムシェルWindows PC、GPD WINの背面。一番左に見えるのがUSB-Cだ。右に見えるUSB-Aと比較すると小ささがよくわかる

USB-Cコネクタの仕様については、USB 2.0およびUSB 3.1それぞれの仕様ドキュメントzip内に含まれる「USB Type-C Specification Revision 1.2」で定義されている。このことからも、USB-CコネクタはUSB 2.0仕様の範囲内ということになる。「USB-CだからUSB 3.1のはずだ」と早合点してはいけない。

また、ケーブルの仕様も複雑である。仕様書によると、USB 2.0 Type-C Cableと呼ばれる、USB-C端子を持つがUSB 2.0の転送しかできずUSB 3.1として使えないケーブルと、USB Full-Featured Type-C Cableと呼ばれる、USB 2.0とUSB 3.1の両方に使えるケーブルが定義されている。

ややこしいその4 2種類あるUSB 3.1

USB 3.1の仕様書を読むとわかるが、USB 3.1にはGen 1とGen 2の2種類がある。Gen 1は転送速度5.0GbpsのPHY(ファイ:物理レイヤーが実装された回路)であり、Gen 2は10GbpsのPHYだ。仕様書内ではGen 1、Gen 2のどちらにも適用可能な物理レイヤーについてGen Xと記載することになっている。USB 3.1 Gen 1は「ほぼUSB 3.0」だと言っても良い(USB 3.0は転送速度5.0Gbps)が、単にUSB 3.1という表現がすなわち10Gbps(Gen 2)とは限らないことを覚えておきたい。

ややこしいその5 USBなのにUSBじゃない―Alternate Mode

USB-Cコネクタを用いるThunderbolt 3とUSB 3.1とは別モノである。USB-C仕様の「5.1 Alternate Modes」で定義されているUSBとは別種のデータ送受信を行うモードを使っており、そのようなデバイスはBillboard DeviceとしてUSBホストとネゴシエーションする。

Thunderbolt 3では40Gbpsの転送速度を実現しているが、対応する周辺機器の種類はそれほど多くなく、また高価だ。ケーブルもUSB-CのものではなくThunderbolt 3専用のケーブルを使う必要がある。本体側にUSB 3.1とThunderbolt 3どちらにも対応するUSB-C端子が用意されている製品もあるが、外見上からはおそらくThunderbolt 3対応であることを示す稲妻ロゴでしか区別がつかない。うっかりThunderbolt 3対応製品を買ってしまうことはないと思うが、逆にThunderbolt 3を使う場合には本体が対応しているかなど注意が必要だ。

Alternate Modeを使うものとしてはThunderboltの他にHDMIDisplayPortがある。例えばUSB-CとHDMIの変換アダプタがあったとき、一般のUSB接続モニターのようにUSBのプロトコルを用いて変換しているか、Alternate Modeで本体からのHDMI出力を透過しているか、本体側がAlternate Modeをサポートしているか、組み合わせによっては使えないケースが出てくる。本体と同じメーカー純正品であり、またアダプタ側に対応製品として記載があれば安心だが、「物理的な端子が同じだから大丈夫だろう」という常識は通じないことがある。

USB-Cに関する簡単なまとめ

USB-Cコネクタの付いたデバイスに対応する仕様は下記のいずれかである。

  • USB 2.0(480Mbps)
  • USB 3.1 Gen 1(5.0Gbps)
  • USB 3.1 Gen 2(10Gbps)
  • USB 3.1 + Thunderbolt 3(40Gbps)
  • USB 3.1 + Alternate Mode(e.g. HDMI)

これらも稲妻ロゴが付くThunderbolt 3を除くと、コネクタの外見からは区別できない(図8)。速度が遅くても繋がれば良いのであればそれほど気にしなくてもいいはずのところに、Alternate Modeという罠が潜んでいる格好だ。

図8:USB Type-C(USB-C)端子。稲妻ロゴがありThunderbolt 3対応であることが分かる

ややこしいその6 USB端子を経由した電源供給

USBの特徴の1つに「バスパワー」と呼ばれる電源供給が挙げられる。小電力のデバイスであればACアダプタや電池などを使わず、ホストあるいはUSBハブからの電源供給で動作できるため、電源配線の手間がなく手軽に扱えることは皆さんもご承知のとおりだ。

一般に、モバイルバッテリーのような電源供給に特化した製品では、1Aだの2Aだのと出力が記載されていることも珍しくない。では、USBによる電源供給はどの程度の電力を想定しているのだろうか?

USBの電源供給に関する規格はいくつかに分かれており、ざっくり書くと下記の通りだ(USB-IFのドキュメントに「W」と書かれているためそのまま転記するが、USB 3.0は5V 900mAなので単位はVAが正確と思われる)。

  • USB 2.0:2.5W
  • USB 3.0:4.5W
  • USB BC(バッテリー充電):7.5W

USB 3.1仕様においては「Table 11-2. DC Electrical Characteristics」に電圧や電流について記載されており、High Power Deviceの場合は900mAが最大と定義されている。しかしスマートフォンやポータブルHDDなど900mAを超える電力を要求するデバイスは数多くある。例えばUSB接続のLTEドングルの中には5V 1Aを要求するものがあるし、MacBookのようなノートPCに電力供給するにはさらに大容量が要求される。これらのデバイスをバスパワー供給で駆動させる場合、従来は供給できないか、あるいはホストやハブに規格を逸脱した電力供給を強いることになっていた。この上限を拡張し最大で100Wの電力供給を可能とする規格が「USB Power Delivery(USB PD)である。

USB PDの仕様書によると「標準Aと比較してUSB-Aのプラグ部分がPD対応のAでは1.3mmほど長い」と記載されている。受け口も差し込める長さが深くなっていて、奥まで届くことでPower Delivery対応であることを検知するという仕組みとのことだ。筆者もこれまでまったく意識したことはなかったが、そう言われるとずいぶん昔にケーブルを差し込んだ時わずかに余ることがあったことを思い出す。これはPD対応ケーブルをPD非対応の受け口に差し込んだケースだったのではないかと思うが、今となっては確かめようがない。

市販のケーブルなどを見ても「USB PD」なる記述は見当たらず、たいていは「2A対応、充電対応」という記述だけがあるようだ。また、結線も仕様に記載されたとおりに配線されているのか、実際に調べてみないと不明なことがほとんどである。

なお規格が作られた当初、USB PDで供給可能な電力はプロファイルが定義されており、ホストとデバイス間でネゴシエーションしてどのプロファイルを使用するかを決定していた。プロファイルはUSB PDの最新リビジョンであるUSB PD 3.0では非推奨となり、代わりにPower Ruleを使うことになった。USB PD 2.0までの標準だったプロファイルについては、下記のようなものが用意されていた。

  • PROFILE 0:reserved
  • PROFILE 1(default):5V 2A
  • PROFILE 2:5V 2A、12V 1.5A
  • PROFILE 3:5V 2A、12V 3A
  • PROFILE 4:5V 2A、12V/20V 3A
  • PROFILE 5:5V 2A、12V/20V 5A

Micro-Bコネクタを使う場合はPROFILE 4(60W)が上限で、PROFILE 5を使うには標準サイズのA/Bコネクタで接続する必要があるとのことだ。また、PROFILE 0を除きUSB PDに沿った電力供給を受けるには対応したケーブルが必要と明記されている。「PCからデバイスへの給電がうまくいかない」といった経験をした方がどのくらいいるかはわからないが、原因の一部はケーブルなどの組み合わせに未対応のものがあったということかもしれない。

USB PD 3.0のPower Ruleについては仕様書の「Section 10」に詳しく記述されているが、固定的なプロファイルを用意する方式から、より柔軟に供給可能な電力を定義できるようになっている。おそらくバスパワー給電で大電力を要求するUSBデバイスはUSB PDのどのリビジョンに対応しているか仕様に記載があるのではないかと思うが、ホスト側あるいはハブの仕様として記載があるか、実際にUSB PDで(対応と明記されない他メーカーの機器に)給電が可能かは未知数だ。

ややこしいその7 USB PDとは別規格のUSB BC

USB Battery Charging Specification(USB BC)はバッテリー充電に関する仕様である。仕様書を開くとPDがどうこうと書かれている箇所があるが、このPDは前出のPower DeliveryではなくPotable Deviceの略である。バッテリー充電に特化しているだけあり、充電器の検出方法や劣化したバッテリーの扱いなどの内部動作について事細かに規定されている。

ややこしいその8 USB接続周辺機器のキモ―デバイスクラス

デバイスドライバのソースコードに触れたことがある方なら一度は目にしていると思うが、USBデバイスはいくつかのクラス(Device Class)に分類されている。デバイスクラスをホストに申告することでネゴシエーションを行い、ホストから利用可能となる。

USB 3.1仕様の本体にはデバイスクラスについての具体的な言及はなく、別途デバイスクラス仕様としてUSB-IFより提供されている。ざっと並べると以下のとおりである。

  • Audio Class
  • Audio/Video Device Class
  • Battery Charging
  • Billboard Device Class
  • Common Class (CCS)
  • Communications Device Class (CDC)
  • Debug Device Class
  • HID Class
  • Mass Storage
  • Imaging Class
  • IrDA
  • Media Agnostic USB
  • Monitor
  • Personal Healthcare
  • Physical Interface Devices
  • Power
  • Printer Class
  • Smart Card Class
  • Test & Measurement Class
  • USB Type-C(TM) Bridge Class
  • Video Class

HIDデバイスとはキーボードやマウス、ゲームパッドなどを指す(Human Interface Device)。PCでUSB機器を使う場合の最も身近なデバイスクラスと言えるだろう。USB接続のポータブルHDDはMass Storageデバイスであることが多く、USBメモリ(フラッシュメモリ)はたいていがMass Storageデバイスだ。Windowsで「ドライバインストールが不要」と書かれている製品はUSB-IFが定義する標準のデバイスクラスとして動作する(Windowsに標準で組み込まれているドライバで動作する)ことを示している。

なお、各デバイスクラスにはより詳細な分類を示すサブクラスなるものも定義されている。またインタフェースプロトコルというフィールドで分類されることもある。例えば、前出のHIDで言えばサブクラスとしてBoot Interface Subclassが定義されており、BIOSでサポートが必要であることを示す。インタフェースプロトコルとしてはKeyboardMouseがサポートされている。

なお、上記の他にベンダー独自のデバイスを示すクラスもある。例えばUSB-Etherアダプターは製品によってCDCだったり、ベンダー独自だったりする。デバイスがCDCであればMacやLinuxでも使えるが、ベンダー独自であれば対応が明記されているOSに添付のドライバをインストールして使うしかない。筆者が昔使っていたUSB接続のADSLモデムはベンダー独自デバイスであり、泣く泣くWindows以外で使うことを断念したことを今でも覚えている。

Audioクラスとは異なるAudio Accessory Mode

Audioデバイスクラスはホストから受け取ったデジタルデータを音声出力するが、Autio Accessory Modeはアナログ音声をホストからそのまま流すモードだ。調べてみるとUSB-C仕様の「Appendix」に「A Audio Adapter Accessory Mode」として記載があった。USB-Cのどの端子を3.5mmジャックのどこにつなげればよいかなどが図示されており、通信プロトコルとしてのUSBとは無関係であることが分かる。以前iPhone7で「3.5mmヘッドフォンジャックが廃止されるのでは」という噂が流れたが(端子はLightningなので直接の話ではないが)、このAudio Accesory Modeが実装されることでUSB-C端子を持つスマートフォンやPCでもいずれ3.5mmジャックが廃止されるということが起こるかもしれない。

ややこしいその9 Vendor IDとProduct ID

サーバーやネットワーク機器を管理する場合、シリアルコンソール操作のためにUSBシリアル変換ケーブルを使うケースが多々ある。このUSBシリアル変換はたいていワンチップの変換ICで賄われ、比較的よく使われるチップがいくつかある。Windowsなどでは予め各チップに対応するVendor IDとProduct IDが登録済みで、USB端子に接続されるとIDを読みだして適切なデバイスドライバが動作する。

ところが「同じチップを使っている」と明記されているにもかかわらずWindows標準のドライバでは認識せず、製品添付のドライバをインストールしなければならない製品が存在する。なぜそうなるかというと、チップベンダーのVendor IDではなく、OEM先の会社のVendor IDを使うようにカスタマイズされているからだ。インストール情報であるINFファイルなどの編集を厭わないユーザーはテキストエディタでファイルを開き、該当するVendor ID部分を実際の製品に合わせて書き換えるといった荒業でしのぐこともある。LinuxやBSDなどではVendor IDやProduct IDをリストしているファイルにOEM製品のIDを次々と追記していたりする。新しい製品だとリストにないため、各自で追加することもある。Vendor IDとProduct IDの書き換えはAndroidスマートフォンをPCに接続してデバッグする際に接続準備として作業するようGoogleのドキュメントでも説明があるので、スマートフォンアプリを開発している人の中にはご存知の方もいるだろう。

まとめ

USBの仕様は巨大で、その仕様準拠の詳細をエンドユーザーたる我々が正確に知ることは難しい。また、その対応も製品によってさまざまである。

USBは単体でなくホストとハブ、デバイスとを組み合わせて利用することから、特定の組み合わせでは認識しなかったり、概ね動いていても速度が出なかったり、あるいは給電はできても充電ができなかったりといった動きを見せることがある。普段何気なく使いながらも「実はかなりややこしい」ということをうっすら覚えておき、トラブルが発生してもあわてず騒がず対応できる心構えを持っていただければ幸いである。

著者
沖 勝(おき まさる)
株式会社インターネットイニシアティブ
前職時代は「沖@沖」と名乗り、X68000用のフリーソフトウェアを発表していた。2001年より株式会社インターネットイニシアティブに勤務、自社開発の高機能ルータSEIL(ザイル)の開発に従事し、OS移植やデバイスドライバ開発などに携わった。2013年よりオープンソースソフトウェアLagopus(ラゴパス)の開発に従事、パケット処理機能の設計及びプログラミングを担当している。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています