知らないうちに進化しているUSB
パソコンに何かを取り付けたいというときはRS232CやPCI接続だった遠い昔。USBが出現したときはなんて便利なんだと思う反面、PC独特の煩雑さが失われてさみしい気分だったのを覚えています。
そのときから何となく使っていたUSBですが、最近接続端子の色が青くなりました。見た目だけかなと思ったら、中にある接点も従来のものに比べて5本増えているのだそうです。
そのような感じでUSBについて何も理解していない自分に気づいたので、勉強し書き留めておきます。
USBの世代
技術の進化とともにUSBもバージョンを上げてきました。バージョンには1.0、1.1、2.0、3.0、3.1、3.2、4があります。
4に関してはまだよくわかりませんが、バージョン間は基本的に後方互換になっているのでコネクタの形状さえ合えば気にせず使えます。
2.0から3.0に代わる際に、コネクタが青色になりました。一般的なタイプAの青色のコネクタには従来からある4本のピンの奥に5本のピンが追加されています。
おもな世代の能力と規格の差です。
- USB1系
データ転送速度12MB/s(「full speed」と呼ばれます)、給電能力は5V/500mAまでです。
- USB2系
データ転送速度480MB/s(「high speed」と呼ばれます)、給電能力は5V/500mAまでです。ゲーブルの長さは5mまでです。
- USB3系
データ転送速度5GB/s(「super speed」と呼ばれます)、給電能力は5V/900mAまでです。ゲーブルの長さは3mまでです。コネクタに書いてあるssは「super speed」を意味しています。
- USB4
データ転送速度40GB/sとなる新しい規格です。
USB-TypeCにおいての給電能力は1.5Aだったり、3Aだったりするようです。ここでいう給電能力とはバスパワー(本体のUSB端子から電源を取る時)のことを言っています。Androidケータイやラズベリーパイの充電器側ではMicro Bの形状で2Aや3Aのものがあります。
これらの情報はQiita:「ためになるケーブルとコネクタの話 USB編」やWikipedia:ユニバーサル・シリアル・バスを参考にさせていただきました。ありがとうございました。
そもそもどうやって通信するのか
USBにデータ通信をどのようにしているのか気になってしまいました。
データは0と1で構成されます。その0と1を表すのに電圧の差を使っています。例えば2.0V以上をH(ハイレベル)、0.8V以下をL(ローレベル)とすることで0と1を作ります。
これはUSBに限ったことではなくRC232C等の多くの機器において電圧の差がデータ通信上の信号として利用されます。
RS232CとUSBで違うところはその電圧の差の作り方です。muRata:「高速の伝送が、なぜ差動伝送になっているのか?」にその詳細が載っています。
RS232Cではシングルエンド伝送方式で、複数の配線は一本のグランド線で戻る回路となっています。
一方のUSBは差動伝送方式で2本のデータ線を対にして利用し、互い逆相の電流を流します。そして対になった電位差で値をとります。また、電流は対のなかで戻りGNDには流れません。
ケーブル結線
次の図のようにケーブルは結線されています。1の5Vと4のグランド(0V)をバスパワーに使い、2のネガティブと3のポジティブで差動伝送をします。
バージョンが3.0になると、差動伝送の組み合わせが2本増えます(5,6,8,9)。この組はTX(送信)とRX(受信)の組に分かれます。またシールドされていて、従来からある2,3の組よりも通信速度が速くなっています。
ドレーンケーブルとはYahoo知恵袋の回答によれば、シールドに対してアースをとるために利用する線だそうです。
USB結線に関しては「【分解】 USB3.0ケーブルを完膚なきまでに分解する」を参考にさせていただきました。実際の分解写真がありよく理解できました。ありがとうございました。
今回はType-Aだけを紹介しましたが、Type-Bや、C、Micoroと結線の位置や数が違ってきます。Type-Cは端子が24個もあります。
USBホストコントローラ
USBはホストコントローラというPCとUSB機器の接続を仲介するハードウェアによって管理されています。この規格はUSB規格には存在しないため、ホストコントローラの規格は様々存在します。
バージョン1世代のホストコントローラにはインテルが開発した「UHCI(Universal Host Controller Interface)」、マイクロソフト他が開発した「OHCI (Open Host Controller Interface)」などがあります。
バージョン2世代には「EHCI(Enhanced Host Controller Interface)」、バージョン3世代には「xHCI(eXtensible Host Controller Interface)」があり、これらはともにインテルが開発しました。
他にもホストコントローラーは存在します。
デバイス・クラス
USBメモリやストレージをドライバのインストールなしで使えるのはデバイス・クラスという仕様群のおかげです。
「オーディオ」や「HID(Human Interface Device=マウスやキーボード)」の特性ごとに分類されたクラスID別に、共通のドライバが提供されているからです。クラスIDは00h~FFhの値でコード化されています。
ただし独自仕様等があり共通のドライバで処理できない場合は、別途ドライバが必要になります。