USB 3.xとかUSB-CとかDisplayPortとか

会社PCの更新があり、MacBook Pro 15-inch Retina 2015から、MacBook Pro 16-inch 2019になった。外観はほとんど変わらなかったけど、一番慣れないのはコネクタ。USB-C (Thunderbolt 3)端子しかないので、何かつなぐには、アダプタが必要になる。アダプタを選ぼうとしてすぐに、私物でもUSB-C端子はほぼ使っていなかったので、USB-CやUSB3.xについて何も知らないという事が分かった。それでいろいろと興味の赴くままに調べたのでまとめてみる。

USB 3.x

通信の規格。今までに二度規格が更新されていて、同じものの名前が上書きされている。ややこしい。昔の規格から順に追うと、

  • 初代の規格
    • USB 3.0 (5 Gbps)
  • 二代目の規格
    • USB 3.1 Gen 1 (5 Gbps = 初代3.0)
    • USB 3.1 Gen 2 (10 Gbps, 新規格)
  • 三代目(現行)の規格
    • USB 3.2 Gen 1 (5 Gbps = 初代3.0 = 二代目3.1 Gen 1)
    • USB 3.2 Gen 2 (10 Gbps = 二代目3.1 Gen 2)
    • USB 3.2 Gen 1x2 (10 Gbps, 新規格)
      • 規格としては存在するがあまり使われないらしい
    • USB 3.2 Gen 2x2 (20 Gbps, 新規格)

通称はこんな感じになっているっぽい。

  • USB 3.0 = USB 3.2 Gen 1
  • USB 3.1 = USB 3.2 Gen 2
  • USB 3.2 = USB 3.2 Gen 2x2

現行規格で追加されたGen Nx2は、3.1 Gen Nの通信に使う線を2倍に増やし、速さが2倍になった。

差動伝送 (differential signaling)

電線に信号を通す時、差動伝送では1対の電線それぞれに逆位相で電圧をかけてやり、受け側では2本の電位差を取り出す。こうすることで、外部からのノイズが乗ったとしても電位差は変わらないため、ノイズに強くなる(信号電圧を下げられる)。差動ペアは、差動伝送に使う電線のペアのことを指す。USB、DisplayPort、Thunderbolt、HDMIのデータ用電線は差動ペアである。

半二重、全二重 (half duplex, full duplex)

半二重は、1本(差動ペアの場合は1対)の電線を、TX/RX両方流れる方式。全二重は、RX・TXそれぞれ専用の線を使う。USB2.0までは半二重、USB3.0からは全二重になった。全二重は同時に両方向の通信ができる。

差動ペアと、半二重・全二重を両方合わせると、USBケーブルのデータ用信号線の本数(端子のピンの数)は、以下のようになる。

  • USB 2.0まで: 2本 (RX/TX共用差動ペア(2本))
  • USB 3.0/3.1: 4本 (RX用差動ペア(2本) + TX用差動ペア(2本))
  • USB 3.2: 8本 ( (RX用差動ペア(2本) + TX用差動ペア(2本)) x2)

なお、USB 3.x用のUSB Aコネクタ、BコネクタはRX/TXのピンが4つしかないのでUSB3.1までしか対応できず、USB 3.2の端子は仕様でUSB-Cのみとなっている。

USB-C

端子の規格。

端子のピンの用途は以下の図のようになっている。ここでは、USB 2.0専用のピンがあること、USB3.0/3.1のピンが2セット(レーン)あることを意識しておく。USB3.0/3.1の通信で使われるのは1レーンのみで、もう1レーンは単に使われない。

USB-C plug pin assignment
USB-C plug pin assignment

Alternate Mode

USB-CにはAlternate Modeというものがあって、USB以外の規格の通信を流す事もできる。DisplayPort, Thunderbolt, HDMIなど。

Alternate Modeで全てのピンを使う訳ではなく、USB2.0のピンを使わなかったり、USB 3.0のピンの半分(1レーン)しか使わない場合がある。その場合は、元の機能(USB2.0USB3.0)の信号を平行して流す事ができる。USB-CハブにUSBとDisplay Portが両方ついているのはこのため。EthernetやSDカードスロットは、内部のUSBハブから生えている。

DisplayPort Alternate Mode

USB3.1用のレーンと他いくつかのピンを使う。又、USB 3.1用のレーンを1つ使う事も、2つ(全部)使う事もできる。1レーン使う場合はもう1レーンでUSB 3.1の通信も流せるが、2レーン使ってしまうと、USB 3.1は使えなくなる。ただしUSB 2.0のピンは使わないので、USB2.0は同時に使える。

つまり、DisplayPortがあるUSB-Cハブに、USB 3.1の口がない場合、DisplayPortは2レーン使っていると思われる。逆にUSB 3.1の口があれば、1レーンしか使っていない。

f:id:naokton:20200802135500p:plain
USB-C Hub - DP 2 lanes

f:id:naokton:20200802135537p:plain
USB-C Hub - DP 4 lanes

なお、上図では、1差動ペアを1本の線で表している。又、DisplayPortのデータレーンは通信が片方向のため、DisplayPortの場合は1レーン = 1差動ペアで数える(ややこしい..)。 4レーン使う場合は2レーンの2倍帯域があるので、その分高解像度、高リフレッシュレートの画面情報を送る事ができる。

DisplayPortのバージョンと解像度

1ディスプレイの最大解像度の例(非圧縮(non DSC), 24bpp)

DPバージョン 最大転送速度/lane (伝送モード) 実効転送速度/lane 2レーン 4レーン
DP 1.2 5.40 Gbit/s (HBR2) 4.32 Gbit/s WQHD@60Hz 4K@60Hz
DP 1.4 (1.3) 8.10 Gbit/s (HBR3) 6.48 Gbit/s 4K@60Hz 5k@60Hz
DP 2.0 20.0 Gbit/s (HBR20) 19.3 Gbit/s 5K@60Hz 10K@60Hz

実効最大転送速度は、エンコーディングスキームに8b/10b (DP 2.0は128b/132b)を使っているため、ケーブルの最大転送速度の80% (DP 2.0は97%)になる。

Thunderbolt 3

Thunderbolt 3は端子としてUSB-Cを使っている。帯域幅は1差動ペアで 20 Gbps (DP 2.0と同じ。USB 3.1は10 Gbps)。2レーンあわせて40 Gbps。PCI Express 3.0、DisplayPort 1.2/1.4、USB 3.1をカプセル化して通信する事ができる。なお、同じThunderbolt 3でもチップの世代によって対応するDisplayPortのバージョンが違う。Macの場合はっきりした記事は見当たらないが、2018/2019あたりのMacBook Proから1.4に対応している模様。

又、Thundelbolt 3のコントローラーは、DisplayPort Alternate Modeにも対応している。つまり、Thunderbolt 3端子をもつPCはDisplayPortの信号を直接(Alternate Modeとして)出力する事もできるし、Thunderbolt 3プロトコルの中でDisplayPortを流す事もできる。USB-CハブにDisplay Portがついていたら、Alternate Mode、Thunderboltハブの場合はThunderboltで転送されている。

USB-C/Thunderbolt 3のHub/Dock

たいてい、USB-C(USB 3.x)/Thunderbolt 3のハブ/dockはSDカードスロットやらEthernetポートやらHDMIポートなどいろいろついている。速度や解像度については、USB-CのUSB 3.1端子の2レーンの使われ方に注意する必要がある。正直に記載していない場合や不自然に隠している事があるので、気をつける。特に4K@30Hzと4K@60Hzの違い。

USB-C (USB 3.x)のハブ/dockの場合

HDMI端子がついている場合、ハブまではDisplayPort Alternate Modeで流れていて、ハブ内でDisplayPort->HDMIへ変換している事が多いらしい。

解像度は、PC側のサポートするDisplayPortのバージョンによって変わってくる。DP1.2の場合は、USB3.1と4K@60Hzを同時にサポートする事は不可能なので、そのような製品があったら何かおかしいはず。DP1.4の場合は2レーンでも4K@60Hzを表示できるので、USB3.1を同時に使う事ができる。DPのバージョンを書いている製品は稀なので、DP1.2の頃のようにあやしい製品を判別できなくなってしまった。。

USB 3.1用端子を2レーン使っている場合、ハブ/dock側はUSB2.0しか使えない。1レーンのみ使っている場合は、USB 3.0/3.1および2.0が使える。

DisplayLinkを使う場合は話が変わってくるが、ドライバを入れないといけないので(入れるだけだが)、選択肢からは外したのでここでは触れない。ハブ/dockを選ぶときには、ドライバが必要と書いてあるものを避けた。

Thunderbolt 3のハブ/dockの場合

Thunderbolt 3は、USB-C端子のUSB3.1用レーンを全て(2レーン)使う。合計40 Gbps流せるので、ハブなどでDisplayPortやUSBも使える帯域幅もその範囲内で融通しながら最大限使える、のかな(未調査)。

4K@60Hzを15Gbpsと仮定して、USB 3.1で10 Gbps、USB2.0で0.5Gbps、合わせて30Gbps、割と余裕ありそう。4K@60Hzを2枚だときついかな。USB3.1がフルスピード出ないとか?

HDMIのバージョンと最大帯域幅(転送速度)

ついでにHDMIについて少々。

線の使い方

データ伝送はTMDS (Transition-minimized differential signaling)で行われる。differential pairとシールドの3本で1チャンネル。合計4チャンネルある。3チャンネルはそれぞれRGB(とその他オーディオなど)用で、もう1チャンネルはclock用(2.0bまで)。

f:id:naokton:20200802135750p:plain
Schematic TMDS link
Image by wdwd licensed under CC BY-SA 4.0

帯域幅

帯域幅を上げるには、まず信号の周波数を上げるか、使う線を増やす事が考えられる。又、エンコード方式を変える事でも、流れる実データの割合を増やし、実効データ転送速度を上げる事ができる。

周波数を上げる

たとえば1.0-1.2aは、1チャンネルあたり1.65 GHz (= 1.65 Gbps)だったが、2.1では12 GHzまで上がっている。

  • 1.0-1.2a: 4.95 (1.65*3) Gbps
  • 1.3-1.4b: 10.2 (3.4*3) Gbps
  • 2.0-2.0b: 18.0 (6.0*3) Gbps
  • 2.1: 48.0 (12*4) Gbps

信号線を増やす

HDMI 2.1では、データ伝送をTMDSからパケットベースの方式に変更し、クロックをパケットに含ませるようになった。そのため、クロックチャンネルが不要になり、4チャンネルを全てデータチャンネルとして使うようになった。これで3チャンネルのときと比べて4/3倍になる。

エンコード方式を変える

HDMI2.0bまでは、エンコードスキームに8b/10bを使っていたが、HDMI 2.1では16b/18bになった。つまり、ケーブルを流れるデータのうち元のデータが占める割合は、HDMI 2.0bまでは8/10=80%だったが、2.1では16/18=89%に増えた。帯域を有効に使えるようになった。

こうして見るとHDMI 2.1はだいぶ別物感がある。

参考URL