📚 第三章 数据链路
📄 一句话概括

HDMI 的版本号,本质是带宽的代号:1.4 是 10.2、2.0 是 18、2.1 是 48 Gbps。 为什么需要这么多?算一遍 4K 就知道,而且算出来的数几乎没有余量。

📝 本节和前面几节的关系

这一章讲数据链路,HDMI 是最贴近生活的一个例子:它就在你电视后面那根线上。 3.6.7 的 HIPPI 是并行,HDMI 是「并行转串行」之后的产物:四对差分线。

一、先算 4K 要多少

视频带宽的算法只有一条公式:像素数乘帧率乘位深乘三个颜色通道。

格式 像素时钟 MHz 需要 Gbps
1080p60 8bit 148.5 3.56
4K60 8bit 594.0 14.26
4K60 10bit 594.0 17.82
4K120 10bit 1188.0 35.64
8K60 10bit 2376.0 71.28

第一列那个「像素时钟」其实已经是总数:4K 是 3840 乘 2160,乘 60 帧是 4.98 亿像素每秒; 再算上消隐期,像素时钟就是 594 MHz。 所以第二列乘 24(三个通道各 8 位)就是第三列。 第三行 10bit 是个分水岭: 位深从 8 到 10,带宽多了 25%——这就是「HDR 很吃带宽」的全部原因。 第四行 4K120 翻倍到 35.6,第五行 8K60 再到 71.3。 所以「HDMI 2.1 的 48 Gbps」不是厂商想炫技:是 8K 和 4K120 逼出来的,少一点就装不下。

二、线速还要打折

上面算的是「数据速率」,线上跑的还得再加编码开销:

版本 线速 Gbps 数据 Gbps 刚好够用
HDMI 1.4 10.2 8.16 4K30 8bit
HDMI 2.0 18.0 14.4 4K60 8bit
HDMI 2.1 48.0 42.6 4K120 或 8K60

第三列是线速乘 0.85 左右(TMDS 的编码开销与 8B/10B 类似)。 关键是第二行:HDMI 2.0 能装 14.4 Gbps 的数据,而 4K60 8bit 需要 14.26。 余量只有 0.14 Gbps,也就是 1%。 这 1% 解释了一个很常见的现象:「同一台电视,换根线就闪屏」或者「4K 能上但 HDR 上不去」。 因为线材的衰减、接头的接触电阻,随便哪一项都能吃掉这 1%。 它不是「质量不好」,是「标准本身没留余量」。 第三行 48 Gbps 就宽裕了:42.6 的数据容量装 35.64 的 4K120,还剩 20%。 所以到了 2.1 这一代,「线材玄学」才真正缓解——不是因为线变好了,是因为标准终于给了余量。

三、它为什么算链路层

把 HDMI 放在数据链路这一章,不是凑数:它要做的事情和以太网几乎一模一样。

要做的事 以太网 HDMI
成帧 有帧头帧尾 有数据岛与包头
时钟恢复 从码流里提 从 TMDS 时钟通道提
纠错/检错 FCS 校验 BCH 纠错
链路训练 自协商 读 EDID 协商格式

四行全对得上:HDMI 有线序、有时钟、有校验、有「先问对方支持什么」的过程。 区别只在规模:以太网连几百万台设备、跑几公里;HDMI 只连两台、跑一米。 「一米」这个限制反过来决定了它的设计: 距离短,所以不用考虑长线衰减和冲突,可以把协议做得很简单。 这也是为什么 HDMI 线超过五米就开始不稳——它压根没为长距离设计过。 需要长距离时用的是另一套办法:HDMI over 光纤、HDBaseT(走网线,能到 100 米)。 本质上都是「把 HDMI 的信号装进另一个链路层里传」。 这个套路和 3.6.10 的 iSCSI 一模一样。

四、动手 Demo:HDMI 的版本号,其实是带宽的代号

按「像素时钟乘位深乘三通道」把五代格式算一遍,再对照三个版本的线速。 重点看 4K60 8bit 那一行:它和 HDMI 2.0 的余量只有 1%。

for name, pix, bits in (('1080p60 8bit', 148.5, 8), ('4K60 8bit', 594.0, 8),
                        ('4K60 10bit', 594.0, 10), ('4K120 10bit', 1188.0, 10),
                        ('8K60 10bit', 2376.0, 10)):
    print('%-13s %7.1f MHz %6.2f Gbps' % (name, pix, pix * bits * 3 / 1000.0))

for ver, line in (('HDMI 1.4', 10.2), ('HDMI 2.0', 18.0), ('HDMI 2.1', 48.0)):
    print('%-9s 线速 %5.1f -> 数据 %5.2f Gbps' % (ver, line, line * 0.85))

print('4K60 8bit 要 14.26,2.0 给 %.2f,余量 %.1f%%'
      % (18.0 * 0.8, (18.0 * 0.8 / 14.256 - 1) * 100))

实跑输出:

--------------------------------------------------------------------
HDMI 的版本号,其实是带宽的代号
--------------------------------------------------------------------
**HDMI 1.4 到 2.0 到 2.1,最大的变化只有一件事:带宽从 10.2 到 18 到 48 Gbps。**
**为什么需要这么多?算一遍 4K 就明白了。**

  格式             像素时钟 MHz     需要 Gbps
  --------------------------------------------
  1080p60 8bit     148.5            3.56
  4K60 8bit        594.0            14.26
  4K60 10bit       594.0            17.82
  4K120 10bit      1188.0           35.64
  8K60 10bit       2376.0           71.28

**第三列是「数据速率」,而 HDMI 还要再加一成编码开销**:
**TMDS 用 8B/10B 类似的方式,48 Gbps 的线速只装得下 42.6 Gbps 的数据。**
  版本         线速 Gbps     数据 Gbps     刚好够用什么
  -----------------------------------------------------------
  HDMI 1.4     10.2          **8.16**      4K30 8bit
  HDMI 2.0     18.0          **14.4**      4K60 8bit
  HDMI 2.1     48.0          **42.6**      4K120 10bit/8K60

**第二行 18 Gbps 的线速只装 14.4 的数据,而我们算 4K60 8bit 需要 14.26**——
**刚好卡着过,一点余量都没有。**
**这就是「HDMI 2.0 能上 4K60,但线材稍差就闪屏」的原因**:
**它没有余量,线材损耗一点就掉出可用范围。**
**第三行 48 Gbps 一下子宽裕了**:**所以 4K120、8K60、HDR 这些才有地方放。**
**「HDR 很吃带宽」不是玄学:**
**8bit 变 10bit,每像素多 6 个比特,4K60 就多出 3.6 Gbps。**
**这一节放在数据链路这一章,是因为 HDMI 本质就是一个链路层**:
**它有帧、有时钟恢复、有纠错、有「链路训练」。**
**这些和以太网要做的事情几乎一样,只是它只连两个设备、距离一米。**

注意「线速乘 0.85」和「乘 0.8」两个系数: TMDS 的实际编码开销接近 8B/10B 的 20%,所以业内常按 0.8 估。 用 0.8 算,18 Gbps 只装 14.4,而 4K60 8bit 要 14.26——余量 1%,这就是「刚好卡着过」的出处。 标准组织定 18 Gbps 这个数,就是照着 4K60 8bit 卡的。 「位深」这件事值得单独记一笔:8bit 每通道只有 256 级,暗部容易出现「色带」; 10bit 有 1024 级,色带消失。 所以 HDR 用户愿意为那 25% 的带宽买单——买的是「不再看到一圈一圈的渐变」。 还有一个常被忽略的通道:CEC 和 EDID。它们走的是低速的「显示数据通道」,不占视频带宽。 「插上就自动识别分辨率」「一个遥控器能控制电视和机顶盒」,全靠这条慢速线。 高速链路旁边永远要留一条低速控制链路——以太网的自协商也有点这个意思。

30 秒实验

  1. 算一下:4K60 12bit 要多少 Gbps?HDMI 2.0 装得下吗?
  2. 想一下:为什么 HDMI 线超过五米就容易不稳,而网线能跑一百米?
  3. 看一眼你电视的设置,它现在跑的是 8bit 还是 10bit?

常见误区

  1. 以为「HDMI 2.1 只是版本号变了」。 它把带宽从 18 提到了 48 Gbps,这是唯一重要的变化。
  2. 以为「4K 只要电视支持就行」。 线、接口、电视三者都要够,任何一环是旧版本就掉到低一档。
  3. 以为「HDR 是画质算法」。 它首先是带宽需求:10bit 比 8bit 多 25% 的数据。
自测三问(点开对答案) 1. 视频带宽怎么算? —— **像素时钟乘位深乘三个颜色通道**。4K60 8bit 就是 594 MHz 乘 24,得 14.26 Gbps。 2. 为什么 HDMI 2.0 上 4K60 容易闪屏? —— **14.4 Gbps 的数据容量对上 14.26 的需求,余量只有 1%**,线材稍差就掉出可用范围。 3. HDMI 凭什么算链路层? —— **它有成帧、有时钟恢复、有纠错、有链路协商**,和以太网做的事一样,只是规模小、距离短。

下一节看 iSCSI:把磁盘命令装进 TCP 里,代价是每层头。

相关笔记