eDP接口物理层:差分信号、主链路、AUX通道、热插拔检测
咱们开始聊物理层。说实话,很多做软件驱动的兄弟,一听到“物理层”就开始犯困。觉得这是硬件工程师的事,跟自己没关系。
但你想想看,如果不懂物理层,你调时序约束的时候,会碰到很多怪问题——明明代码写得没问题,就是跑不起来。为什么?问题很可能就出在这些物理信号上。
我刚开始做eDP项目时也犯过这错。觉得物理层跟我无关,结果调了一个星期的黑屏...后来才发现是差分信号走线长度没匹配好。从那以后,我再也不敢跳过物理层了。
2.1 差分信号原理
说白了,差分信号就是两根线传一个信号。一根叫P(正极),一根叫N(负极)。接收端看的是它俩的电压差,不是对地的电压。
- 抗干扰强:外部噪声同时耦合到两根线上,电压差不变。这就是共模抑制。
- EMI低:两根线电流方向相反,磁场互相抵消。辐射小得多。
- 电压摆幅小:eDP差分摆幅通常只有200-400mV。功耗低、速率高。
2.2 主链路详解
主链路就是传视频数据的那条路。eDP的主链路由多对差分信号组成,每对都是双向的——哦不,是单向的。从Source到Sink。
主链路差分对数量:常见有1、2、4 Lane三种配置。我个人习惯用4 Lane做4K@60Hz,2 Lane做1080P@60Hz。别问我为什么,实测下来的经验。
数据速率:
| 速率等级 | 单Lane数据率 | 典型应用 |
|---|---|---|
| RBR | 1.62 Gbps | 1080P@30Hz |
| HBR | 2.70 Gbps | 1080P@60Hz |
| HBR2 | 5.40 Gbps | 4K@30Hz |
| HBR3 | 8.10 Gbps | 4K@60Hz / 8K@30Hz |
编码方式:eDP主链路用的是8b/10b编码。就是把8位数据变成10位传输。这样做的目的是保证直流平衡,防止信号长期跑偏。
这里我提一句,我在项目里遇到过8b/10b解码失败的情况。排查下来发现是Source端发送的K码(控制字符)和D码(数据字符)的极性不对。后来我直接在链路训练的时候把K码顺序打出来看,一眼就发现问题了。
2.3 AUX通道
AUX通道是eDP的控制通道。它也是一对差分信号,不过是双向半双工的。
AUCH的特点:
- 数据率:1 Mbps。别嫌慢,它只传控制命令和EDID数据。
- 通信方式:I²C over AUX。没错,就是跑在AUX物理层上的I²C协议。
- 主要功能:读EDID、写DPCD寄存器、做链路训练。
说实话,搞懂AUX通道很重要。因为调时序的时候,很多问题其实是AUX没跑通。
我举个例子:EDID读不出来。你会看到时序约束算出来的参数全是对的,但显示器就是不正常点亮。为什么?因为没EDID,时序参数对也没用。
那怎么排查AUX?我会在初始化阶段不停地打印AUX状态寄存器。如果看到AUX_NACK(无应答),那基本就是AUX链路有问题。这时候别去算时序了,先查物理连接。
2.4 热插拔检测
热插拔检测,英文叫HPD(Hot Plug Detect)。它是靠一根独立的信号线实现的。
HPD的工作原理:
- 连接检测:Source端给HPD线拉高(3.3V),Sink端拉低到地。没显示器时,HPD电平是低的。
- 中断信号:Sink可以通过HPD线发送脉冲,通知Source有事件发生(如分辨率变了、插拔了外设)。
- 电气特性:HPD线有上拉电阻,Sink端是漏极开路输出。
我刚开始做eDP时,觉得HPD很简单嘛。结果项目量产了,有客户反馈说插着显示器开机,有时候能点亮有时候不能。查了一周,发现是HPD检测的延迟没配好。Source检测到HPD高电平后,要等100ms左右才能开始链路训练。太快了Sink还没准备好。
关键参数:
| 参数 | 最小值 | 典型值 | 说明 |
|---|---|---|---|
| HPD响应时间 | 100 ms | 200 ms | 检测到高电平后开始训练 |
| HPD去抖时间 | 2 ms | 10 ms | 防止噪声误触发 |
| 中断脉冲宽度 | 250 μs | 2 ms | Sink发中断信号的脉冲长度 |
2.5 知识结构图
下面这张图展示了eDP物理层的核心结构。我建议你先把图看清,再回头细读上面这些文字。
好了,这章就到这。记住:物理层是eDP的根基。差分信号保证传输质量,主链路传数据,AUX通道做控制,HPD管插拔。四个缺一不可。