レガシーなI/Oポート(シリアル、パラレル、PS/2)が抱えていた最大の技術的負債は、IRQ(割り込み要求)の競合と、ホットプラグ非対応による運用コストの増大でした。Universal Serial Bus (USB) は、ホストコントローラ中心のポーリングアーキテクチャを採用することでこれらの問題を解決し、周辺機器の接続を標準化しました。本稿では、USB 1.xの物理層設計から、PCI ExpressやDisplayPortをカプセル化するUSB4のトンネリング技術まで、各世代における技術的課題とその解決策、およびエンジニアが理解すべきトレードオフについて詳述します。
1. USB 1.x/2.0:ホスト主導型ポーリングと差動信号
初期のUSB設計思想は「低コスト」と「堅牢性」に重きを置いていました。物理層では、D+とD-の2本の信号線を用いた差動信号(Differential Signaling)を採用し、ノイズ耐性を確保しています。論理層においては、デバイスが勝手にデータを送信できない「ホスト主導型」の通信プロトコルが採用されました。
NRZIエンコーディングとビットスタッフィング
USB 1.xおよび2.0では、データエンコーディングにNRZI(Non-Return-to-Zero Inverted)を使用します。これは信号の変化(遷移)で0を表し、変化なしで1を表す方式です。しかし、1が連続すると信号遷移がなくなり、クロック同期(Clock Recovery)が失われるリスクがあります。これを防ぐため、1が6回連続した後に強制的に0を挿入するビットスタッフィング処理が行われます。
2. USB 3.x:全二重通信と物理層の拡張
USB 3.0(SuperSpeed)の登場は、単なる高速化ではなく、アーキテクチャの根本的な変更を意味しました。従来のD+/D-ペアに加え、送信(TX)と受信(RX)専用の差動対を追加することで、全二重通信(Full-Duplex)を実現しています。これにより、読み書きの同時実行が可能となり、レイテンシが大幅に削減されました。
8b/10bエンコーディングによるオーバーヘッド
USB 3.0 (5Gbps) では、PCI Express Gen 2と同様の8b/10bエンコーディングが採用されました。これは8ビットのデータを10ビットのシンボルに変換して送信する方式で、DCバランスの維持とクロック埋め込みを目的としています。この変換により、帯域の20%がエンコーディングのオーバーヘッドとして消費されます。
// USB Descriptorの概念的構造(C言語ライクな疑似コード)
// ホストはこれ読み取り、デバイスの機能を特定する
struct USB_Device_Descriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdUSB; // USB仕様バージョン (例: 0x0300)
uint8_t bDeviceClass; // クラスコード
uint8_t bDeviceSubClass;
uint8_t bDeviceProtocol;
uint8_t bMaxPacketSize0; // エンドポイント0の最大パケットサイズ
uint16_t idVendor; // ベンダーID
uint16_t idProduct; // プロダクトID
// ... その他構成情報は省略
};
複雑化する命名規則と仕様の整理
USB-IFによる度重なるリブランディングにより、仕様名称は非常に混乱しやすい状態にあります。開発現場ではマーケティング名称ではなく、技術仕様(Gen X x Y)で識別することが推奨されます。
| 技術仕様 (Technical Spec) | 旧名称 / マーケティング名 | 最大転送速度 | エンコーディング |
|---|---|---|---|
| USB 3.2 Gen 1x1 | USB 3.0 / USB 3.1 Gen 1 | 5 Gbps | 8b/10b |
| USB 3.2 Gen 2x1 | USB 3.1 Gen 2 | 10 Gbps | 128b/132b |
| USB 3.2 Gen 2x2 | USB 3.2 | 20 Gbps | 128b/132b |
3. Type-CとPower Delivery:物理形状と電力制御の統合
USB Type-Cは、リバーシブルな形状だけでなく、CC(Configuration Channel)ピンによる高度なネゴシエーション機能を導入しました。従来のVBUS電圧監視による受動的な給電とは異なり、USB Power Delivery (PD) はパケット通信によって電圧(5V, 9V, 15V, 20V, 48V)と電流を動的に決定します。
Alt Modeとサイドバンド使用
Type-Cの強力な機能の一つがAlternate Mode (Alt Mode)です。これは、USBの高速データレーンの一部または全部を、DisplayPortやThunderbolt、HDMIなどのネイティブ信号に転用する仕組みです。この切り替え制御もCCピンを介したPD通信(VDM: Vendor Defined Messages)によって行われます。
4. USB4とThunderbolt:プロトコルトンネリング
USB4は、Intelから寄贈されたThunderbolt 3プロトコルを基盤としています。これまでの「USBパケットを流す」概念から、「PCIe、DisplayPort、USB 3.xパケットを多重化(Multiplexing)してトンネリングする」アーキテクチャへと進化しました。
動的帯域幅割り当て
USB4の最大の特徴は、帯域幅の動的割り当てです。例えば、40Gbpsのリンク上でビデオ出力に15Gbpsが必要な場合、残りの25Gbpsをデータ転送に割り当てるといった柔軟な制御がハードウェアレベルで行われます。これにより、従来のUSBのようにビデオ出力だけで帯域が固定的に予約される非効率性が解消されました。
# USB4における帯域幅管理の概念的ロジック
# 実際はファームウェアとコントローラレベルで処理される
def allocate_bandwidth(total_bandwidth, video_req, data_req):
reserved_video = 0
# 映像信号はアイソクロナス転送として優先確保
if total_bandwidth >= video_req:
reserved_video = video_req
else:
raise BandwidthError("Insufficient bandwidth for DisplayPort")
remaining = total_bandwidth - reserved_video
# データ転送に残りを割り当て(ベストエフォート)
allocated_data = min(remaining, data_req)
return {
"video_lane": reserved_video,
"data_lane": allocated_data,
"tunneling_overhead": calculate_overhead()
}
USB4 Version 2.0とPAM3変調
最新のUSB4 Version 2.0では、最大80Gbps(非対称モードで120Gbps)を実現するために、従来のNRZ(2値)からPAM3(3値パルス振幅変調)へ移行しました。これにより、同じクロック周波数でより多くの情報を伝送可能になりますが、信号対雑音比(SNR)の要件はより厳しくなり、基板設計やケーブル品質への要求レベルが格段に上がっています。
結論:適切な規格選定と将来展望
USB規格は「接続すれば動く」という利便性の裏で、物理層からプロトコル層まで著しい複雑化を遂げました。システム設計者やエンジニアにとって重要なのは、単に最高スペックを選択することではなく、必要な帯域幅、電力要件、および実装コスト(コントローラ価格や基板設計の難易度)のバランスを見極めることです。
レガシーなUSB 2.0は、その単純さと低コスト性から、IoTデバイスやHID(キーボード・マウス)において今後も長く現役であり続けるでしょう。一方で、大容量データ転送やドッキングステーションにおいては、USB4のトンネリング機能が必須となります。各世代のアーキテクチャ上の制約と特性を正しく理解し、用途に最適な規格を選定してください。
Post a Comment