『』正确理解 Thunderbolt 3 带宽与协议拓扑( 二 )


『』正确理解 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 控制器需要支持.


推荐阅读