4. eDP训练序列:训练过程总览、Training Pattern归纳总结
链路训练,说白了就是eDP的“握手环节”。
主芯片和屏幕之间要实现高速传输,必须先统一“语言”和“节奏”。这个统一过程非常严格,稍有偏差就会导致花屏、闪屏甚至黑屏。
我个人习惯把训练过程看作一次“考试”——每个Pattern就是一道考题,全部通过才算合格。
4.1 训练过程整体脉络
先给你一张逻辑图,帮你在脑子里搭个框架。我平时做方案评审时,就靠这个图快速定位问题出在哪个环节。
你可能要问了:为什么要分这么多阶段?
很简单。eDP是高速串行链路,一点抖动就可能误判。把训练拆成几步,才能精准定位问题。我在量产测试中遇到最多的问题,就是卡在“时钟恢复”阶段出不来,这时候多半是PCB走线有问题。
4.2 各阶段详解
4.2.1 链路建立
这一步是“搭线”。主芯片通过AUX通道与面板握手,读写DPCD寄存器。主要干两件事:
- 读EDID:拿到面板的物理参数(分辨率、刷新率、色深等)。
- 协商Link Rate和Lane Count:主发训练请求,面板回复是否支持。
4.2.2 时钟恢复(TP1)
TP1没有时钟,只有不断翻转的时钟纹数据。接收端靠它来锁定PLL,让CDR吃上“定心丸”。
为什么重要? 时钟不稳,后面所有数据都是错的。
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. 关闭训练模式,进入正常操作
4.5 关于训练失败的一点思考
训练失败的原因不外乎三种:
- 硬件问题:电气特性不达标(PCB过长、阻抗不匹配、供电不稳)。
- 协商问题:主端和从端的能力不一致(比如主端要求HBR3,屏只能支持HBR2)。
- 时序问题:AUX事务超时,或者主端固件写Pattern速度太快,面板来不及响应。
每次遇到训练失败,我都先看AUX读回来的错误码,再决定从哪个方向下手。这样比盲测高效得多。