3、eDP协议层:主链路、辅助信道(AUX)、热插拔检测
做过eDP接口的工程师都知道,协议层是面板和主控之间“对话”的规则。说白了,就是让显示数据和配置命令能在三条物理信道上跑得稳、传得准。我今天把主链路、AUX信道和热插拔检测这三个核心部分拆开讲。每个部分我都会加点实操经验,毕竟纸上谈兵容易翻车。
3.1 主链路:视频数据的“高速公路”
主链路(Main Link)负责传输像素数据、同步信号和辅助数据流。它由1到4对差分信号线组成,每对线可以独立跑不同速率。我个人习惯把主链路比作高速公路——车道越多,单位时间能跑的车就越多。
这里有个坑:lane 数量不等于带宽翻倍。每多一条 lane,接收端时钟恢复复杂度就上升一个台阶。我曾在一个 4K 60Hz 项目里为了省成本只配了 2 lane,结果反复调均衡器才稳定下来。你想想看,要是事先算好带宽余量,就不会折腾那两周了。
| 带宽需求 | 推荐 lane 数 | 单 lane 速率 (Gbps) | 典型分辨率 |
|---|---|---|---|
| ≤ 6 Gbps | 2 | 2.7 | 1920×1080@60Hz |
| 6~12 Gbps | 2 | 5.4 | 2560×1440@60Hz |
| 12~18 Gbps | 4 | 5.4 | 3840×2160@60Hz |
| >18 Gbps | 4 | 8.1 | 3840×2160@120Hz |
主链路的数据格式采用 ANSI 8b/10b 编码,保证直流平衡和时钟恢复。FPGA 里实现时,我建议直接用 Xilinx 的 GTP/GTY 收发器,别手撸 deserializer——除非你想浪费三个月。
// 伪代码:主链路 lane 对齐状态机
enum { WAIT_SYNC, TRAIN, LOCKED } state;
if (comma_detected) begin
state <= TRAIN;
// 启动训练序列
end
if (training_done & deskew_ok) begin
state <= LOCKED;
// 开始接收有效数据
end
3.2 辅助信道(AUX):管理面板的“小秘书”
AUX 是一条半双工的差分信道,跑 1 Mbps 固定速率。它的工作就是读写 DPCD(DisplayPort Configuration Data)寄存器、传输 EDID、下达链路训练命令。说白了,所有控制类交互都走 AUX。
AUX 事务以“请求-应答”方式进行。我遇到过最诡异的问题:某批次面板在 AUX 写操作后总是返回 DEFER,导致链路训练超时。后来发现是面板端 AUX 缓冲深度不够,连续写命令间隔太短了。给个经验:
- 两次 AUX 事务之间至少留 500 μs 间隔
- 遇到 DEFER 最多重试 3 次,否则切换备用方案
- DPCD 地址 0x000~0x0FF 是标准寄存器,别篡改
AUX 事务格式可以用下面这个简化的结构体表示:
// AUX 请求帧结构 (Native AUX)
typedef struct {
uint8_t command; // 0x00=Read, 0x10=Write, 0x20=I2C Read...
uint16_t address; // DPCD 或 I2C 地址
uint8_t length; // 数据长度 (0~16 bytes)
uint8_t data[16]; // 写操作时携带数据
uint8_t parity; // 奇偶校验
} aux_request_t;
3.3 热插拔检测(HPD):面板的“举手信号”
HPD 是一条单端信号线,用于面板向主控报告连接状态或中断事件。它有两种工作模式:
- 静态 HPD:面板上电后拉高,主控检测到高电平就开始 AUX 通信。
- 动态 HPD 脉冲:面板通过拉低再拉高的脉冲,通知主控重新读取 DPCD 或 EDID。脉冲宽度规范要求 2 ms 以上。
有一次客户反馈设备睡眠唤醒后黑屏。排查半天发现是 HPD 信号线上挂了一个 10 μF 电容——唤醒时面板迅速拉高 HPD,但电容充电拖慢了上升沿,主控没识别到高电平。这种低级错误我在实验室见过不下三次。所以 HPD 线上不要加超过 100 pF 的滤波电容。
HPD 的时序参数也很关键,我整理了一下:
| 参数 | 最小值 | 典型值 | 说明 |
|---|---|---|---|
| HPD 上升/下降时间 | — | 100 μs | 避免边沿过缓 |
| 脉冲低电平时间 | 2 ms | 10 ms | 主控检测阈值 |
| 脉冲间隔 | 2 ms | — | 防止误触发 |
| 上电后 HPD 有效时间 | 100 ms | 200 ms | 面板准备就绪 |
3.4 三层协议架构的关系
主链路、AUX、HPD 这三条信道分工明确又互相配合。你看下面的图就清楚了:
从这张图能看出来,主链路和 AUX 是独立工作的物理信道,但逻辑上由链路管理模块协调。HPD 更像是一个“门铃”——按下门铃,主控才会去通过 AUX 询问面板要什么。我在调试一块 8K 面板时就遇到 HPD 脉冲抖动导致主控反复重训链路,最后加了个 5 ms 消抖才搞定。
嗯,总结一下:主链路是跑视频的“卡车”,AUX 是传命令的“对讲机”,HPD 是“门铃”。三个东西配好了,面板才能正常工作。实际项目中,大部分故障都出在 AUX 时序和 HPD 信号完整性上。记住了,就不会像我当年那样熬夜调眼图了。