2. eDP 链路训练基础
eDP(Embedded DisplayPort)链路训练是主机(Source)与显示设备(Sink)之间建立可靠高速差分信号通道的初始化过程。其核心目的是在物理层上自动协商并锁定最佳的电压摆幅、预加重、均衡参数,确保数据在高速传输(通常为 1.62 Gbps 至 8.1 Gbps 甚至更高)时的比特误码率(BER)低于 1e-9。
2.1 链路训练的目的
eDP 链路训练主要解决以下三个关键问题:
- 时钟数据恢复(CDR)锁定: 接收端需要从高速串行数据流中提取出同步时钟。没有正确的时钟,数据无法被采样。
- 信道均衡与补偿: 高速信号在 PCB 走线、连接器和线缆上传输时,会因趋肤效应和介质损耗而产生衰减和码间干扰(ISI)。训练过程通过调整发送端的预加重/去加重和接收端的均衡器来补偿信道损耗。
- 参数自动协商: 自动确定最佳的链路配置,包括通道数(Lane Count)、数据速率(RBR/HBR/HBR2/HBR3)、电压摆幅(Swing Level)和预加重(Pre-emphasis Level),以适应不同品质的线缆和 PCB 环境。
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 位置位。
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)。
2.2.3 阶段三:Symbol Lock(符号锁定)
此阶段 Source 将训练序列切换为 K28.5 逗号字符(TS2)。K28.5 是一种特殊的 10-bit 码字(0011111010 或 1100000101),具有唯一的位模式。Sink 利用该模式在串行比特流中定位 10-bit 字符的边界,实现字节对齐。当所有 Lane 完成对齐后,Symbol_Locked 位置位。
2.2.4 阶段四:Idle Pattern(空闲模式)
这是链路训练的最后阶段。Source 停止发送训练序列,转而发送经过扰码(Scramble)的空闲模式(Idle Pattern)。Sink 确认收到空闲模式后,链路训练成功完成。随后,Source 可以开始发送有效的主链路视频数据(Main Link Data)。
2.3 训练阶段状态机总览
以下 SVG 图展示了 eDP 链路训练的完整状态机转换过程,包含四个阶段之间的跳转关系以及失败重试机制。
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; // 所有配置均失败