简介面向视频处理与高速显示接口学习的DP技术文档适合硬件工程师、PCB Layout人员及显示接口入门者系统梳理DisplayPort知识。内容从接口简介、标准与Mini-DP分类切入梳理DP 1.0至2.0各版本带宽、MST、DSC、HDR等特性差异并延伸到显示接口概述、数据包化传输原理、输出与接收端电路设计以及眼图、I2C等测试要点兼顾原理理解与原理图、PCB Layout参考。压缩包共1个docx文件约1.93MB按章节编排便于按主题查阅和整理笔记。已有5737人学习对接口选型、版本辨析和设计排错具有参考价值。1. 一块 4K 输出板卡在评审会上DP 接口为什么值得单独整理硬件评审会上一块带 4K 输出的板子卡住了FPGA 的 DP 接口模块跑起来了SerDes 也有波形接上显示器却是一片黑。示波器量主链路差分对眼图是开的最后抓 AUX 才发现辅助通道少了一组上拉链路训练根本没有启动。这种问题的尴尬在于它既不在协议文档里也不在代码里而在原理图某根线上。这份 DP 接口资料就是为这类场景整理的从 2006 年 DisplayPort 发布时的报文化设计、版本迭代到 2.0 的 80 Gbps再落到预增强与均衡芯片的输入、输出两种用法最后是眼图与 I2C 的测试方法。它更像一份可以被逐条对照的原理图与 PCB layout 汇总做视频处理前端、多屏输出、显示模组或者板卡类项目的硬件工程师基本能照着抄进自己的设计里。2. DP 协议栈拆解四条主链路、一条 AUX 与握手六步的分工DP 和 HDMI 在用户视角差不多但在板级视角差别很大。HDMI 有独立的 TMDS 时钟对DP 没有——时钟从数据流里恢复出来所以对走线等长、阻抗和抖动更敏感HDMI 的 DDC 是一条相对简单的 I2C而 DP 的 AUX 是一条双向半双工差分通道不仅要读 EDID还要读写 DPCD 寄存器、协商链路速率和电压摆幅。理解这个差异才能解释为什么很多板子“线接对了但不亮”。2.1 主链路、AUX 与 HPD三条通道各自的职责边界主链路是单向、高带宽、低延迟的信道用来传未压缩的视频和音频。它由 1、2 或 4 对交流耦合、双端接的差分对组成每一对叫一条 lane。每条 lane 自定时运行原始码率可以是 1.62、2.7、5.4 Gbit/s后来加到 8.1 Gbit/s2.0 时代又引入 UHBR 的 10、13.5、20 Gbit/s。数据按 8b/10b 编码也就是每 8 位消息编进 10 个符号所以每条 lane 解码后的有效速率只有原始值的 80%1.296、2.16、4.32 Gbit/s。所有使能的 lane 必须跑同一速率链路的速率和像素时钟是解耦的像素时钟靠 Mvid、Nvid 两个时间戳从链路符号时钟里重新生成。没有专门的时钟通道时钟从数据流里提取这一点直接决定了后面 layout 的很多约束。AUX 通道是一条独立的双向半双工差分线交流耦合单一方向速率约 1 Mbit/s。它承担的是设定与控制读 EDID 确认显示器能力、读 DPCD 知道对端支持几条 lane 和多高速率、写各种显示配置寄存器、读接收端状态寄存器。早期版本用 Manchester II 编码1.2 之后换成 8b/10b最大带宽从 2 Mbps 提到 720 Mbps。AUX 是握手的地基AUX 不通主链路再漂亮也不会出图。HPD 是接收端指向源端的信号三个作用一是设备存在检测接 3.3V 或拉高表示 sink 插入拉低超过 2 ms 表示设备移除二是中断请求拉低 0.5 ms 到 1 ms 表示 sink 有事要说源端再去通过 AUX 读 DPCD 里的 IRQ 向量寄存器判断中断类型三是配合连接器上的电源引脚按协议这路电源要支持 5V/0.5A给本地设备供电。另外 DP 信号本身不兼容 DVI 和 HDMI所谓双模 DP 是借外部无源转接头输出单链路 DVI 或 HDMI 1.2/1.4靠转接头把 LVDS 电平转成 TMDSVGA 和双链路 DVI 必须用有源转接这一点在做兼容性宣称时容易说错。2.2 从插上到出图六步前置流程的顺序不能乱设备插入后DP 要走的不是一条命令而是一串有严格先后顺序的事务全部发生在 AUX 通道上热插拔检测、读 DPCD、读 EDID、链路训练、发送 MSA、开始数据传输。顺序错了后面的步骤拿到的就是脏数据。第一步热插拔HPD 被拉高源端知道有新设备接入开始发起 AUX 事务。第二步读 DPCD源端向接收端要一份能力清单内容包括 lane 数量、支持的最高链路速率、电压摆幅、预加重、均衡能力和时钟恢复参数。这一步决定了源端“能开多大”也是链路训练前必须拿到的输入。第三步读 EDID拿到的是显示器侧的信息制造商、EDID 版本、屏幕尺寸、支持的色彩空间、支持的分辨率列表、原生分辨率和音频格式。源端据此决定送什么格式的内容所以 EDID 读不全最常见的结果就是分辨率掉档或者直接黑屏。第四步链路训练源端把自己选定的目标配置写进接收端的 DPCD接收端按这个配置调整均衡再把每个训练阶段的结果写回 DPCD源端读回来判断是否通过不通过就降速或者加预加重重试。这个过程是迭代的一对支持多流功能的源端和接收端之间一次完整的训练可能包含上百次读写操作所以抓 AUX 日志时看到几百行记录是正常的。第五步发 MSA主数据流属性告诉接收端这路视频模式的详细时序信息工程师的一项日常工作就是核对 MSA 里的参数和实际视频模式是否一致。第六步开始传数据音频和 INFOFRAME 这些辅助信息放在可选的次级数据包里跟着走。如果源端支持多流还会用边带消息跟下游的分支设备通信获取各个 sink 的结构和能力。这条链路里任何一个环节断掉现象都是“黑屏”但原因完全不同。所以排查时不要一上来就量主链路的眼图先用 AUX 抓包看流程走到第几步停住效率会高很多。2.3 版本选型带宽、DSC 与 8b/10b 编码的取舍版本迭代的主线就是带宽和新特性。1.0 在 2006 年发布最大总带宽 10.8 Gbps有效数据率 8.64 Gbps2 米线现在已经废弃。1.1a 在 2008 年允许使用光纤等其他传输介质把 HDCP 加进了内容保护实际用得很少。1.2 在 2009 年底把每通道速率翻倍到 5.4 Gbps总带宽 21.6 Gbps有效 17.28 Gbps支持 4K60、3D 和多流1.2a 在 2012 年加了自适应同步让显示屏刷新率跟着源端指示走。1.3 在 2014 年引入 HBR3每通道 8.1 Gbps总带宽 32.4 Gbps有效 25.92 Gbps能跑 4K120、5K60、8K30。1.4 带宽不变但加了显示压缩流、前向纠错和高动态范围元数据包音频提升到 32 声道 1536 kHz 采样率8K60 才真正可用。2.0 跳到 80 Gbps编码从 8b/10b 换成 128b/132b有效数据率 77.37 Gbps单屏 16K60、10K60 无损、4K240双屏 4K144。版本发布每通道速率最大总带宽有效数据率编码典型能力1.0 / 1.1a2006.5 / 2008.11.62、2.7 Gbps10.8 Gbps8.64 Gbps8b/10b2560×1600601.2 / 1.2a2009.12 / 2012.5增加 5.4 Gbps21.6 Gbps17.28 Gbps8b/10b4K60、MST、3D、自适应同步1.32014.9增加 8.1 Gbps32.4 Gbps25.92 Gbps8b/10b4K120、5K60、8K301.4 / 1.4a2016.3 / 2018.4不变32.4 Gbps25.92 Gbps8b/10b加 DSC、FEC、HDR 元数据8K602.02019.6增加 UHBR 10/13.5/2080 Gbps77.37 Gbps128b/132b16K60、10K60 无损、4K240选型时最容易犯的错是只看“最大分辨率”不看编码开销和消隐开销。下面这段脚本用来做链路预算把像素率换算成主链路需要的有效带宽再反推需要几条 lane、跑在哪一档速率。def stream_bandwidth(h_active, v_active, refresh, bpp24, overhead1.10): 估算一路视频流需要的主链路有效带宽Gbit/s h_active / v_active: 有效像素数 refresh: 刷新率单位 Hz bpp: 每像素比特数RGB888 取 24RGB101010 取 30 overhead: 消隐与时序开销系数1080p 取 1.054K 高刷一般取 1.10~1.15 pixel_rate h_active * v_active * refresh * overhead # 像素率 Hz return pixel_rate * bpp / 1e9 # 比特率 Gbit/s # 8b/10b 编码下每档原始速率对应的单 lane 有效速率 lane_capacity {1.62: 1.296, 2.7: 2.16, 5.4: 4.32, 8.1: 6.48} def pick_link(need_gbps): 从低到高尝试链路配置返回第一个满足需求的组合 for raw, eff in lane_capacity.items(): for n in (1, 2, 4): if n * eff need_gbps: return n, raw, n * eff return None need stream_bandwidth(3840, 2160, 60, bpp24, overhead1.10) print(f4K60 8bpc 需要有效带宽 {need:.2f} Gbit/s) print(推荐配置%d lane %.2f Gbps可用 %.2f Gbit/s % pick_link(need))脚本里bpp和overhead是唯一需要按项目改的两个参数做 10 位色深就把 24 换成 30做高刷新率就把 overhead 往 1.15 靠。输出结果会告诉你 4K60 8 位色大约需要 13 Gbit/s 的有效带宽两条 HBR2 lane 就够四条 HBR 也够但功耗更高。一个设计良好的源端会尽量用更少的 lane 和更低的电压摆幅来降低功耗这也是链路训练会从首选配置开始迭代、失败再降档的原因。日常 4K 用到 1.2 就够8K 才是 1.4 加 DSC 的战场2.0 的 80 Gbps 不是不能上但要先算清楚线材、连接器和芯片三者的成本。3. 输出端设计FPGA SerDes 经预增强芯片到连接器的原理图落地长距离传输必须对输出信号做预增强、对输入信号做均衡所以中间要放一颗兼具这两种能力的芯片。资料里用的是一颗支持到 DP1.4b 的预增强与均衡二合一器件型号 DP130它既能当输出驱动也能当输入均衡同一颗料覆盖收发两个方向BOM 上会省不少事。这一章讲它作为输出芯片时的原理图怎么画。3.1 输出链路的分块与器件职责整条链路分成三段FPGA 内部的 DP 发送模块输出 SerDes 信号经隔直电容进 DP130DP130 做预增强后经隔直电容送到 DP 连接器。FPGA 已经内置 DP 模块的场合这种接法最直接省掉外部的编码和并串转换。三段各自的职责要分清。FPGA 段负责打包、编码、并串转换和链路训练的状态机DP130 段负责补偿通道损耗通过调整预增强档位让信号在接收端还能张开眼连接器段负责机械连接和 ESD 防护。做原理图评审时我会把这三段的边界画出来贴在评审材料第一页因为大部分低级错误都发生在“谁的电容该放哪边”这种边界问题上。3.2 隔直电容、上下拉与 I2C 上拉的取值与摆放输出侧有五处容易出错差分输入、差分输出、辅助通道、串行总线和接口配置。差分输入的隔直电容要放在驱动芯片端也就是靠近 DP130 的一侧因为 FPGA 输出的 SerDes 是交流信号电容靠近接收端才能减少反射。差分输出的隔直电容同样要靠近连接器摆放理由正好相反——输出信号要经过一段走线才到连接器电容放在连接器端能把这段走线的直流电位问题挡在外面。辅助通道按 100Ω 差分控制源端接 FPGA同样用小电容隔直接收端接连接器这里要特别注意上下拉电阻AUX 在空闲时需要有确定电平上下拉漏贴会让链路训练在第一步就失败。串行总线有两条。一条是 DDC 的 I2C负责传 EDID源端靠它识别显示器能力另一条是 CTL 端的 I2C是标准 I2C 总线传除 EDID 之外的其他控制信号。两条都需要做 3.3V 上拉输出侧的上拉电阻取 10K。ADDR 引脚用于多个芯片共用同一条 I2C 总线时区分地址地址不同就可以挂在一起这一点在多路输出的板子上很实用。信号组差分/单端隔直电容位置上拉关键注意点主链路输入差分靠近 DP130 输入端无电容容值一致避免对内失配主链路输出差分靠近 DP 连接器无四对走线同层同阻抗AUX100Ω 差分源端小电容隔直按参考设计上下拉空闲电平必须确定DDC I2C单端无3.3V / 10K与 EDID 读取成功率直接相关CTL I2C单端无3.3V / 10K多芯片共用时靠 ADDR 分址HPD单端无按参考设计拉低时序决定插拔识别接口配置上DP 连接器是金属座要把金属座的接地和系统地进行隔离不然外部设备的噪声和地电位差会顺着外壳灌进板内。同时因为它是外接接口信号和电源上都要加 ESD 防护器件尽量靠近连接器让静电电流在进入芯片之前就被引走。3.3 输出端原理图连线清单把上面这些整理成一张连线表画图时逐条对照比凭记忆可靠。网络起点终点关键元件备注ML_LANE0~3FPGA SerDes 输出DP130 差分输入隔直电容电容靠近 DP130ML_OUT0~3DP130 差分输出DP 连接器隔直电容电容靠近连接器AUX_CHFPGADP 连接器隔直电容、上下拉100Ω 差分DDC_SCL/SDADP130DP 连接器10K 上拉传 EDIDCTL_SCL/SDA主控DP13010K 上拉传输其他控制信号HPDDP 连接器主控按参考设计中断与插拔共用DP_PWR连接器电源脚板内 5VESD 器件5V/0.5A这张表的价值在于评审时能一条条问这条线的电容在哪、上拉有没有、ESD 放在哪。我见过最典型的一次翻车就是 DDC 的上拉画在了 DP130 和主控之间连接器那一侧反而没有结果 EDID 读出来全是 0xFF。3.4 输出端 PCB layout阻抗、等长与地隔离Layout 部分资料里只给了标题实际做的时候按下面几条约束走。主链路四对差分按 100Ω 差分阻抗控制对内两根线严格等长对与对之间也要做等长补偿误差控制在几个 mil 以内参考平面必须完整不能在差分对下方开槽或者跨分割否则回流路径断了眼图会莫名其妙地塌。隔直电容的焊盘会引入阻抗不连续所以电容要放在走线尽量直的位置焊盘下面挖空处理。AUX 和主链路要拉开距离避免主链路的高频能量耦合到 AUX 上导致误码AUX 自身按 100Ω 差分走长度不需要和主链路严格对齐但也不要绕远。ESD 器件放在连接器焊盘和芯片之间越靠近连接器越好走线先经过 ESD 再到芯片。连接器的金属外壳地和系统地之间用磁珠或者电容做单点连接别直接大面积铺铜连在一起否则静电测试时很容易把整板的地电位带偏。4. 接收端设计均衡芯片旁路 AUX 与 HPD 两套接法的取舍接收端的芯片还是同一颗但用法完全不同它不再驱动连接器而是把连接器进来的信号均衡后送给 FPGA。这个方向最容易出问题的不是主链路而是 AUX——很多人习惯性地把 AUX 也接到芯片上结果链路训练根本起不来。4.1 接收链路的信号流向与均衡芯片的功能边界信号从 DP 连接器进来四对差分先经隔直电容进 DP130 做均衡均衡后的信号再经隔直电容送给 FPGA电容靠近 FPGA 摆放。和输出侧一样电容位置的原则是“靠近信号的接收方”。芯片在这里承担的是补偿通道损耗把经过线材和连接器衰减后的信号重新张开。速率越高、线越长均衡档位就要越大。有些设计还会在这条链路上加一颗自适应重定时器速率低于 1 Gbps 时自动配成重驱动、高于 1 Gbps 时自动配成重定时用来对付长线或者级联场景是否需要取决于线材长度和链路速率短距离板上走线一般用不上。4.2 AUX 直连 FPGA 与 HPD 两套接法怎么选接收侧的 AUX 不走芯片直接从连接器出来就送给 FPGA。具体接法是AUX 从连接器出来后一方面接到 DP 芯片的对应引脚另一方面经小电容隔直送给 FPGA同样按 100Ω 差分控制上下拉不能漏。之所以要绕开芯片是因为 AUX 是双向半双工的控制通道芯片在这一侧不做转发硬接进去反而会破坏握手时序。HPD 在这个方向上提供了两种接法选哪种取决于主控是否希望自己完全掌控插拔检测。一种是连接器 HPD 直接进主控主控自己判断插入和中断另一种是经过芯片再转给主控由芯片完成一部分电平处理。两种都能工作但如果主控需要精确测量 HPD 拉低的持续时间比如 0.5 ms 到 1 ms 的中断窗口建议走直连中间多一级器件就会多一份延迟和不确定性。串行总线在接收侧也有变化。DDC 的 I2C 在这个方向没有显示器信息要读可以直接 NCCTL 端的 I2C 仍然要接负责其他控制信号交互3.3V 上拉上拉电阻取 2K——注意这里和输出侧的 10K 不一样照抄输出侧的参数是常见错误。ADDR 的处理逻辑相同多芯片共用总线时靠地址区分。项目输出侧做法接收侧做法差异原因主链路隔直电容输入靠芯片、输出靠连接器输入靠芯片、输出靠 FPGA电容始终靠近接收方AUX 走向源端接 FPGA经电容到连接器连接器出来后直连 FPGA同时接芯片双向控制通道不做芯片转发DDC I2C必须接10K 上拉可 NC接收侧无 EDID 可读CTL I2C10K 上拉2K 上拉两侧总线负载不同HPD连接器直出两种接法可选主控是否需要精确计时4.3 接收端布局与地、ESD 处理接收侧的 layout 原则和输出侧一致主链路 100Ω 差分、对内等长、参考平面完整、隔直电容靠近 FPGA。差别在于接收侧的 ESD 更重要——连接器是整块板子最容易被静电打进来的地方信号和电源都要加防护器件靠近连接器放置。连接器金属壳与系统地隔离这一条在两侧都要做但接收侧还要额外考虑一点如果整机是金属外壳连接器外壳和机壳之间的搭接方式会影响静电泄放路径最好在结构评审时就把这条确认掉别等 EMC 测试才发现要改板。5. DP 调试与常见问题排查眼图测试点、AUX 抓包与五类翻车场景5.1 眼图测试测试点选错测出来的结论就是错的眼图测试的第一件事不是接示波器是确认测试点。资料里给出了输入测试点和输出测试点的区分输入侧对应 TTP2输出侧对应 TTP4两个测试点的眼图模板不一样套错模板会出现“明明能显示但测试不过”的假故障。有些资料图里标的是另一颗重定时器型号的测试点划分编号体系是通用的具体套用时以手上芯片手册为准。测试顺序一般是先测输入点再测输出点输入点不过说明通道损耗已经超出芯片的均衡能力要么换线要么加均衡档位输入过、输出不过问题在芯片配置或者输出走线。眼图模板的判据要看模板的开口位置和高度不要只盯着“眼睛张没张开”模板不通过往往是因为某几个码型的过冲或者下冲超标。5.2 AUX 抓包比波形更快定位问题的方法AUX 通道的通信记录是排查 DP 问题最高效的入口。抓包工具接在 AUX 上记录源端和接收端之间的每一次读写重点看三件事读 DPCD 有没有返回、EDID 读回来的头部是不是 00 FF FF FF FF FF FF 00、链路训练迭代了几轮停在哪个速率档。资料里提到这类工具是所有 DP 相关工程师和设计师的必备设备我完全同意——没有它黑屏就只剩下“量波形”一条路。抓下来的日志通常是十六进制字节流人工看很痛苦。可以写个小脚本把事务按类型拆开只保留关心的寄存器区间import re # 假设抓包工具导出的每行格式为 # [时间] CMD0x09 ADDR0x00101 LEN0x10 DATA00112233... LINE re.compile(rCMD(0x[0-9A-Fa-f])\sADDR(0x[0-9A-Fa-f])\sLEN(0x[0-9A-Fa-f])) def parse_aux_log(path, watch(0x00100, 0x00200)): 按 DPCD 地址区间过滤 AUX 读写记录 CMD 高 4 位表示操作类型0 为写9 为读 watch 为关心的起始地址区间默认只看链路配置和链路状态两段 lo, hi watch hits [] with open(path, encodingutf-8) as f: for line in f: m LINE.search(line) if not m: continue cmd, addr, length (int(x, 16) for x in m.groups()) if lo addr hi: op 写 if (cmd 4) 0 else 读 hits.append((hex(addr), op, length)) return hits for addr, op, length in parse_aux_log(aux_capture.log): print(fDPCD {addr} {op} 长度 {length})脚本里watch区间要按实际关心的问题改查链路训练就盯链路配置和链路状态两段寄存器查 EDID 就换成 DDC 那一段。把日志过滤成几十行之后链路训练在第几档速率失败、接收端回的训练结果是什么一眼就能看出来。5.3 常见问题排查五条最容易翻车的点现象一主链路有波形显示器一直黑屏。原因多半在 AUX最常见的是上下拉漏贴或者阻值贴错导致 AUX 空闲电平不确定源端发出去的读 DPCD 请求没有回应。解决办法是先不插显示器量 AUX 两根线的空闲电平确认在规定的共模范围内再插上显示器抓一次握手日志看第一步读 DPCD 有没有返回。现象二链路训练到高速率档就失败降到低速率档就正常。原因是通道损耗超出当前预增强或均衡档位的补偿能力或者差分阻抗没控住。解决办法是先把预增强和均衡往上调一档试如果能过就说明是通道损耗问题调档无效就要回头查走线阻抗和参考平面尤其是隔直电容焊盘处的阻抗不连续。现象三插拔时好时坏重新插一次就正常。通常是 HPD 的时序问题拉低时间不够 2 ms 被当成抖动或者 HPD 上的滤波电容太大把 0.5 ms 的中断脉冲吃掉了。解决办法是把滤波电容换小必要时在 HPD 上加一级缓冲保证边沿干净。现象四同一块板子接 A 显示器正常接 B 显示器不亮。优先怀疑 EDID读回来的数据不完整或者校验和错误源端会选择保守的默认模式运气不好就黑屏。解决办法是抓 DDC 上的 I2C 波形确认上拉电阻和总线速率再对比两台显示器的 EDID 长度和扩展块数量。现象五实验室一直正常到了现场批量出问题。大概率是 ESD 或地处理不到位连接器金属壳和系统地直接连通外部设备的静电顺着外壳打进来。解决办法是复查连接器的地隔离和 ESD 器件位置ESD 一定要在信号进入芯片之前完成泄放。5.4 出图之后的收尾测试能正常出图不代表可以结束测试。资料里的建议是眼图、I2C 总线按标准方法测完电源、时序、时钟按芯片规格书逐项核对如果各项都正常且长期出图稳定可以考虑适当减少重复测试项把时间留给长稳和兼容性矩阵。我一般会保留至少三种不同分辨率、两台不同显示器的组合跑满 24 小时中间穿插几次热插拔这个过程能捞出大部分偶发问题。6. 验收本文还有配套的精品资源点击获取