2. eDP 链路训练基础

eDP(Embedded DisplayPort)链路训练是主机(Source)与显示设备(Sink)之间建立可靠高速差分信号通道的初始化过程。其核心目的是在物理层上自动协商并锁定最佳的电压摆幅、预加重、均衡参数,确保数据在高速传输(通常为 1.62 Gbps 至 8.1 Gbps 甚至更高)时的比特误码率(BER)低于 1e-9。

核心目标: 链路训练并非传输图像数据,而是通过一系列握手和调整,使接收端能够稳定地从串行数据流中恢复出时钟和有效数据。

2.1 链路训练的目的

eDP 链路训练主要解决以下三个关键问题:

  1. 时钟数据恢复(CDR)锁定: 接收端需要从高速串行数据流中提取出同步时钟。没有正确的时钟,数据无法被采样。
  2. 信道均衡与补偿: 高速信号在 PCB 走线、连接器和线缆上传输时,会因趋肤效应和介质损耗而产生衰减和码间干扰(ISI)。训练过程通过调整发送端的预加重/去加重和接收端的均衡器来补偿信道损耗。
  3. 参数自动协商: 自动确定最佳的链路配置,包括通道数(Lane Count)、数据速率(RBR/HBR/HBR2/HBR3)、电压摆幅(Swing Level)和预加重(Pre-emphasis Level),以适应不同品质的线缆和 PCB 环境。
调试要点: 如果链路训练失败,通常表现为黑屏、闪屏或花屏。通过读取 Source 和 Sink 的训练状态寄存器(如 DPCD 地址 0x00202 - 0x00205),可以快速定位失败阶段。

2.2 训练阶段划分

eDP 链路训练遵循 DisplayPort 标准定义的四个有序阶段。每个阶段都有明确的进入条件、执行动作和退出标准。下表总结了各阶段的核心任务与关键信号:

阶段 英文名称 核心任务 发送端信号 接收端反馈
阶段 1 Clock Recovery 锁定接收端 CDR 电路,恢复出位时钟 D10.2 训练序列 (TS1) CR_Done 位 (DPCD 0x00202)
阶段 2 Channel Equalization 优化信道均衡,消除 ISI,降低 BER D10.2 训练序列 (TS1) EQ_Done 位 (DPCD 0x00202)
阶段 3 Symbol Lock 锁定字符边界,实现字节对齐 K28.5 逗号字符 (TS2) Symbol_Locked 位 (DPCD 0x00202)
阶段 4 Idle Pattern 发送空闲模式,准备进入正常数据传输 Idle Pattern (SCRamble) 无特定反馈,进入正常操作

2.2.1 阶段一:Clock Recovery(时钟恢复)

这是链路训练的第一步。Source 在所有已启用的 Lane 上发送固定的 D10.2 训练序列(TS1)。Sink 端的 CDR 电路尝试锁定该信号的频率和相位。只有当所有 Lane 的 CDR 都锁定后,Sink 才会将 CR_Done 位置位。

常见失败原因: 如果 CR 阶段失败,通常意味着物理连接存在严重问题,例如:差分对短路、断路、阻抗严重不匹配,或者 Source 与 Sink 的参考时钟偏差过大(超过 ±3000 ppm)。此时应优先检查硬件连接和时钟源。
阶段一:Clock Recovery 流程 Source 发送 TS1 序列 Sink CDR 锁定 反馈 CR_Done 状态 循环

2.2.2 阶段二:Channel Equalization(信道均衡)

在 CR 锁定后,Source 继续发送 TS1 序列,但此时 Sink 开始评估信道质量。Sink 可以请求 Source 调整电压摆幅(Swing)和预加重(Pre-emphasis)等级,以优化信号完整性。当所有 Lane 的误码率降低到可接受水平时,Sink 将 EQ_Done 位置位。

  • 电压摆幅(Swing): 控制差分信号的峰峰值,通常有 4 个等级(400mV, 600mV, 800mV, 1200mV)。
  • 预加重(Pre-emphasis): 在信号跳变时增加瞬时幅度,以补偿高频损耗,通常有 4 个等级(0dB, 3.5dB, 6dB, 9.5dB)。
调试技巧: 使用示波器测量 Lane 上的眼图。如果眼图张开度不足或眼高过低,说明均衡参数不匹配。此时应检查 Source 是否按照 Sink 的请求正确调整了 Swing 和 Pre-emphasis 寄存器(DPCD 0x00103)。

2.2.3 阶段三:Symbol Lock(符号锁定)

此阶段 Source 将训练序列切换为 K28.5 逗号字符(TS2)。K28.5 是一种特殊的 10-bit 码字(0011111010 或 1100000101),具有唯一的位模式。Sink 利用该模式在串行比特流中定位 10-bit 字符的边界,实现字节对齐。当所有 Lane 完成对齐后,Symbol_Locked 位置位。

阶段三:Symbol Lock 字节对齐 未对齐比特流: ... 0 1 0 1 1 0 0 1 0 1 | 1 0 1 0 0 1 1 0 1 0 ... 对齐后字节: Byte 0 Byte 1 Byte 2 Byte 3 K28.5 逗号字符用于识别字节边界

2.2.4 阶段四:Idle Pattern(空闲模式)

这是链路训练的最后阶段。Source 停止发送训练序列,转而发送经过扰码(Scramble)的空闲模式(Idle Pattern)。Sink 确认收到空闲模式后,链路训练成功完成。随后,Source 可以开始发送有效的主链路视频数据(Main Link Data)。

验证方法: 训练完成后,读取 DPCD 寄存器 0x00202 的值应为 0x07(CR_Done + EQ_Done + Symbol_Locked 全部置位)。如果该值不正确,说明训练过程存在未解决的错误。

2.3 训练阶段状态机总览

以下 SVG 图展示了 eDP 链路训练的完整状态机转换过程,包含四个阶段之间的跳转关系以及失败重试机制。

eDP 链路训练状态机 Clock Recovery 发送 TS1 Channel Equalization 调整 Swing/Pre-emphasis Symbol Lock 发送 K28.5 Idle Pattern 发送空闲序列 失败重试 (Max 5次) 训练成功 进入正常数据传输

2.4 训练失败处理机制

eDP 标准规定了严格的失败重试机制。如果某个阶段在规定时间内(通常为 1ms 或 10ms)未完成,Source 会重新尝试该阶段。如果连续重试超过最大次数(通常为 5 次),Source 会降低链路速率(例如从 HBR2 降级到 HBR)或减少通道数,然后重新开始训练。如果所有配置都失败,Source 将报告链路训练失败。

// 伪代码:链路训练失败处理逻辑
for (rate in supported_rates) {
    for (lanes in supported_lane_counts) {
        retry_count = 0;
        do {
            status = perform_link_training(rate, lanes);
            if (status == SUCCESS) {
                return SUCCESS;
            }
            retry_count++;
        } while (retry_count < MAX_RETRY);
    }
}
return FAILURE; // 所有配置均失败
调试建议: 当遇到链路训练失败时,首先通过 DPCD 寄存器确认失败阶段。如果是 CR 失败,重点检查硬件和时钟;如果是 EQ 失败,重点检查信号完整性和均衡参数;如果是 Symbol Lock 失败,检查是否有噪声干扰导致 K28.5 无法被正确识别。