简介:eDP 1.4 协议中文版是一份面向嵌入式显示领域工程师的官方标准译文,适用于笔记本、一体机及便携设备的面板接口开发、验证与调试。资料基于 VESA 发布的 eDP v1.4b 标准,完整翻译了系统架构、Multi-SST 多流传输、电气规范、高级链接电源管理、面板自我刷新(PSR/PSR2)、压缩显示流(DSC)以及 AUX 多点触摸等关键技术章节,可帮助读者快速理解 DisplayPort 在嵌入式场景中的实现要求与寄存器定义。资源包共 1 个文件,为 docx 文档,压缩后大小 2.45MB,便于查阅和批注;目前已有 15306 人学习下载。对需要对照英文原版逐节研读、或从事 eDP 面板驱动与系统集成工作的读者而言,这份中文版本能显著降低阅读门槛,节省查证时间,并可直接作为团队内部培训或项目设计的参考资料。
1. eDP 1.4 协议:笔记本显示链路里最容易忽略的嵌入式接口
eDP 1.4 协议在笔记本显示链路里的存在感很强,但很多调试翻车现场是从一句“这不就是 DP 吗”开始的。实际上,eDP 是基于 DP v1.3 裁剪出来的嵌入式变体,链路训练、寄存器、电源管理、面板自刷新都按“主板 GPU 直连 TCON”的场景重写过,和外接显示器的插拔链路完全是两回事。屏幕不亮、休眠唤醒闪屏、亮度调不动这类问题,只查 DP 公共版规范往往卡死。这份 eDP 1.4b 协议中文版把电气扩展、ALPM、PSR/PSR2、DSC、AUX 触摸、背光控制和电源排序整本翻译出来,适合显示驱动开发、硬件电源设计、面板选型验证这三类从业者当作速查底稿。
2. eDP 1.4b 与 DP 1.3 的关系:协议栈差异与链路速率选型
2.1 基于 DP 1.3 裁剪,而不是基于 DP 1.4
先纠正一个最常见的误解:eDP 1.4b 不是 DP 1.4 的嵌入式版,它引用的是 2014 年发布的 DP v1.3,然后在这套链路层之上加了大量 eDP 专属能力。原因也很直白——DP 公共版面向外部盒对盒场景,必须兼容各种线缆、连接器、接收端,所以链路训练、电压摆幅、均衡都得做得非常保守;而 eDP 是系统主机与显示面板之间一段固定长度的板内互连,拓扑不变、没有热插拔、寄生参数基本可控,标准于是把重心放到电源管理、面板刷新控制和产品定制选项上。
这份中文版文档第 3 节专门列了 eDP v1.4b 与 DP v1.3 的差异,逐条读完会发现,eDP 新增的内容基本都在解决三个问题:省电、减少链路带宽、把显示控制权从 GPU 交还给 TCON。PSR(面板自刷新)、ALPM(高级链路电源管理)、DSC(显示流压缩)、多点触控、背光控制寄存器,这些在外接显示器上根本用不到,但在笔记本面板上每一项都直接决定续航和体验。所以做驱动调试时,DP 1.3 链路层可以查公共版,凡是牵扯到状态机和省电的部分,必须回到 eDP 这份文档上来。
2.2 主链路通道数与链路速率选型
eDP 主链路支持 1、2、4 三个通道数配置,链路速率沿用 DP v1.3 定义的四档:RBR 1.62 Gbps、HBR 2.7 Gbps、HBR2 5.4 Gbps、HBR3 8.1 Gbps。注意主链路走 8b/10b 编码,实际有效带宽是标称值的 80%,比如 HBR2 单通道有效只有 4.32 Gbps,选通道数时按这个值算才不会留死角。
| 面板典型规格 | 常见 eDP 配置 | 有效带宽估算 | 选型说明 |
|---|---|---|---|
| 1366x768@60Hz | 1 lane HBR | 2.16 Gbps | 入门笔记本常用,带宽余量很小 |
| 1920x1080@60Hz | 2 lane HBR2 | 8.64 Gbps | 主流配置,余量充足且成本可控 |
| 2560x1440@144Hz | 4 lane HBR2 | 17.28 Gbps | 高刷屏常见,需算消隐开销 |
| 3840x2160@60Hz | 4 lane HBR3 | 25.92 Gbps | 4K 面板首选,也常有 DSC 参与 |
这个表里的像素带宽是按 CVT 时序粗略估算的,实际选型还要把水平/垂直消隐放大系数考虑进去。常见做法是先按目标分辨率与时序算出总像素率,乘上每像素位数得到净带宽,再除以 0.8 的编码开销,最后留出 20% 左右的余量选 lane 数和速率档次。面板的 EDID 里也会声明最大支持速率,驱动初始化时以 DPCD 能力字段和 EDID 的交集为准。
2.3 系统架构与连接器引脚核对重点
文档第 2 节把 eDP 系统画得很清楚:Source 是主板上的 GPU 或集成图形,Sink 是面板里的 TCON(时序控制器),TCON 旁边一般挂一颗 EEPROM 存 EDID,面板的背光控制和电源管理也围绕这条链路展开。笔记本上常见 20 pin 或 30 pin 连接器,20 pin 多用于 1 通道实现,30 pin 给 2 通道和 4 通道预留余量。
拿到一块新面板的规格书,先按连接器引脚分配表逐项核对下面几组信号,缺一项后面都会变成玄学问题:
- 主链路差分数据对:1 对还是 2 对,确认 lane 数声明一致
- AUX CH 差分对:辅助通道,DPCD 和 EDID 都走这里
- LCDVCC 主电源引脚:面板逻辑供电,电源排序里的第一级
- 背光使能与 PWM 引脚:部分面板用 DPCD 直接控制背光,但硬件 PWM 引脚仍然要接
- HPD 热插拔检测:eDP 嵌入式场景 HPD 不用于插拔检测,但用于链路状态变化通知
我一般会在硬件原理图评审时就把这几组信号画成一张核对表,防止 30 pin 连接器里 PIN 定义看错导致 AUX 差分对接反而板子安静如鸡。
2.4 Multi-SST 面板分段:2x1、2x2、4x1 的配置逻辑
MSO(Multi-SST Operation)是 eDP 里比较容易被忽略的选项,它把一条 eDP 逻辑链路拆成两路或四路独立的 SST 链路,分别驱动面板的分段 TCON。文档 3.8.3 到 3.8.5 定义了三种最常见的分段方式:两个链路各一个通道(2x1)、两个链路各两个通道(2x2)、四个链路各一个通道(4x1)。每个面板段看成独立的接收端,渲染自己那一块,源端把完整画面按时序切成对应的段发出去。
MSO 的配置流程按文档 3.8.2 和 3.8.7 走这样几步:读 DPCD 能力寄存器确认面板支持 MSO;配置每条链路的速率和通道数;设置源端 MSO 模式与分段映射关系;对所有链路做链路训练;最后通过接收端 CRC 寄存器验证各段数据完整性。分段面板的像素不会跨段重叠,但文档 3.8.6 讨论了相邻面板细分处的像素重叠情况,跨段拼接处出现亮线或错位时,优先检查是不是时序窗口没对齐。MSO 对各链路之间的时序对齐要求很严,3.8.8 专门规定时序窗口,多段画面撕裂基本都出在这。
3. 电气规范扩展与高级电源管理:链路训练和 PHY 掉电唤醒
3.1 链路训练:Vdiff 训练表与 EQ 档位选择
eDP 主链路训练沿用了 DP v1.3 的时钟恢复(CR)和均衡(EQ)两阶段流程,但这份文档在电气层面加了针对嵌入式场景的约束——互连参考点、TX TP1 差分信号电压、Vdiff 训练表。链路训练的最终目标是在给定速率和通道数下,用最低的电压摆幅和均衡档位达到误码率目标,eDP 里依据的是文档 4.3.2 的 Vdiff 训练表。
DisplayPort 家族的电压摆幅和预加重档位很成熟,eDP 面板训练时一般在这几档组合里逐级上升:差分摆幅 0.4V、0.6V、0.8V、1.2V 对预加重 0dB、3.5dB、6dB。常见面板在短链路下用 0.4V 加 0dB 就能过,功耗最低;只有碰到接收端灵敏度差或走线过长的情况才需要往上加摆幅和均衡。调试时不要直接把 Vdiff 训练表里的电压档位和示波器测到的实际峰峰值划等号,训练表里的标称值是在特定参考点定义的,实际测量要按文档 4.2 的互连参考点换算探针位置。
3.2 TP3_EQ 眼图测量与参考均衡器
电气调试里 eDP 文档给的关键测点是 TP3_EQ,也就是接收端经过参考均衡器之后的眼图位置。面板 TCON 里通常有 CTLE(连续时间线性均衡器)做高频补偿,源端调试时要保证 TP3_EQ 点的眼图睁开满足文档 4.6.1 的掩码要求。测量时有几个容易踩坑的地方:差分探头必须接到参考点附近,远离测试点会引入额外寄生;端接电阻要用标准的差分端接,探头负载会把高频滚降吃掉;文档 4.6.2 给了参考均衡器曲线,示波器里如果带均衡器模拟功能,要按这条曲线设置而不是随便拉个一阶高通。
我一般调试高速主链路时先把源端摆幅放到最低档跑一遍眼图,看掩码余量多少,再逐步加 EQ 档位,每次记录 TP3_EQ 的上升时间和眼高。链路干净的情况下,0.4V 摆幅加一档 EQ 就能达到不错的余量;如果加满 EQ 还是睁不开,问题通常不在训练档位而在 PCB 走线或连接器,排查方向要回到硬件而不是继续加摆幅。
3.3 ALPM 状态机:FW_STANDBY 与 FW_SLEEP
ALPM 是 eDP 省电体系里最容易让驱动工程师头疼的部分。文档第 5 节定义了 DPRX 的电源管理状态,其中 FW_STANDBY(PM_State 2a)和 FW_SLEEP(PM_State 3a)是关键,它们和普通 STANDBY、SLEEP 的区别在于唤醒延迟被大幅压缩,专门为嵌入式面板的快速响应场景设计。
| 状态 | 进入信号 | 唤醒方式 | 适用场景 |
|---|---|---|---|
| PM_State 2a FW_STANDBY | ML_FW_STANDBY 或 AUX_PHY_WAKE | AUX PHY 唤醒序列 | 短时黑屏、合盖待机 |
| PM_State 3a FW_SLEEP | ML_FW_SLEEP 序列 | 完整唤醒加链路重训 | 深度休眠、长待机 |
FW 状态的进入不是直接切电源,而是通过主链路发送 8b/10b 控制码序列(ML_FW_STANDBY、ML_FW_SLEEP)来通知 DPRX 进入对应状态。文档 5.2.2 还定义了 PHY_WAKE 模式,AUX_PHY_WAKE 信号由一个前导码加曼彻斯特 II 编码违规段组成,用于从待机状态快速拉起 PHY。从状态机的角度看,ALPM 控制的就是 PHY 层而不是整个链路层,寄存器层面的配置和 DPCD 字段在文档 5.4 节,驱动实现时不要把它理解成“关掉主链路电源”这种粗暴操作。
3.4 ALPM 配置流程:发现、启用、掉电和唤醒
ALPM 四个动作——发现、启用、禁用和唤醒,按文档 5.3 的顺序走。发现阶段读接收端能力字段确认支持哪些电源状态;启用阶段把源端和接收端都配置到同一套状态集;掉电阶段发送对应控制码序列;唤醒阶段按状态等级选择 AUX_PHY_WAKE 还是完整链路重训。下面这段 Python 是我调试时用来解析 ALPM 能力字段的思路脚本,具体寄存器地址以面板手册为准:
def parse_alpm_capability(dpcd_buf): """ 从 DPCD dump 中解析 ALPM 相关能力位 dpcd_buf: 完整的 DPCD 寄存器字节数组 返回 dict,key 为状态名,value 为是否支持 """ alpm_caps = {} # 能力字段位于 ALPM 配置区域,此处用掩码举例 raw = dpcd_buf[0x11] # 示例偏移,实际按 eDP 文档 5.4 节确认 alpm_caps["fw_standby"] = bool(raw & 0x01) # bit0: FW_STANDBY 支持 alpm_caps["fw_sleep"] = bool(raw & 0x02) # bit1: FW_SLEEP 支持 alpm_caps["phy_wake"] = bool(raw & 0x04) # bit2: AUX PHY WAKE 支持 return alpm_caps这段脚本返回的能力位组合决定驱动后面用哪种省电策略:只支持 FW_STANDBY 的面板不能强行进 FW_SLEEP,否则唤醒时握手流程对不上,面板就再也唤不醒。参数上重点看 bit 掩码的位置和文档定义一致,不同面板 OEM 实现可能有个别保留位的变化,解析前先打印原始字节对照。
4. 面板自我刷新 PSR/PSR2:功耗优化的核心机制
4.1 PSR 架构:远程帧缓冲区与帧捕获指示
PSR 是 eDP 对笔记本场景做得最成功的一个功能。静态桌面、文档阅读这类场景下,GPU 反复发送相同帧纯属浪费功耗,PSR 的思路是让 TCON 把最后一帧完整存进自己的远程帧缓冲区(RFB),源端随后关掉主链路发送器,TCON 从 RFB 里持续刷新面板。文档 6.1.1 的体系结构描述里,PSR 的核心不在压缩而在“甩手”,把画面刷新这件事完全交给 TCON。
PSR 进入流程里最容易翻车的点是帧捕获指示。文档 6.1.3.1 明确要求源端发送 PSR 控制 SDP 之后,必须等待 DPCD 地址 00170h 的 bit3(帧捕获指示位)被置位,确认 TCON 已经完整捕获当前帧,之后才能安全关闭主链路发送器。很多驱动实现图省事,发了 SDP 直接关链路,结果就是偶发花屏或者唤醒后画面错位,问题还不好复现。
4.2 PSR 进入/退出协议与错误恢复
按文档 6.1.3 的完整时序,PSR 进入分三步:源端通过主链路发送携带 PSR 控制信息的 VSC SDP;TCON 收到后开始捕获当前帧到 RFB,捕获完成置位帧捕获指示位;源端确认指示位后关闭主链路发送器或进入 ALPM 状态。退出则反过来——源端重新打开主链路,发送退出 PSR 的 SDP,TCON 停止从 RFB 取数,切回实时视频流路径。
错误恢复是很多人忽略的一半。文档 6.1.4 定义了错误管理/恢复机制,TCON 在 PSR 状态下如果检测到 RFB 数据异常,会通过状态寄存器或 SDP 向源端上报错误,源端必须响应并退出 PSR 重新送帧。我在调试某块面板时就遇到过 PSR 状态下静置一小时花屏的诡异现象,最后定位到 TCON 的帧捕获没有真正完整,RFB 里缺了一行数据,错误上报机制又没触发,排查了很久。从那以后我每次验证 PSR 都会强制跑一轮进入、静置、唤醒、退出的完整循环,并且打印错误状态寄存器。
4.3 PSR2 选择性更新:只刷新变化区域
PSR2 是在 PSR 基础上的重大升级,文档 6.2 的标题就叫“通过选择性更新进行自我刷新”。PSR 关闭整个主链路后,任何微小变化都得全帧重传;PSR2 则允许画面局部变化时只把变化区域的数据发下去,没变的区域继续由 RFB 提供。实现上,TCON 需要知道哪些区域是更新区域(Selective Update Region),源端在时序里把这些区域的数据精确切割传下去。
PSR2 的收益和场景强相关:桌面 UI、文档滚动、打字场景下大部分面积不变,收益非常可观;全屏视频、3D 游戏这种大面积变化的场景,PSR2 几乎没收益,反而多了区域切割开销。文档 6.2.5 要求对更新数据做完整性检查和纠正,这也意味着 TCON 需要额外缓冲区来暂存选择性更新数据做校验,面板成本会高一点。选型时如果产品定位是轻薄办公本,PSR2 是值得为它选一颗支持的面板 TCON 的。
4.4 PSR/PSR2 的 DPCD 字段与 SDP 配置
文档 6.3 和 6.4 分别列出了 PSR DPCD 字段和 PSR SDP 支持要求。DPCD 00170h 地址这个区域集中了 PSR 的支持位、配置位和状态位,其中 bit0 是 PSR 支持声明,bit3 是帧捕获指示,另外还有错误标志位和链路训练状态位。SDP 侧,PSR 控制包通过 VSC SDP(视频流配置辅助数据包)承载,包头要识别出这是在发 PSR 控制而不是普通视频辅助信息。
实际配置时我的习惯是写一个小的转储函数,把 00170h 附近的寄存器全部打出来,对照文档位定义逐位核对。PSR 的 DPCD 字段在不同面板版本间有差异,强行按固定偏移写配置容易把 TCON 搞死,稳妥做法是先读后写、逐位修改。
5. eDP 1.4 常见问题排查:背光、DSC、触摸与唤醒的现场翻车记录
5.1 四个高发问题域
把 eDP 调试里遇到的问题按域划分,集中在背光控制、DSC 压缩流、AUX 触摸、电源唤醒四块。背光问题的典型特征是 DPCD 能读写但亮度不变,多半是背光控制模式位和硬件 PWM 引脚冲突;DSC 问题的典型特征是分辨率上去就黑屏,降下来就正常,PPS 参数和面板解压能力不匹配;触摸问题的典型特征是 HID 能枚举但数据乱跳,报告描述符的并发定义对不上;唤醒问题的典型特征是合盖再开盖屏幕不亮,ALPM 状态的唤醒握手没有走全。
这四块问题的共同点是它们都在“标准边界”之外——DP v1.3 公共版不负责,面板厂商的 TCON 手册又写得不够细,非要回到 eDP 文档里找 DPCD 字段和状态机定义才能定位。
5.2 五条现场踩坑记录
下面五条按现象、原因、解决展开,都是我或同行在项目里实际踩过的类型,参数细节做了通用化处理。
| 坑位 | 现象 | 原因 | 解决 |
|---|---|---|---|
| 背光 | 写 DPCD 背光寄存器没反应,亮度固定最亮 | 面板背光控制模式默认走了硬件 PWM,DPCD 控制未使能 | 先读能力位确认背光控制走 I2C 还是 DPCD,再配置模式位 |
| PSR | 静态画面偶发花屏,刷新一下恢复 | 帧捕获未完成就关闭主链路 | 进入 PSR 前轮询 00170h bit3 确认帧捕获指示,再关发送器 |
| 唤醒 | 合盖再打开屏幕不亮,重启正常 | ALPM 掉电后没走 PHY_WAKE 序列直接发 AUX | 先按文档 5.2.2 发 PHY_WAKE 模式,再等链路训练完成 |
| DSC | 4K@60Hz 开 DSC 黑屏,关 DSC 正常 | PPS 里 slice 数和 bps 参数与 TCON 解压能力不匹配 | 按面板手册逐项核对 PPS 参数,先单独验证 DSC 再叠加 PSR |
| 触摸 | HID 设备枚举成功,坐标乱跳 | 报告描述符的并发使用定义与实际触摸点数不一致 | 按文档 9.9 的并发定义重新解析报告描述符和 REPORT_DATA 布局 |
背光那条再补充一点:eDP 的显示控制功能在文档第 10 节,背光控制除了 DPCD 寄存器还有 LCD 面板自检功能。自检模式下 TCON 会主动输出测试图案,判断屏幕是否真的坏了,这个功能平时关着,但面板送修前跑一轮能省很多无谓的返厂时间。
DSC 那条的排查顺序也很重要。文档第 8 节规定,DSC 和 PSR 组合使用时需要额外的 SDP 同步,解压器缓冲区排放节奏要和 RFB 更新对齐。我处理过的几块高分面板,DSC 单独工作没问题,PSR 单独工作也没问题,两个一叠加就偶发黑线,最后发现是压缩流映射和选择性更新区域边界没对齐。这种问题没有任何捷径,只能把 DSC 先关掉测 PSR,再把 PSR 关掉测 DSC,最后组合测试,逐步缩小范围。
6. 从规格书到量产调试:用 DPCD 寄存器做 eDP 链路验证
新面板到手,我做的第一件事不是看规格书的时序参数,而是录一份完整的 EDID 和 DPCD dump 存档。EDID 决定面板的物理分辨率、时序支持范围和颜色格式上限,DPCD 决定链路上真正能开哪些功能——PSR、ALPM、DSC、背光控制、触摸通道,全在里面。这份 eDP 1.4b 中文版文档的 DPCD 字段章节很全,对照着把每一位展开,等于把面板的能力边界提前画出来了,后续任何调试都在这个边界内进行。
验证链路状态的最小流程,我一般用内核的 DRM 调试接口直接读 DPCD,下面这段命令从主链路能力字段开始逐段确认:
# 读取 DPCD 主链路能力字段,确认通道数和最大速率 drm_dpcd_read 0x000 16 # 读取 PSR 能力与配置区域,确认面板支持 PSR 的版本 drm_dpcd_read 0x170 8 # 读取 ALPM 状态机相关状态位 drm_dpcd_read 0x200 4这三段读操作背后对应的正是第 2 章选型、第 4 章 PSR 和第 3 章 ALPM 三类能力。每次调完一个功能,把相关地址的快照存一份命名带上日期和改动点,出了问题可以直接对比。后来我负责的每一块新面板都强制走一遍这个流程:先 dump 能力,再小步修改,每改一个 DPCD 位就验证一次对应功能,任何异常都能快速判断是寄存器配置问题还是面板本身限制。
从那以后我每次调试 eDP 链路都强制先走一遍 EDID 加 DPCD 快照,再动手改配置,事实证明这是最便宜的后悔药。面板调试是典型的一步错步步错的场景,有一份基线快照在手,大部分问题都能在十分钟内判断出方向。这份整理好的 eDP 1.4b 协议中文版放在下载区,对照着查 DPCD 字段定义和电源排序时序,排查效率能高不少,希望帮到你。
本文还有配套的精品资源,点击获取