3. eDP链路层:主链路、辅助通道、热插拔检测

说到eDP的链路层,很多人第一反应就是那几对高速差分线。其实链路层的核心就三个东西:主链路(Main Link)、辅助通道(AUX CH)、热插拔检测(HPD)。这三个玩意儿配合好了,屏幕才能正常点亮。

我刚开始做eDP调试时,总觉得主链路最重要,其他两个可有可无。后来被一块屏硬生生折腾了三天,才发现问题出在辅助通道的时序上。嗯,从那以后我再也不敢轻视这三个部分的协同了。

3.1 主链路:高速数据的“高速公路”

主链路说白了就是传送显示数据用的。它由一组或多组差分对(Lane)组成,每组差分对负责传输一路串行数据。

eDP的Lane数可以是1、2、4,具体用几条,由Source和Sink在链路训练时协商决定。

关键点: Lane的数量直接决定了你能跑的分辨率和刷新率。4 Lane能跑4K@60Hz,2 Lane就只能降一档了。

Lane的本质

每条Lane其实是一对差分信号(D+和D-)。数据在发送端被串行化,接收端再恢复出时钟和数据。eDP不需要单独的时钟通道,这就是它比LVDS先进的地方——少一对线,BOM成本也降下来了。

但是,麻烦也来了。多Lane之间需要做Lane-to-Lane对齐(Skew Calibration)。我记得有一次项目上,Source端4条Lane的PCB走线长度差了8mm,结果链路训练时怎么都过不了Skew Calibration。最后在Layout上做了等长处理,问题才解决。

链路训练中的主链路

链路训练时,Source会按固定的Pattern向Sink发送测试数据。Sink收到后要解析这些Pattern,判断链路质量。常见的Pattern有:

Pattern编号描述用途
Pattern 1D10.2 连续发送符号锁定时使用
Pattern 2PRBS7 伪随机序列通道锁定和误码率检测
Pattern 334.5MHz 时钟图案Symbol Lock稳定性检查

我建议大家在实际量产测试时,一定要测一下Pattern 2下的误码率。很多屏在Pattern 1下能锁定,但Pattern 2就跑不动了——这种屏量产之后大概率会出花屏问题。

3.2 辅助通道:双向沟通的“小秘书”

辅助通道(AUX CH)是一对差分信号,但速率比主链路慢得多——只有1MHz。它的角色很关键:链路训练的指挥官。

你想想看,主链路上跑的是高速数据,但双方怎么握手、怎么协商参数、怎么读EDID,都得靠AUX CH来传达。它就像一个项目经理,在两边来回跑着发指令。

AUX CH的三个角色

  • 链路训练控制: Source通过AUX CH向Sink发送训练请求,Sink返回训练状态。
  • EDID读取: Source通过AUX CH读Sink的EDID ROM,获取屏的物理参数。
  • I2C旁路: AUX CH可以模拟I2C总线,用来读写Sink侧的寄存器。
一个小技巧: 我在项目中常常通过AUX CH直接写Sink的寄存器来强制调整视频参数。比如有些屏的背光亮度控制,就是通过AUX CH写DPCD(DisplayPort Configuration Data)寄存器实现的。

AUX CH的通信细节

AUX CH用的是半双工通信,一次事务包含一个Request和一个Reply。Source发请求,Sink必须在100μs内回复。超时就算失败。

// AUX CH 写事务举例
// 写 DPCD 地址 0x00100 的寄存器
// Source 发送: 写请求 + 地址 + 数据
// Sink 回复: ACK + 状态

// 实际工程师要关心的两个关键参数:
// 1. AUX 最大时延:100μs
// 2. AUX 最大重试次数:通常 3 次

我曾经遇到过一块屏,在低温环境下AUX CH回包时间会飙到150μs。量产测试时室温下都正常,一到冬天就偶发黑屏。后来在测试用例里加了AUX超时容忍测试,才把这个坑填上。

AUX CH的常见故障代码

AUX CH通信失败时,Sink会返回一些状态码。量产测试时一定要把这些状态码打出来分析:

注意: 如果量产测试中出现大量AUX CH超时或NACK,多半是以下原因:
  • Sink端AUX_CH电压太低或抖动太大
  • Source端AUX驱动能力不足
  • 线缆过长导致信号衰减
我建议每条线缆量产前先做AUX回环测试,确保通信无误再进下一站。

3.3 热插拔检测:屏的“门铃”

热插拔检测(HPD)是一根单独的信号线。它的作用很简单:通知Source有屏插上了或者拔掉了。

HPD信号在Sink端是输出,在Source端是输入。平时HPD是低电平,屏插上后Sink会把HPD拉高,告诉Source可以开始链路训练了。

HPD的时序要求

HPD不能乱拉。Sink必须先完成自身的初始化(比如电力稳定、EDID准备好),然后才能拉高HPD。这个过程:

  • HPD拉高等待时间: 通常不超过20ms,从Sink上电开始算。
  • HPD脉冲检测: 如果Sink在训练过程中需要重训,会拉低HPD 100μs以上再拉高,Source收到这个脉冲就重新训练。

我遇到过一种情况:Sink硬件设计有缺陷,HPD拉高之后会瞬间低一下再拉高。Source端有些芯片会把这种“毛刺”当成热插拔事件,导致链路反复训练。解决方案就是在Source端加一个去抖延时,低于2ms的HPD脉冲忽略掉。

HPD与链路训练的关系

HPD是链路训练的“起跑枪”。只有HPD拉高后,Source才能开始链路训练。如果HPD一直低,Source就认为没有屏,不会做任何动作。

量产测试建议: 在产线测试时,一定要验证HPD信号的上升沿质量和时序。我习惯用示波器抓一下HPD从低到高的上升沿,看有没有抖动——哪怕是50mV的噪声,都可能导致Source误判。

3.4 链路层三者协作示意图

下面这张图展示了主链路、辅助通道、HPD在链路训练中的协作关系。说白了就是:HPD先敲门,AUX CH谈条件,主链路跑数据。

eDP链路层训练与通信架构 eDP 链路层训练与通信架构 HPD 热插拔检测 AUX CH 辅助通道 Main Link 主链路 HPD 角色 • 通知Source屏已插入 • 触发链路训练开始 • 脉冲请求重训 AUX CH 角色 • 链路训练控制 • 读取EDID • I2C旁路读写寄存器 Main Link 角色 • 高速传输视频数据 • Lane数量协商决定 • 链路训练用Pattern 触发训练 训练参数配置 ① HPD 拉高 ② AUX 读EDID ③ 链路训练 ④ 主链路传输 成功后启动 链路层三要素协作流程:HPD → AUX → 训练 → 主链路传输

3.5 量产测试中的链路层检查清单

我把今年做过的项目中遇到的链路层问题总结成了一张表。量产测试时照着这个清单过一遍,基本能覆盖绝大多数坑:

检测项检测方法常见问题
HPD电平示波器测量HPD上升沿毛刺、上升沿过慢
HPD时序从Sink上电到HPD拉高的时间超时(>20ms)
AUX CH通信发送已知寄存器读请求,验证回复NACK、超时、CRC错误
AUX CH电压差分幅度测量电压不足(< 200mV)
主链路Lane锁定链路训练中Pattern 1/2/3全流程Symbol Lock失败、通道对齐失败
多Lane等长测量各Lane到Sink的延迟差Skew Calibration失败
我的习惯: 量产测试时先跑一遍AUX CH扫描,确认Sink能正常回复。如果这步都过不了,后续链路训练不可能成功。然后跑HPD时序检查,最后才上主链路的训练Pattern。

链路层是整个eDP系统的地基。地基没打牢,上层的数据传输必然是空中楼阁。每一条Lane、每一根AUX CH、每一次HPD脉冲,都可能成为量产的瓶颈。