USB (バス)
読み:ユーエスビー
外語:USB: Universal Serial Bus

 Intelなど業界大手が中心となり策定した、汎用のシリアルバスインターフェイス規格。
目次

概要

団体
 USB 3.0では、Intelが中心となる「USB 3.0 Promoter Group」により策定された。
 規格完成後は、USB規格の管轄団体である「USB Implementers Forum」(USB-IF)に、その管理を移管した。

沿革

コネクター
 接続に使用するコネクターUSBコネクターと呼ばれる。
 標準化されている範囲内では、次の三種類の大きさのものが使われている。
 標準コネクターであるAコネクターは約12mm×5mm角、デバイス専用のBコネクターは8mm角となっており、角形となるBコネクターの形状や発想は、任天堂のゲームボーイの通信ケーブルを参考にしたと言われている。
 
 但し、USB 2.0までと、USB 3.0では、端子数が異なる。USB 3.0の機能を使うためには、USB 3.0用のケーブルやUSB HUBなどを使用せねばならない。
 この他、特定の機器専用のコネクターも使われている。

バージョン
 USBには、次のバージョンがある。一つのネットワーク内で混在して利用できる。
 但し、USB 1.0/1.1/2.0とUSB 3.0では使用する物理層(信号線そのもの)が違う。機器としては混在可能だが、信号線そのものは混在していない。
 仕様の違いは次の通りである。
 USB 1.1USB 2.0USB 3.0
ホストコントローラーOHCI/UHCIEHCIxHCI
転送速度1.5Mbps/12Mbps480Mbps5Gbps
信号線平衡/半二重平衡/全二重
トランザクションホスト制御、ポーリング、ブロードキャストホスト制御、非同期転送、ユニキャスト
信号線2本6本
供給電力(最大)500mA900mA

特徴

ネットワーク
 USBはスター型接続のネットワークを形成する。
 ひとつのホストコントローラー(パソコン)に対し、最大6分岐までのHUBを介して、1ネットワーク上に最大127台の装置(ターゲット)をツリー型に接続することが可能。

ホストとターゲット
 ケーブル長は最大5m。
 あくまでも、USB ホスト コントローラー(パソコン)対各種周辺機器、という用途が想定されているため、通信は必ずホストを介して行ない、ターゲット同士で直接通信は配慮されていない(後からUSB On-The-Goが登場した)。
 その代わり、通信制御の面倒な部分は全てホスト側で行なわれ、機器側は単純な構成で利用可能とし、コストを低く抑えられるようになっている。

伝送速度
 伝送速度は、USBのバージョンごとに、次のようになっている。
 USB 2.0以降は、新規に追加されたモードのみ記載するが、古いモードも利用できる。
 元々は低速がUSB、高速がIEEE 1394という棲み分けが想定されていた。
 しかし、パーソナルコンピューターではIEEE 1394は全く普及せず、USBが普及したことから、こちらの高速化が行なわれることになった。
 USB 2.0仕様でハイ・スピード(480Mbps)が追加されたことで、帯域についてはIEEE 1394に対抗し得る規格となった。
 USB 3.0仕様では更に速度は10倍となり、シリアルATAの2倍速相当にまで高速化された。

バスパワー
 USB 1.1およびUSB 2.0では、ケーブルあたり+5Vで、ローパワーで100mA、ハイパワーで500mAを供給する。USB 3.0では、ケーブルあたり+5Vで100mA〜900mAを供給する。
 また、USB BC 1.2として、最大で1.5Aまで対応するようになった。
 それでも不足するようになり、USB PDとして最大100Wを給電できる規格が作られた。
 これらとは別に、独自拡張で最大6Aを供給するPowered USBという仕様もある。

利点
 接続する装置ごとに形態の異なるコネクターを用意しなくてよく、コスト、スペースに関してメリットがある。
 ホットプラグ(ダイナミックな抜き差し)を含むプラグアンドプレイに対応しており、取り扱いが比較的容易である。一台の周辺機器を複数のコンピューターで共用しやすい。
 このため、当初はモデム、プリンター、キーボード、マウスなどの比較的低速な機器で、かつ頻繁に抜き差しするような機器の接続に適しているとされた。
 USB 2.0からは高速化もなされた。専用のプロトコルには及ばないものの、日常で使う程度であれば、ハードディスクなどの接続にも十分な帯域がある。

対応するOS
 Windows 98Windows 2000以降で標準サポートされている。
 登場当初は出足が鈍く、普及が危ぶまれた(当時はIEEE 1394が本命と考えられたため)ものの、Windows 98やiMacで標準対応したため徐々に普及した。
 USB 2.0で速度が高速になったことなどから更に普及、もはやパソコンには無くてはならないものとなった。

技術

信号線(USB 2.0まで)
 USB 2.0までの信号線は4本で、信号ライン(緑D+、白D-)と電源ライン(赤VBUS、黒GND)がありコネクターも4ピンである。
  1. VBUS (+5V)
  2. D-
  3. D+
  4. GND
 ミニUSBmicroUSBには更に1本、USB On-The-Goで使うID信号が追加されている。
 信号線は差動(平衡)の半二重伝送である。但しEIA-232等と違うのは、物理層だけでなくその上位層も規定がされており、送信データは先頭にアドレスやエンドポイントの番号、最後にCRCを付けた、パケット単位で通信をするという点である。

信号線(USB 3.0)
 USB 3.0では、新たに5本の信号線が追加された。
 コネクターの寸法等は従来と変わらず、従来の4本(または5本)の信号線も変わらない。追加信号線は、標準コネクターであれば、プラグの奥の方に新ピンが加えられている。
 5本の内訳は、信号ライン(送信線、受信線が各2本)とGNDである。
 従来の4ピンとは独立して機能するため、既存のコネクターに接続すればUSB 2.0相当で利用可能な、後方互換性が確保されている。

信号レベル
 信号レベルは、ロー・スピードとフル・スピードが、VIHが2.0V以上、VILが0.8V以下であり、つまりLVTTLレベルである。
 対してハイ・スピードではHが360mV以上(一般的には400mV以上にする)、Lが10mV以下となる。

終端抵抗

抵抗値
 USBはバスなので終端抵抗が必要である。ただし、SCSIなどと異なり、USBの場合はホスト側(ICチップ)または機器に内蔵されているため、ユーザーが明示的に接続する必要はない。
 USBホストに何も接続されていない時は、D+/D-共にホスト内蔵の15kΩ±5%でプルダウンされており、信号レベルは「L」である。ホストは、この状態でD+/D-の変化を監視している。

速度の判別
 ロー・スピード機器が接続された場合、ターゲットはD-を1.5kΩ±5%でプルアップし、D-の信号レベルを「H」とする。
 フル・スピード機器またはハイ・スピード機器が接続された場合、ターゲットはD+を1.5kΩ±5%でプルアップし、D+の信号レベルを「H」とする。
 フル/ハイの識別は、USBリセット中に「Chirp」というプロトコルにより、ホスト/ターゲットの双方がハイに対応しているかどうかが確認される。

プロトコル

階層構造
 規格上は特に何層という名前は無いが、USBのプロトコル階層は上位層から順に、次のようになっている。
 USB 2.0までと、USB 3.0とでは仕様が異なるため、以下はUSB 2.0までの仕様について記述している。

物理層
 物理層の概要(信号線)は、上述の通りである。
 信号レベルについては、次のような規定がある。
 信号「0」と「1」で、状態「K」と「J」を表現する。
 なお、USBの場合は「1」を6個連続して送信した場合、送信する情報とは無関係に、次に「0」を送信して信号状態を変化させる。受信側は、この時の「0」は無視することになる。これをビット・スタッフィングという。

フレーム構造

全体
 USB 1.1では1ミリ秒のフレーム、USB 2.0のハイ・スピードでは125マイクロ秒(1/8ミリ秒)のマイクロフレームを単位とし、フレーム単位の時分割により各デバイスに少しずつ転送時間を割り当てる。
 全体の構成は、次の通り。
 [SOF][フレーム内のデータ][SOF][フレーム内のデータ]…
 フレームの構成は、次の通り。
 [SOF][トランザクション][トランザクション]…
 トランザクションの構成は、次の通り一つ以上のパケットからなる。
 [SETUP][DATA0][ACK]
 [OUT][DATA0/1][ACK]
 [IN][DATA0/1][ACK]
 データパケットはDATA0とDATA1のPIDを交互に(切り換えて)使用する。これにより、転送が正常かどうかを判断することができる。

信号
 USBのパケットは、SYNC(80H)に始まり、PIDなどがあり、EOPで終了する。
 EOPはD+とD-が共に "L" になり、それが2ビット期間続く状熊である(フル・スピードの場合)。
 フル/ロー・スピードモードでは、EOPはSE0 2ビット期間に続いて1ビット期間 "J" になることで示す。
 ハイスピードモードでは、EOPはビット・スタッフィング無しの8ビットNRZ 0111 1111で示す。EOPを示すファーストシンボルはEOP直前のラストシンボルの反転値となり、EOPパターンの終わりにドライバーはD+かD-ラインに流す電流を止め、ラインをhigh-Speed Idle Stateに戻す。
 フル/ロー・スピードモードでは、Idle Stateは "J" stateで示す。ハイ・スピードモードでは、high-speed Idle Stateは "D+=D-=0" stateで示す。

SYNC
 フル/ロー・スピードモードでは、8ビットNRZI KJKJKJKKで示す。
 ハイ・スピードモードでは、送信側は32ビットNRZI (KJKJ)7KJKKに変更されている。受信側は、条件により32〜12ビット長の可変である。
 ハイ・スピードモードでは400mVの小振幅の信号を使うが、このためノイズかSYNCかの判定をバスラインの変化だけで行なうことができない。USB 2.0では、はじめの4シンボルが期待のパターンと一致した時、初めてSYNCが開始したと認識する。このため、HUBを経由するごとに4ビット分のSYNCが欠けていくことになる。結果として、受信できるSYNCは、32シンボル-4シンボル×HUBの段数になる。

パケット構造

トランザクション
 USBは、複数のパケットを組み合わせて一つのトランザクションとし、複数のトランザクションを一つのフレーム中に格納できる。
 USBは、各USBデバイスに割り当てられたアドレスとエンドポイント番号によって通信先を特定し、通信が行なわれる。この通信先は、トランザクションの水準で指定される。
 各ファンクション及びHUBは、USB接続時に、ホストによって一つのアドレスが割り当てられる。接続の始めは必ずアドレス「0」が割り当てられ、その後、ホストによって1〜127の間のいずれかのアドレスが割り当てられる。

パケットの形式
 USBのパケットは、大きく五種類の形式がある。

USBトークンパケット
 PIDは8ビット分あるが、有効は4ビットである。もう4ビットは、PIDの反転で、これによって送信中のデータ化けなどの対策としている(以下全てで同じ)。
844745
SYNCPID ̄(PID)ADRENDPCRC5

SOFパケット
844115
SYNCPID ̄(PID)フレーム番号CRC5

データパケット
8440〜1024バイト16
SYNCPID ̄(PID)データCRC16

ハンドシェイクパケット
844
SYNCPID ̄(PID)

SPLITパケット
8447171125
SYNCPID ̄(PID)Hub AddrSCPortSE/UETCRC5
 ET欄は、次の通り。
msb/lsbEndpoint Type
00Control
01Isochronous
10Bulk
11Interrupt

実際のデータ

デバイスクラス
 先までの説明により、データの送受信が可能になる。但しこれは、TCP/IPで言えばTCPまでの世界。実際のデータ構造も時に重要であるが、これについては扱うものによって違う。
 USB上で動作するプロトコルないしアプリケーションは、USBではデバイスクラスと呼ぶ。
 デバイスクラスは1バイトのコードで表現され、クラスコードは、以下の何れかで通知する(実際のデータ構造は後述)。
 bDeviceClassが0の場合、デバイスクラスの番号はbInterfaceClassに記載する。両者でコードの衝突はないが、どちらか片方でしか使われていないコードが多い。
 デバイスクラスのうち、よく使われるものに以下のようなものがある。

ディスクリプター
 USBで送られる実際のデータのうち、IN/OUTなどのディスクリプターは先頭2バイトが決まっている。
 なお、一つのデータパケット中に、複数のディスクリプターが格納されることがある。この場合、長さ+タイプ+実際のデータ、長さ+タイプ+実際のデータ、…のように、定形のフォーマットが連続する構造になる。
 bDescriptorTypeの値は、次の通り。

CONFIGURATION ディスクリプター

ENDPOINT ディスクリプター

SETUP
 実際のデータのうち、SETUPは常に8バイトなので、IN/OUTなどと違い先頭に全体長がないなど、形式が違う。
 wordサイズのデータは、リトルエンディアンである。0x1234は、0x34 0x12の順になる。
 GET_DESCRIPTOR(device)の場合の例は、次の通り。
 例) 80 06 00 01 00 00 12 00
 このうち、bmRequestTypeはビットマップ形式であり、各ビットごとに、次のようなデータが含まれる。
 bRequestの値は、次の通り。

再検索