4. eDP训练序列:训练过程总览、Training Pattern归纳总结

链路训练,说白了就是eDP的“握手环节”。

主芯片和屏幕之间要实现高速传输,必须先统一“语言”和“节奏”。这个统一过程非常严格,稍有偏差就会导致花屏、闪屏甚至黑屏。

我个人习惯把训练过程看作一次“考试”——每个Pattern就是一道考题,全部通过才算合格。


4.1 训练过程整体脉络

先给你一张逻辑图,帮你在脑子里搭个框架。我平时做方案评审时,就靠这个图快速定位问题出在哪个环节。

核心要点: 训练过程是一个 4阶段 的握手流程。每进入下一阶段,都意味着前一阶段已经稳定。
eDP链路训练 4 阶段总览 ① 链路建立 列线注册与协商 ② 时钟恢复 TP1训练 ③ 通道对齐 TP2/TP3训练 ④ 链路验证 TP4 + 测试模式 任何阶段失败 → 回退到阶段① 或降低速率/通道数重试 知识点速查 • 链路建立:DPCD读取EDID,确认最大速率和Lane数 • 时钟恢复:发送TP1,使接收端CDR锁定 • 通道对齐/链路验证:发送TP2/TP3/TP4,完成符号边界对齐和测试

你可能要问了:为什么要分这么多阶段?

很简单。eDP是高速串行链路,一点抖动就可能误判。把训练拆成几步,才能精准定位问题。我在量产测试中遇到最多的问题,就是卡在“时钟恢复”阶段出不来,这时候多半是PCB走线有问题。


4.2 各阶段详解

4.2.1 链路建立

这一步是“搭线”。主芯片通过AUX通道与面板握手,读写DPCD寄存器。主要干两件事:

  • 读EDID:拿到面板的物理参数(分辨率、刷新率、色深等)。
  • 协商Link Rate和Lane Count:主发训练请求,面板回复是否支持。
小技巧: 我量产测试时,会先强制写一组标准参数(比如HBR2 + 4Lane),如果面板无应答,大概率是AUX通道物理层问题,别急着调训练Pattern。

4.2.2 时钟恢复(TP1)

TP1没有时钟,只有不断翻转的时钟纹数据。接收端靠它来锁定PLL,让CDR吃上“定心丸”。

为什么重要? 时钟不稳,后面所有数据都是错的。

曾经踩过的坑: 我遇到过一批面板,TP1阶段始终不Lock。排查下来是片内PLL供电纹波太大。加了几颗去耦电容后,问题消失了。

4.2.3 通道对齐(TP2/TP3)

时钟锁定后,要解决通道间的时间偏差。

  • TP2:包含D10.2控制字符,接收端用它确定符号边界。
  • TP3:加扰模式,模拟真实数据传输,验证通道均衡性能。

我个人习惯在这步重点观察CR(Clock Recovery)和EQ(Equalization)状态寄存器。如果一个通道EQ失败,多半是这个通道的接收器灵敏度不足,或者是PCB等长有问题。

4.2.4 链路验证(TP4)

这是最后一步。发送TP4(测试模式),检查数据完整性。可以通过AUX读回错误计数,决定是否进入正常操作。


4.3 Training Pattern归纳:一张表讲清楚

你可能记不住那么多Pattern细节。我整理了一张速查表,量产调试时经常拿出来对着看。

Pattern名称 主要用途 是否加扰 符号格式 典型应用阶段
TP1 时钟恢复(CDR锁定) 否 固定时钟纹(K28.5) ② 时钟恢复
TP2 符号边界对齐 否 D10.2控制字符 ③ 通道对齐
TP3 通道均衡训练 是 加扰的随机数据 ③ 通道对齐
TP4 链路完整性验证 是 测试模式数据 ④ 链路验证

注意:TP2和TP3虽然都在“通道对齐”阶段,但TP2解决的是符号边界,TP3解决的是通道间偏斜。顺序不能搞反,否则EQ结果不准。


4.4 训练序列的实际执行流程

这里给出一段我常用的伪代码风格的流程,你可以参考它来写固件或测试脚本。

1. 初始化DPCD和AUX通道
2. 读EDID,确认面板能力
3. 写Link Rate和Lane Count(协商)
4. 写Training Pattern = TP1
   while ( !CR_Done ) {
       读CR状态寄存器
       超时处理 (通常500ms)
   }
5. 写Training Pattern = TP2
   while ( !EQ_Done ) {
       读EQ阶段状态
       超时处理
   }
6. 写Training Pattern = TP3
   while ( !EQ_Done ) {
       继续读取对应EQ状态
       超时处理
   }
7. 写Training Pattern = TP4
   验证数据完整性 (读错误计数)
8. 关闭训练模式,进入正常操作
避坑指南: 我曾经见过一个方案,EQ_Done状态一直不为1,排查发现是TP2和TP3的顺序写反了。先写TP3设备根本不认EQ。所以,严格按照规范顺序来,别自己“优化”。

4.5 关于训练失败的一点思考

训练失败的原因不外乎三种:

  1. 硬件问题:电气特性不达标(PCB过长、阻抗不匹配、供电不稳)。
  2. 协商问题:主端和从端的能力不一致(比如主端要求HBR3,屏只能支持HBR2)。
  3. 时序问题:AUX事务超时,或者主端固件写Pattern速度太快,面板来不及响应。

每次遇到训练失败,我都先看AUX读回来的错误码,再决定从哪个方向下手。这样比盲测高效得多。