eDP 链路层基本概念:主链路、辅助通道与热插拔检测

链路层的东西,说白了就是信号怎么在芯片之间跑通。eDP 接口有三条核心的物理通路:一条跑高速数据,一条跑管理命令,还有一条用来感知连接状态。这三条路各司其职,缺一不可。

我刚开始接触 eDP 时,总觉得链路层就是打个握手协议,后来被时序问题折磨了几次才发现——这三条通路之间的配合才是整个链路训练的命门。今天就带你把它拆开看透。

主链路(Main Link)结构

主链路是真正干活的那条路。芯片把像素数据、色彩信息、甚至音频包一股脑塞进去,高速送到显示端。

它的核心结构是 Lane(通道)。eDP 支持 1、2、4 通道三种配置。每个 Lane 都是一对差分信号(HBR 或 RBR 速率),独立传输数据。我做过一个 4K 60Hz 的项目,不得不用 4 Lane + HBR2 才撑住带宽。如果你只开 2 Lane,画面就会闪得你眼睛疼。

配置 Lane 数量 典型用途
1 Lane 1 对差分信号 低分辨率、低刷新率(如 1080p 30Hz)
2 Lane 2 对差分信号 1080p 60Hz 或 2K 30Hz
4 Lane 4 对差分信号 4K 60Hz 及以上,或 HDR

主链路的数据不是连续的。它会插入 空白时间(Blank),用于同步或传输辅助数据。你在做时序约束时,一定要知道 Blank 区域的存在——很多时序违规都是在这段“没事干”的时间里冒出来的。

另外,每个 Lane 有独立的 预加重(Pre-emphasis) 和 摆幅(Swing) 配置。我之前调试一块长线驱动的触摸屏,3 条 Lane 正常,唯独第 2 条 Lane 老是丢包。查了半天,居然是那根线的预加重没配够。这种问题在链路训练阶段很难抓,因为它不会报错,只会让你画面偶尔闪一下。

辅助通道(AUX)功能

辅助通道简称 AUX CH,是一条双向低速差分总线。它的速率只有 1 Mbps。为什么这么慢?因为它的职责不是搬数据,而是做管理。

AUX 主要做这三件事:

  • 链路训练(Link Training):源端和显示端会通过 AUX 交换训练状态、调整 Lane 数、调预加重、调摆幅。
  • EDID 读取:显示端里存着 EDID 表,告诉源端“我能支持什么分辨率、什么色深”。源端就是靠 AUX 把这个表读回来的。
  • DPCD 寄存器访问:DPCD 是一块寄存器空间,像个控制面板。我能读它也能写它。

AUX 的事务模型很简单——Request + Response。源端发一个请求,显示端回应一个 ACK 或 NACK。为什么很多人调试链路训练时总卡在第一步?就是因为 AUX 没通。我记得有一次,板子回来后 AUX 就是没反应,查了半天发现是 AUX 信号线上的电容没选对,导致信号畸变。

我个人的习惯: 做 PCB 布局时,AUX 差分对的走线长度尽量控制在 2 英寸以内,并且远离时钟线。AUX 本身速率低,但对噪声非常敏感——这是很多工程师忽略的点。

热插拔检测(HPD)机制

HPD 是一条单线信号。它不像 AUX 那样传数据,它只告诉源端一件事——显示器是不是还插着。

HPD 的物理层很简单:当显示器插好并准备好工作时,它会拉高 HPD 电平。如果拔掉了,HPD 就会拉低。源端检测到下降沿后,就知道链路断了,然后停止发送数据。

但这里有个坑——HPD 的时序要求很苛刻。

参数 最小值 典型值 说明
HPD 保持时间 2 ms — 拉高后至少维持 2ms 才算有效连接
HPD 去抖时间 — 100 μs 硬件去抖,防止抖动误判
HPD 中断脉冲 500 μs 1 ms 用于触发链路重训练

曾经有一次,我做的设备在客户现场间歇性黑屏。查了两天,发现是 HPD 去抖时间设得太短了——才 50 μs。插拔瞬间有个毛刺,被当成有效插拔信号,结果链路一会连一会断。把去抖时间改到 150 μs 后,问题就消失了。这种时序参数,你设计时必须留出余量。

另外,HPD 还有一个特殊功能——发送中断脉冲。当显示器发现分辨率变了或内容加密了,它会通过 HPD 主动拉低再拉高,通知源端重新训练。这个脉冲长度必须在 500 μs 到 1 ms 之间,太短了源端抓不到,太长了会误判为拔线。

注意: 做链路训练时,HPD 必须在 AUX 事务开始之前就稳定。如果你等到 AUX 已经跑了才发现 HPD 有抖动,轻则训练失败,重则损坏 AUX 缓冲区。这个顺序不能乱。

三者之间的交互关系

主链路、AUX、HPD 不是独立工作的。实际上,整个链路训练就是这三条通路协同的过程。下面这张图展示了它们的交互关系:

eDP 链路层核心结构及交互 eDP 链路层三通路交互关系 Source 源端 Sink 显示端 Main Link(主链路)→ 像素数据、视频流 AUX CH(辅助通道)→ 训练/EDID/DPCD HPD(热插拔检测)→ 连接/断开/中断 链路线路:主链路跑高速数据,AUX 跑管理,HPD 跑状态通知

你看,源端先读 HPD 确认连接,再通过 AUX 读 EDID,最后通过 AUX 完成链路训练,调好主链路参数。这一串流程只要有一个环节出问题,画面就出不来。

而且三者之间还有时序耦合。比如 HPD 拉高后,源端必须在 100ms 内启动 AUX 事务。如果慢了,显示端的 AUX 缓冲区可能会超时关闭,导致训练失败。

核心要点总结:
1. 主链路负责像素数据,Lane 数和速率决定了你能跑多高的分辨率。
2. AUX 通道负责链路训练、EDID 读取和 DPCD 访问,速率虽慢但很关键。
3. HPD 检测连接状态,去抖时间和中断脉冲长度必须按要求设计。
4. 三条通路必须协调工作,任何一条出问题都会导致链路训练失败。

我自己做链路训练时,最怕的就是 HPD 抖动和 AUX 超时。这两个问题往往不会直接报错,只会在高负载或长线缆时暴露。所以现在每做一个项目,我都会在板子上留出 AUX 和 HPD 的测试点,方便示波器抓波形。算是个笨办法,但真的好用。