正確理解 Thunderbolt 3 帶寬與協議拓撲

正確理解 Thunderbolt 3 帶寬與協議拓撲

自 2015 年 USB-C 開始普及以來, 它已經幾乎一統 Android 手機, 並且大多數筆記本都擁有一個乃至更多的 USB-C 接口. USB 3.1 gen2 於 Kaby Lake 進入 Intel 芯片組的支持, 今年 Ice Lake 出現了 ULV 平臺 CPU 原生集成的 Thunderbolt AIC.

然而目前這個協議所衍生的討論, 包括 USB PD, Alt Mode, eGPU 和速率之類的討論問題都不充分. 一個很簡單的問題, 很多人至今都無法理解為什麼 5gbps 的 USB 3.1 gen 1 居然也能傳輸 4K60 的 DP 視頻信號, 又或是單純的把 USB 3.0 和 USB 3.1 gen 1 的 5gbps 劃等號. 今天我來具體講一下到底是怎麼一回事.

正確理解 Thunderbolt 3 帶寬與協議拓撲

最古老的 USB 接口, 即是大家最熟的 Type-A 接口, 包含了四個引腳, 從左至右分別是:

  1. VBUS: 5V
  2. Data+
  3. Data-
  4. GND

可以看出中間兩個引腳起到的是數據傳輸能力, 而兩邊則是負責供電的 5V 和地線. USB 的數據傳輸, 就依賴中間 2-3 組成的 差分對. 之所以說 USB 是串口, 就是因為他利用差分對抗干擾的特性, 極大的提升了可用的傳輸頻率以提升帶寬. 這就常見於外部總線的設計. 而內存作為並口線, 有著對於延遲特別敏感的線路和多達 260 根引腳, 典型的顯卡顯存提升帶寬的方式也就是通過提升其位寬, 如當年 290X 高達 512bit 的位寬.

但是隻有一個差分對意味著數據只能單向傳輸. USB 協議在設計的時候有著 Master(Host)-Slave 的概念, 即電腦通常是 Host, U 盤這樣的外設是 Slave. 而傳統 USB 協議並不能實現 Host-Host 的對等連接. 所以這種情況下 Host 起到的就是控制這組差分對傳輸方向的作用, 這塊也叫做 BOT 協議. 這也就是為什麼 USB 1.0/1.1/2.0 都被認為是半雙工協議. 而這也大幅度降低了 USB 傳輸的帶寬. 就如 480Mbps 理論帶寬的 USB 2.0 來算, 實際上我們都知道大概 U 盤能在 2.0 下最大跑到的速度也就 35MB/s(280Mbps). 而這裡不得不提的就是對於 BOT 協議的優化, 部分 U 盤可能會帶上特別的驅動去調整 BOT 的 Block Size, 從而減少相對無用的控制信號的傳輸量, 從而將傳輸速率提升到 40MB/s 以上.

而所謂的 OTG, 就是移動設備通過 Micro USB 的額外一根引腳的特殊阻抗配置從而讓移動設備成為 Host, 這就是為什麼需要特殊線纜才能讓手機接 U 盤的原因. 此外 USB 2.0 時代也引入了 BC1.1/1.2, 這兩個協議和 Apple 2.4A 協議一樣, 都是在 5V 的框架下通過調整 D+D- 實現更大電流的輸出請求.

後來 USB 3.0 打破了原有的半雙工模式, 通過引入新的 5 根引腳實現了雙向 5gbps 通信.

正確理解 Thunderbolt 3 帶寬與協議拓撲

這五根引腳分別是 SSTX+/SSTX-/SSRX+/SSRX-/GND_DRAIN, 以通過增加兩組 8b/10b 編碼的高速差分對外加一根信號地提升抗干擾能力.

而 USB3.0 A 型接口通過特殊設計從而實現向下兼容 USB 2.0, 當然所謂的「USB 3.0 插入的慢變成 2.0 的隱患也由此而來」, 因為 2.0 的引腳會比 3.0 的更先接觸.

另外 USB 3.0 要求 900mA 的電流承載能力, 相比 USB 2.0 時代的 500mA 有了提升. 但是對於移動設備來說「五福一安」還是很弱的, 而 2.0 時代的 BC1.2 也因為電壓問題無法突破更大功率.

這裡就不得不提 USB 在系統層面的驅動設計了. USB 之所以通用, 是因為其協議很大程度依賴 CPU 層面去做的主動通信而非 USB 設備發起通信. 這裡舉一個例子, USB HID 鍵盤一個廣為人知的特性是隻能六個按鍵同時按下, 而更古老的 PS/2 鍵盤卻可以支持全鍵無衝. 這裡的原因是 USB 算是一個輪詢協議, 操作系統內核比如說集成了 USB HID 驅動, 就會定期去問「鍵盤, 你哪幾個按鍵按了」,鍵盤只能回答「按下的六個按鍵」; 而 PS/2 和一些串口鍵盤則是當用戶按下的時候主動通知系統有按鍵被按了, 並且這裡產生的是一個硬中斷.

正確理解 Thunderbolt 3 帶寬與協議拓撲

那麼這裡帶來的結果就是 USB 很大程度不是一個實時性的協議. 我們知道內存有嚴苛的時序要求, 在 USB 這裡其實是不存在的. 而 USB 另外一個特性是沒有 DMA 能力, 即不能像 PCIe 設備那樣通過共享內存的方式和 CPU 通信, 或者是實現 PCIe 和 PCIe 設備之間的通信. 同樣 Hub 之下的 USB 設備之間也是不能通信的.然而這也為設計 USB 驅動降低了複雜度, 這就是為什麼 USB 能夠通過用戶態庫 libusb 實現諸如自己寫個 python 程序黑 iPhone, 或者是用 libusb 轉發本地的 USB 設備包通過套接字接口穿透到虛擬機/其他網絡上的設備. 而 PCIe 若是要實現穿透則需要 CPU 的 IOMMU 單元實現所謂 vt-d 的虛擬化, 讓 PCIe 設備訪問 VM 的內存空間. 因為這種原因, USB 如果要輸出畫面, 比如說當初的 DisplayLink 協議, 就需要一種特殊閉源驅動才能工作. 這種驅動由於需要 CPU 主動去渲染(因為常見驅動無法欺騙物理顯卡產生屏幕)、採集畫面然後發送到設備上輸出畫面, 所以通常畫質不佳而且 CPU 佔用大.

正確理解 Thunderbolt 3 帶寬與協議拓撲

另外就是一個充電的老大難問題, 畢竟不能提升電壓. 而 QC 之類的協議也並非 USB-IF 認可. 此外就是經典的插拔問題, 已經是 MEME 級別的老大難問題. 於是 USB-C 以 Intel 為中心, 聯合 Google Apple 等廠商完成了標準化.

正確理解 Thunderbolt 3 帶寬與協議拓撲

可以看到這是 USB-C 的插頭定義, USB-C 是中心對稱, 而中間的 D- D+ 則是保留了對 USB 2.0 的兼容. 新增加的 CC/VCONN 則是為 PD 通信握手提供了支持. 而 SS 的差分對提升到了四對. 在通常的情況下有兩個差分對結合 8b/10b 編碼就可以實現 5gbps 雙工傳輸, 這就是 USB 3.1 gen1 的速率. 而 USB-C 新增加的 ALT 模式, 允許兩個至四個差分對用於 DP/TDMS(HDMI/DVI) 的信號傳輸. 而一個典型 DP 接口包含了四組差分對, 在有兩組差分對+DP1.2(HBR2)的情況下就能實現 1080P120Hz 的傳輸, 而四組則可以滿足 4K60 10bit的傳輸. 而 HDMI 則顯得坑很多. HDMI1.4 只有三組差分對, 最高也就只能實現 4K30, 而且因為協議問題不適合做類似 DP 的單線多屏幕. 因為三組差分對的問題, 理論上做 HDMI 1.4 原生的轉接頭會導致無法提供足夠的 USB SS 差分對. 所以實際上很多轉接頭採用的是利用兩組 HBR2 差分對傳輸, 利用 MST 分成兩塊屏幕並通過芯片轉化為 HDMI 1.4 和 VGA. 剩下還能有兩組 SS 差分對用於 USB 傳輸. 而 3.1 gen2 引入了 128b/132b 編碼, 從而將單個差分對的速度提升到了 10gbps. 然而這樣帶來的是命名的混亂. 很多人就以為 USB 3.1 gen1 5gbps 本質和 USB 3.0 一樣, 有的人把 USB 3.1 gen 2 當作 Type—C 相關的特性. 所以 USB IF 推出了 USB 3.2 明名規範, 把 USB 3.2 Gen 1x1 當作 3.1 gen1 和 3.0 的並集, 然後引入 3.1gen1x2 實現雙通道上下行; 3.1 gen2 變成 3.2gen2, 並且引入雙通道實現 3.1gen2x2 實現 20gbps 雙工... 但是實際上大家都抱怨這樣進一步加劇了命名的混亂程度.

而這裡就出現了一個問題, 由於 DP1.2 需要四組差分對才能實現 4K60 傳輸, 那麼 USB 高速傳輸怎麼辦? 那低端的 DP 轉接頭確實只有 USB 2.0 了. 而高端的則有兩種思路, 一種是通過將 USB 2.0 兩個差分對變成 SSTX/RX, 這種思路出現在 VirtualLink 上, 即 Nvidia 的顯卡上的 USB-C 接口支持這種操作; 疑似 Apple 似乎也實現了這種程度的複用. 另外一種是通過更先進的 HBR3, HBR3 相比 HBR2 速度翻倍, 這樣就能實現單線雙 4K 屏, Dell 的 DA300 就是這種思路. 然而 Intel 的集成顯卡並不支持 DP1.3, 所以這個需要獨立顯卡的支持, 外加 USB-C/Thunderbolt 控制器需要支持.

正確理解 Thunderbolt 3 帶寬與協議拓撲

同時可以注意到這種模式下 SBU 變成了音頻信道, 而 USB-C 也為那些去掉了 3.5mm 耳機的手機設計了一個音頻模式, 即把 USB 2.0 的引腳當作左右聲道, 一個 SBU 變成麥克風, 並提供了獨立的信號地線.

正確理解 Thunderbolt 3 帶寬與協議拓撲

最後一個介紹的就是 USB 3.0 時代引入的一個調試模式. 傳統的內核調試通常會依賴 CPU IRQ 上的 Serial 進行數據交互, 而現在可以通過 USB 實現 JTAG/Console 上與內核交互.

而 USB 4.0, 本質上就是 Thunderbolt. Thunderbolt 在 1/2 時代廣為人知的是和 DisplayPort 的互通性; 但到了 3 時代就讓人感覺到迷惑, 一個典型的例子是 Apple 發售的 TB2-TB3 轉換器, 很多人以為能輸出 DP 但是實際上不行. 而這個卻可以接 Thunderbolt Display. 這就說明 TB 傳輸 DP 信號和類似 USB-C ALT 引腳複用是兩個層面的技術.

Thunderbolt 另外一個特性就是可以連接 PCIe 設備. 實際上所謂的 40gbps 的理論速度是雙工對等狀態下的, 實際 Thunderbolt 可以按需調整兩邊帶寬, 比如可以實現 60gbps 的 TX 和 20gbps 的 RX, 這就為像是塞入兩個 DP1.2 信號帶來了可能; 同樣現在已經支持 DP1.4. 並且 Thunderbolt 內可以承載 USB 信號.


分享到:


相關文章: