サマリ
想定読者:技術仕様・規格に興味がある方 / 想定時間:25分~30分程度
第20回目のテーマは、USBの仕様について取り上げます。規格書(仕様書)を元に深堀していきましょう。前回からの続きになっていますので、USBの概要を把握したい方はそちらを事前にご覧ください。

#1 ”USB”とは通信規格を表す
さて、USBとは何でしょうか? いきなり哲学的な質問のようですが、解答としては”通信規格”になります。なんとなく概念のような使い方で世間一般に浸透していますが、実態はみんな通信規格を呼称しているわけです。
”規格”ですので、当然ルールが定まっています。こちらを今回の記事では深堀していきます。
USBは、”Universal Serial Bus”の略と前回記載した中で、名前にもある“シリアルバス“とは何でしょうか?
実はこちら、通信する際の信号伝達の種類を述べています。”シリアル”ということで基本的には1本の線に情報を詰め込んで伝送する手段を表します。例えば、糸電話を想像してみてください。両端にある紙コップの間には糸が1本だけしかなかったと思います。それでも、遠くに声が届きましたよね。まさにこれがシリアルバスを指している事例になります。
反対に、パラレルバスも実用としてあります。”パラレル”ということで複数本の線を意味しますので、シリアルと違い複数本の線を両端につなぎ、一気に情報を伝送する手段になります。例えば、パソコンのキーボードはこれを活用しています。ゲームなどをやる際に同時にタイピング(押)しても反応するかと思います。1本の線だけでつないでいたら同時に押しても反応しきれないですよね。(注:実際にはコストの兼ね合いから、全て1本1本独立しているわけでは無く、複数個所を束ねて走査していることが多いです)
転送速度やコスト、利用シーンなどに応じてシリアルかパラレルかは選択される中で、USBは”シリアル”通信に特化して高速化を目指してきたわけです。シリアルだからこそ、線数が少ないからこそ、ケーブルやコネクタが小さくなる最大の利点があります。
前回の記事では紹介できませんでしたが、とても大切な機能が一つあります。それは、影の立役者である“互換性”です。互換性とは、どのようなUSBのバージョン(1.1/2.0/3.2…など)であっても、問題なく通信(動作)できることを指します。例えば、USB3.2のコネクタにUSB2.0のケーブルを指しても問題なく動きますよね。
この仕様があるからこそ、ここまで一般的に普及してきた背景があります。バージョンが改良されること自体は良いことですが、そのたびに同じバージョン間しか接続できなかったら面倒すぎて使われなくなりますよね。これが可能になるように、意図的に規格(仕様)に組み込まれていますので、後ほど確認していきましょう。
これらの規格は一般公開されています。“USB-IF”のHPで通信仕様やテストデータ、認証などの規格書が閲覧可能(ダウンロード可能)になっていますので、こちらを今回はピックアップしてみていきたいと思います。(以下の図が参照先になります)

#2 1章~5章までで概要を理解する
それでは、規格書(技術仕様)を見てみましょう。今回の対象は”USB3.2“です。(URL:https://www.usb.org/document-library/usb-32-revision-11-june-2022)※上図です
こちらの資料は、全11章+付録で構成されています。少しづつ紐解いていきましょう。
まず、1章(初めに)、2章(用語と略語)で前準備です。本ドキュメントの背景や建付け、途中出てくるであろう専門用語や略語の紹介が書かれています。もし読んでいて疑問が出たらこちらに立ち返りましょう。(下図が2章のイメージです)

次に、3章(アーキテクチャの概要)で全体を理解します。例えば、図3.1には以下のような内容が書かれており、USB3.2が如何にしてUSB2.0との互換性を担保しながら動作するかの構想が描かれています。この解釈としては、USB2.0の機能自体は独立して存在しており、USB3.2として新たにEnhanced SuperSpeed Hostという機能を追加することで、相手がUSB3.2ならばこちらを使い、USB2.0なら2.0側の機能を使って通信することで、正常な動作を確立する仕組みになっています。これより、USB3.2には、(細かくはUSB2.0も同様に)通信の最初に、相手がどのバージョンかを認識するような確認が存在するとも推察できますね。
次に、図3.3には機能の全体像がマッピングされています。物理層からアプリケーション層まで4つのレイヤに分けて、どのような機能を用いてHostとDeviceが通信しているかが示されています。例えば、物理層(一番下)にはデータエンコーディング/デコーディング機能、リンク層にはリンクコントロール/マネジメント機能、プロトコル層ではリンクマネージメントパケット機能、デバイスホスト層ではUSBシステムソフトウェア機能といった感じですね。この後の章で各層における内容が深堀されるので、この章ではこのような通信をしているのか程度を把握できていれば大丈夫です。


この後に、4章(強化された超高速データフローモデル)、5章(メカニカル)でUSB2.0との違いなどを知ります。わかりやすい例として、4.3.1項には、以下の図のような形でUSB3.2とUSB2.0の違いを解説してくれています。例えば、「USB 2.0は半二重のブロードキャスト・バスですが、Enhanced SuperSpeedバスはデュアル・シンプレックスのユニキャスト・バスで、INとOUTを同時にトランザクションが可能です」などが書かれています。(※こちらは、”USB2.0は1本の線の中でダウンロードとアップロードを時間帯を分けてうまく融通していたけど、USB3.2では専用の線をそれぞれ用意したから高速化できたよ” ぐらいの解釈で大丈夫です)

#3 6章以降で通信仕様の詳細を理解する
6章以降からは詳細な仕様が説明されています。特に、6章(物理層)は、ハードウェアエンジニアであれば確認すべき内容になっています。
例えば図6.2は、シリアル通信をする際のデコーダー/エンコーダー仕様について紹介されています。8b/10bなど、まだ紹介していない単語もあるので聞いたことが無いかもしれませんが、イメージとしては、シリアル通信とのことから少ない信号線の中でも、如何に情報を”正しく”、また、”高速に”届けるかの工夫がされているという認識で大丈夫です。(あまりに踏み込むと1記事になるレベルですので、いったんここまでにします)
図の6.5は実際にHostとDevice間の通信を表しています。Txが送信側で、Rxが受信側を意味しています。USB3.2は基本的に送信側と受信側が1対1の関係なので、絵もシンプルに記載できています。(なお、図内の”p”/”n”については、positiveとnegativeの略で、2つ一気に送ることでノイズ耐性が上がる差動信号という技術が活用されています。こちらもかなりユニークな技術ですので、また別の機会に深堀したいと思います)
これ以外にも各種物理層の仕様が記載されているので、興味があれば参照してみてください。


次に、7章(リンク層)、8章(プロトコル層)、9章(デバイス・フレームワーク)は通信に関する制御が書かれています。
例えば図7.3/図7.4には通信の設定を行うヘッダーの詳細が書かれていますし、図8.2にはルート構築のための情報やデータ異常のチェック(CRC-16)などの仕様が書かれています。図が大きいので割愛しますが、図9.1にはUSBの通信における状態遷移も示されています。このように、どう制御するのか、どう状態遷移するのかなどの仕様が詳細に書かれていますので、興味があれば参照してみてください。


最後に、10章(ハブ、ホスト・ダウンストリーム・ポート、デバイス・アップストリーム・ポートの仕様)、11章(相互運用性と電力供給)は必要に応じて適宜参照するものになります。
例えば10章にはUSBハブ(USB接続の機器同士をつなぐ役割)の仕様が書かれていたり、11章には供給可能な電流量や異常と判定するリミッタの仕様などが書かれています。以下の図はUSBの電気仕様一覧となっており、High-power Hub Portであれば、電流の定格最小として1500mA(Dual lane)が保証されていると読めます。

かなり大量の仕様や専門用語が出てきて混乱されたかもしれません。この後は、一つ一つの動作の成り立ちをつぶさに見ていくよりは、まずどのように設計されて、製品が構築されるかの具体的なイメージを掴めるような内容を先に紹介できればと思います。
後々、これらが組み合わさることでUSBの仕様が成り立っていることのイメージが掴めるような記事も書きたいと思いますので、今回は”このような定義がされているんだなぁ”という感触を掴んでいただければ大丈夫です。