3、eDP协议层:主链路、辅助信道(AUX)、热插拔检测

做过eDP接口的工程师都知道,协议层是面板和主控之间“对话”的规则。说白了,就是让显示数据和配置命令能在三条物理信道上跑得稳、传得准。我今天把主链路、AUX信道和热插拔检测这三个核心部分拆开讲。每个部分我都会加点实操经验,毕竟纸上谈兵容易翻车。

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

主链路(Main Link)负责传输像素数据、同步信号和辅助数据流。它由1到4对差分信号线组成,每对线可以独立跑不同速率。我个人习惯把主链路比作高速公路——车道越多,单位时间能跑的车就越多。

关键参数:单 lane 最高速率可达 8.1 Gbps(eDP 1.4b),但实际项目常用 2.7 Gbps 或 5.4 Gbps。

这里有个坑:lane 数量不等于带宽翻倍。每多一条 lane,接收端时钟恢复复杂度就上升一个台阶。我曾在一个 4K 60Hz 项目里为了省成本只配了 2 lane,结果反复调均衡器才稳定下来。你想想看,要是事先算好带宽余量,就不会折腾那两周了。

带宽需求推荐 lane 数单 lane 速率 (Gbps)典型分辨率
≤ 6 Gbps22.71920×1080@60Hz
6~12 Gbps25.42560×1440@60Hz
12~18 Gbps45.43840×2160@60Hz
>18 Gbps48.13840×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 线长超过 30cm 导致眼图完全闭合。eDP 规范建议 AUX 走线不超过 20cm,否则必须加终端电阻并降低边沿速率。

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 是一条单端信号线,用于面板向主控报告连接状态或中断事件。它有两种工作模式:

  1. 静态 HPD:面板上电后拉高,主控检测到高电平就开始 AUX 通信。
  2. 动态 HPD 脉冲:面板通过拉低再拉高的脉冲,通知主控重新读取 DPCD 或 EDID。脉冲宽度规范要求 2 ms 以上。

有一次客户反馈设备睡眠唤醒后黑屏。排查半天发现是 HPD 信号线上挂了一个 10 μF 电容——唤醒时面板迅速拉高 HPD,但电容充电拖慢了上升沿,主控没识别到高电平。这种低级错误我在实验室见过不下三次。所以 HPD 线上不要加超过 100 pF 的滤波电容。

HPD 的时序参数也很关键,我整理了一下:

参数最小值典型值说明
HPD 上升/下降时间—100 μs避免边沿过缓
脉冲低电平时间2 ms10 ms主控检测阈值
脉冲间隔2 ms—防止误触发
上电后 HPD 有效时间100 ms200 ms面板准备就绪
FPGA 里怎么处理 HPD? 建议用 200 μs 采样周期去抖,然后边沿触发中断。别用单纯电平检测——面板瞬态掉电时 HPD 会立刻拉低,主控需要反应时间去关闭链路。

3.4 三层协议架构的关系

主链路、AUX、HPD 这三条信道分工明确又互相配合。你看下面的图就清楚了:

eDP 协议层架构图 eDP 协议层架构 主链路 视频数据 + 同步 1~4 lane 差分对 速率 2.7~8.1 Gbps 辅助信道 (AUX) 读写 DPCD / EDID 半双工 1 Mbps 差分对 热插拔检测 单端信号 连接/中断通知 2 ms 脉冲约束 链路管理与协议仲裁 链路训练 · 时钟恢复 · 错误处理 ⚠ 注意: AUX 与主链路无直接电气耦合 HPD 状态变化需触发 AUX 重新协商

从这张图能看出来,主链路和 AUX 是独立工作的物理信道,但逻辑上由链路管理模块协调。HPD 更像是一个“门铃”——按下门铃,主控才会去通过 AUX 询问面板要什么。我在调试一块 8K 面板时就遇到 HPD 脉冲抖动导致主控反复重训链路,最后加了个 5 ms 消抖才搞定。

设计建议:把这三种信道当成独立模块测试——先测 HPD 中断响应,再测 AUX 读写,最后测主链路。出问题时能快速隔离。

嗯,总结一下:主链路是跑视频的“卡车”,AUX 是传命令的“对讲机”,HPD 是“门铃”。三个东西配好了,面板才能正常工作。实际项目中,大部分故障都出在 AUX 时序和 HPD 信号完整性上。记住了,就不会像我当年那样熬夜调眼图了。