ア | イ | ウ | エ | オ |
カ | キ | ク | ケ | コ |
サ | シ | ス | セ | ソ |
タ | チ | ツ | テ | ト |
ナ | ニ | ヌ | ネ | ノ |
ハ | ヒ | フ | ヘ | ホ |
マ | ミ | ム | メ | モ |
ヤ | ユ | ヨ | ||
ラ | リ | ル | レ | ロ |
ワ | ヰ | ヴ | ヱ | ヲ |
ン |
A | B | C | D | E |
F | G | H | I | J |
K | L | M | N | O |
P | Q | R | S | T |
U | V | W | X | Y |
Z | 数字 | 記号 |
Intelなど業界大手が中心となり策定した、汎用のシリアルバスインターフェイス規格。
USB 3.0では、Intelが中心となる「USB 3.0 Promoter Group」により策定された。
規格完成後は、USB規格の管轄団体である「USB Implementers Forum」(USB-IF)に、その管理を移管した。
標準化されている範囲内では、次の三種類の大きさのものが使われている。
標準コネクターである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.1 | USB 2.0 | USB 3.0 | |
---|---|---|---|
ホストコントローラー | OHCI/UHCI | EHCI | xHCI |
転送速度 | 1.5Mbps/12Mbps | 480Mbps | 5Gbps |
信号線 | 平衡/半二重 | 平衡/全二重 | |
トランザクション | ホスト制御、ポーリング、ブロードキャスト | ホスト制御、非同期転送、ユニキャスト | |
信号線 | 2本 | 6本 | |
供給電力(最大) | 500mA | 900mA |
ケーブル長は最大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という仕様もある。
Windows 98やWindows 2000以降で標準サポートされている。
登場当初は出足が鈍く、普及が危ぶまれた(当時はIEEE 1394が本命と考えられたため)ものの、Windows 98やiMacで標準対応したため徐々に普及した。
USB 2.0で速度が高速になったことなどから更に普及、もはやパソコンには無くてはならないものとなった。
信号レベルは、ロー・スピードとフル・スピードが、VIHが2.0V以上、VILが0.8V以下であり、つまりLVTTLレベルである。
対してハイ・スピードではHが360mV以上(一般的には400mV以上にする)、Lが10mV以下となる。
ロー・スピード機器が接続された場合、ターゲットはD−を1.5kΩ±5%でプルアップし、D−の信号レベルを「H」とする。
フル・スピード機器またはハイ・スピード機器が接続された場合、ターゲットはD+を1.5kΩ±5%でプルアップし、D+の信号レベルを「H」とする。
フル/ハイの識別は、USBリセット中に「Chirp」というプロトコルにより、ホスト/ターゲットの双方がハイに対応しているかどうかが確認される。
規格上は特に何層という名前は無いが、USBのプロトコル階層は上位層から順に、次のようになっている。
USB 2.0までと、USB 3.0とでは仕様が異なるため、以下はUSB 2.0までの仕様について記述している。
物理層の概要(信号線)は、上述の通りである。
信号レベルについては、次のような規定がある。
D+>VOH(min) かつ D−<VOL(max)
(D+)−(D−)>200mV かつ D+>IH(min)
D−>VOH(min) かつ D+<VOL(max)
(D−)−(D+)>200mV かつ D−>VIH(min)
D+とD−<VOL(max)
D+とD−<VIL(max)
D+とD−>VOSE1(min)
D+とD−>VIL(max)
Differential "0"
Differential "1"
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で示す。
フル/ロー・スピードモードでは、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のパケットは、大きく五種類の形式がある。
PIDは8ビット分あるが、有効は4ビットである。もう4ビットは、PIDの反転で、これによって送信中のデータ化けなどの対策としている(以下全てで同じ)。
8 | 4 | 4 | 7 | 4 | 5 |
SYNC | PID | PID | ADR | ENDP | CRC5 |
8 | 4 | 4 | 11 | 5 |
SYNC | PID | PID | フレーム番号 | CRC5 |
8 | 4 | 4 | 0〜1024バイト | 16 |
SYNC | PID | PID | データ | CRC16 |
8 | 4 | 4 |
SYNC | PID | PID |
8 | 4 | 4 | 7 | 1 | 7 | 1 | 1 | 2 | 5 |
SYNC | PID | PID | Hub Addr | SC | Port | S | E/U | ET | CRC5 |
ET欄は、次の通り。
msb/lsb | Endpoint Type |
00 | Control |
01 | Isochronous |
10 | Bulk |
11 | Interrupt |
先までの説明により、データの送受信が可能になる。但しこれは、TCP/IPで言えばTCPまでの世界。実際のデータ構造も時に重要であるが、これについては扱うものによって違う。
USB上で動作するプロトコルないしアプリケーションは、USBではデバイスクラスと呼ぶ。
デバイスクラスは1バイトのコードで表現され、クラスコードは、以下の何れかで通知する(実際のデータ構造は後述)。
bDeviceClassが0の場合、デバイスクラスの番号はbInterfaceClassに記載する。両者でコードの衝突はないが、どちらか片方でしか使われていないコードが多い。
デバイスクラスのうち、よく使われるものに以下のようなものがある。
USBで送られる実際のデータのうち、IN/OUTなどのディスクリプターは先頭2バイトが決まっている。
なお、一つのデータパケット中に、複数のディスクリプターが格納されることがある。この場合、長さ+タイプ+実際のデータ、長さ+タイプ+実際のデータ、…のように、定形のフォーマットが連続する構造になる。
bDescriptorTypeの値は、次の通り。
実際のデータのうち、SETUPは常に8バイトなので、IN/OUTなどと違い先頭に全体長がないなど、形式が違う。
wordサイズのデータは、リトルエンディアンである。0x1234は、0x34 0x12の順になる。
GET_DESCRIPTOR(device)の場合の例は、次の通り。
例) 80 06 00 01 00 00 12 00
このうち、bmRequestTypeはビットマップ形式であり、各ビットごとに、次のようなデータが含まれる。
bRequestの値は、次の通り。
コメントなどを投稿するフォームは、日本語対応時のみ表示されます