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コネクターの形状や発想は、任天堂のゲームボーイの通信ケーブルを参考にしたと言われている。

左の角形がBコネクター、右の平たいのがAコネクター
左の角形がBコネクター、右の平たいのがAコネクター

但し、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 1.0/USB 1.1 (最大12Mbps)
    • ロー・スピード(1.5Mbps)
    • フル・スピード(12Mbps)
  • USB 2.0 (最大480Mbps)
    • ハイ・スピード(480Mbps)
  • USB 3.0 (5.0GT/s)
    • スーパー・スピード (5.0GT/s)
  • USB 3.1 (10.0GT/s)
    • スーパー・スピード・プラス (10.0GT/s)

元々は低速が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を給電できる規格が作られた。

  • 5V/500mA (USB 2.0)
  • 5V/900mA (USB 3.0)
  • 5V/最大1.5A (USB BC 1.2)
  • USB PD (USB Power Delivery)
    • 12V/3A (36W)
    • 12V/5A (60W)
    • 20V/3A (60W)
    • 20V/5A (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のプロトコル階層は上位層から順に、次のようになっている。

  • 実際のデータ (上位層)
  • パケット構造 (第4層)
  • フレーム構造 (第2‐3層)
  • 物理層 (第1層)

USB 2.0までと、USB 3.0とでは仕様が異なるため、以下はUSB 2.0までの仕様について記述している。

物理層

物理層の概要(信号線)は、上述の通りである。

信号レベルについては、次のような規定がある。

  • Differential "1"
    • オリジナルソース

      D+>VOH(min) かつ D−<VOL(max)

    • 最終的なターゲットでの要求

      (D+)−(D−)>200mV かつ D+>IH(min)

  • Differential "0"
    • オリジナルソース

      D−>VOH(min) かつ D+<VOL(max)

    • 最終的なターゲットでの要求

      (D−)−(D+)>200mV かつ D−>VIH(min)

  • single-ended 0 (SE0)
    • オリジナルソース

      D+とD−<VOL(max)

    • 最終的なターゲットでの要求

      D+とD−<VIL(max)

  • single-ended 1 (SE1)
    • オリジナルソース

      D+とD−>VOSE1(min)

    • 最終的なターゲットでの要求

      D+とD−>VIL(max)

  • DATA J state
    • ロー・スピードモード

      Differential "0"

    • フル・スピードモード

      Differential "1"

  • DATA K state
    • ロー・スピードモード

      Differential "1"

    • フル・スピードモード

      Differential "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
SYNCPIDPIDADRENDPCRC5
  • PID
    • 0001 E1 OUT
    • 1001 69 IN
    • 1101 2D SETUP
    • 0100 B4 PING
  • ADR=USBアドレス
  • ENDP=エンドポイント
  • CRC5=ADR,ENDPのCRC5
SOFパケット
844115
SYNCPIDPIDフレーム番号CRC5
  • PID
    • 0101 A5 SOF
  • CRC5=フレーム番号のCRC5
データパケット
8440〜1024バイト16
SYNCPIDPIDデータCRC16
  • PID
    • 0011 C3 DATA0
    • 1011 4B DATA1
    • 0111 87 DATA2
    • 1111 0F MDATA
  • CRC16=データのCRC16
ハンドシェイクパケット
844
SYNCPIDPID
  • PID
    • 0011 D2 ACK
    • 1010 5A NAK
    • 1110 1E STALL
    • 0110 96 NYET
    • 1100 3C ERR
    • 1100 3C PRE
SPLITパケット
  • Start-Split Transaction Token (SSPLIT)
  • Complete-Split Transaction Token (CSPLIT)
8447171125
SYNCPIDPIDHub AddrSCPortSE/UETCRC5
  • PID=1000 78 SPLIT

ET欄は、次の通り。

msb/lsbEndpoint Type
00Control
01Isochronous
10Bulk
11Interrupt
  • E/U E=SSPLIT時、U=CSPLIT時
  • CRC5=Hub Addr,SC,Port,S,E/U,ETまでのCRC5

実際のデータ

デバイスクラス

先までの説明により、データの送受信が可能になる。但しこれは、TCP/IPで言えばTCPまでの世界。実際のデータ構造も時に重要であるが、これについては扱うものによって違う。

USB上で動作するプロトコルないしアプリケーションは、USBではデバイスクラスと呼ぶ。

デバイスクラスは1バイトのコードで表現され、クラスコードは、以下の何れかで通知する(実際のデータ構造は後述)。

  • Device DescriptorのbDeviceClass
  • Interface DescriptorのbInterfaceClass

bDeviceClassが0の場合、デバイスクラスの番号はbInterfaceClassに記載する。両者でコードの衝突はないが、どちらか片方でしか使われていないコードが多い。

デバイスクラスのうち、よく使われるものに以下のようなものがある。

ディスクリプター

USBで送られる実際のデータのうち、IN/OUTなどのディスクリプターは先頭2バイトが決まっている。

  • +0 bLength (1バイト) ディスクリプターの全体長 (実際のデータ長+2)
  • +1 bDescriptorType (1バイト) ディスクリプター・タイプ
  • +2以降 ディスクリプターに応じたデータ

なお、一つのデータパケット中に、複数のディスクリプターが格納されることがある。この場合、長さ+タイプ+実際のデータ、長さ+タイプ+実際のデータ、…のように、定形のフォーマットが連続する構造になる。

bDescriptorTypeの値は、次の通り。

  • 標準
    • 1 DEVICE
    • 2 CONFIGURATION
    • 3 STRING
    • 4 INTERFACE
    • 5 ENDPOINT
    • 6 DEVICE_QUALIFIER (USB 3.0では廃止)
    • 7 OTHER_SPEED_CONFIGURATION (USB 3.0では廃止)
    • 8 INTERFACE_POWER
    • 9 OTG
    • 10 DEBUG
    • 11 INTERFACE_ASSOCIATION (Video Classで定義)
    • 15 BOS (Binari Device Object Store) (USB 2.0 ECNで定義)
    • 16 DEVICE_CAPABILITY (USB 2.0 ECNで定義)
    • 48 SUPERSPEED_USB_ENDPOINT_COMPANION (USB 3.0で定義)
  • クラス
    • 0x21(33) HIDディスクリプター
    • 0x24(36) CS_INTERFACE
    • 0x25(37) CS_ENDPOINT
    • 0x29(41) HUB
  • HID
    • 0x22(34) レポート
    • 0x23(35) 物理的

CONFIGURATION ディスクリプター

  • +0 bLength (1バイト) ディスクリプターの全体長 (常に9)
  • +1 bDescriptorType (1バイト) ディスクリプター・タイプ (常に0x02)
  • +2 wTotalLength (2バイト) 全体長
  • +4 bNumInterface (1バイト) INTERFACE ディスクリプターの個数
  • +5 bConfigurationValue (1バイト) Configuration番号
  • +6 iConfiguration (1バイト) STRING ディスクリプターのIndex番号
  • +7 bmAttributes (1バイト)
    • ビット7: 予約(1)
    • ビット6: Self Power(0/1)
    • ビット5: Remote Wakeup機能(0/1)
    • ビット4-0: 予約(0)
  • +8 bMaxPower (1バイト) 必要とするバスからの電流
    • USB 1.0-2.0までは2mA単位 (0x00〜0xFA=500mA)
    • USB 3.0は8mA単位 (0x00〜0x70=896mA)

ENDPOINT ディスクリプター

  • +0 bLength (1バイト) ディスクリプターの全体長 (常に7)
  • +1 bDescriptorType (1バイト) ディスクリプター・タイプ (常に0x05)
  • +2 bEndpointAddress (1バイト) エンドポイントアドレス
    • ビット7: 方向 (0 = OUTエンドポイント、1 = INエンドポイント)
    • ビット6〜4: 予約、常に0
    • ビット3〜0: エンドポイント番号
  • +3 bmAttributes (1バイト) 属性
    • ビット7〜6: 予約、常に0
    • ビット5〜4: Usage Type (Isochronous以外は未使用で0)
      • 00 = Data endpoint
      • 01 = Feedback endpoint
      • 10 = Implicit feedback Data endpoint
      • 11 = 予約
    • ビット3〜2: Synchronization Type (Isochronous以外は未使用で0)
      • 00 = No Synchronization
      • 01 = Asynchronous
      • 10 = Adaptive
      • 11 = Synchronous
    • ビット1〜0: Transfer Type
      • 00 = Control
      • 01 = Isochronous
      • 10 = Bulk
      • 11 = Interrupt
  • +4 wMaxPacketSize (2バイト) 最大パケットサイズ
    • ビット15〜13: 予約、常に0
    • ビット12〜11: マイクロフレームあたりの追加トランザクション数
    • ビット10〜0: 最大パケットサイズ(バイト単位)
  • +6 bInterval (1バイト) ポーリングの間隔

SETUP

実際のデータのうち、SETUPは常に8バイトなので、IN/OUTなどと違い先頭に全体長がないなど、形式が違う。

  • +0 bmRequestType (1バイト) リクエストの特徴
  • +1 bRequest (1バイト) Specific request
  • +2 wValue (2バイト) wordサイズの引数 (byte×2で使うこともある)
  • +4 wIndex (2バイト) wordサイズのインデックスまたはオフセット
  • +6 wLength (2バイト) wordサイズのデータ転送長

wordサイズのデータは、リトルエンディアンである。0x1234は、0x34 0x12の順になる。

GET_DESCRIPTOR(device)の場合の例は、次の通り。

例) 80 06 00 01 00 00 12 00

このうち、bmRequestTypeはビットマップ形式であり、各ビットごとに、次のようなデータが含まれる。

  • D7: Data transfer direction
    • 0 = Host-to-device
    • 1 = Device-to-host
  • D6…5: Type
    • 0 = Standard
    • 1 = Class
    • 2 = Vendor
    • 3 = Reserved
  • D4…0: Recipient
    • 0 = Device
    • 1 = Interface
    • 2 = Endpoint
    • 3 = Other
    • 4…31 = Reserved

bRequestの値は、次の通り。

  • 0 GET_STATUS
  • 1 CLEAR_FEATURE
  • 2 Reserved for future use
  • 3 SET_FEATURE
  • 4 Reserved for future use
  • 5 SET_ADDRESS
  • 6 GET_DESCRIPTOR
  • 7 SET_DESCRIPTOR
  • 8 GET_CONFIGURATION
  • 9 SET_CONFIGURATION
  • 10 GET_INTERFACE
  • 11 SET_INTERFACE
  • 12 SYNCH_FRAME

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club