简介面向视频处理与硬件接口设计学习者的一份 DisplayPort 技术整理文档围绕 DP 接口介绍及原理图、PCB layout 资料汇总需求适合需要系统了解协议、接口形态与硬件设计要点的工程师及学生参考。文档从接口简介与标准、Mini-DP 分类切入逐项梳理 DP 1.0 至 2.0 的带宽演进与版本差异并解释 MST 多流传输、DSC 压缩、HDR、微报文与多通道传输等关键概念帮助读者理解 4K/8K 高分辨率显示背后的协议机制。设计部分覆盖 DP 输出与接收链路、信号发生、均衡解码及时钟恢复测试部分提到眼图、I2C、兼容性与性能验证便于把协议知识与硬件实现、调试场景对应起来。压缩包内为 1 个 docx 文件大小约 1.93MB目录层级清晰可作为接口知识速查和设计测试入门笔记。已有 5737 人学习说明其在显示接口学习场景中具有一定参考价值。1. 一根时钟线都没有的显示接口凭什么越做越快把一根 DP 线插上、屏幕亮起来这件事平淡得像呼吸但它底下踩着一个反直觉的设计DisplayPort 的 20 个引脚里一根专用时钟线都没有。四对差分对全是数据像素时钟是接收端自己从比特流里“抠”出来的。更反直觉的是插上显示器之后的那两三百毫秒——源端和屏之间已经通过一条 1 Mbit/s 的半双工 AUX 通道来回读写上百次寄存器把 lane 数、链路速率、电压摆幅、预加重一档档试出来。我整理这份 DP 接口介绍加原理图与 PCB layout 资料的过程里版本对照表反而是最不值钱的部分真正难的是把这些看不见的握手摊开为什么隔直电容必须落在驱动端为什么 AUX 幅值差一点整条链路就训练不过为什么视频处理链路里宁可多贴一颗链路调理芯片。搞懂这些layout 时才知道哪些线不能将就。2. 微报文主链路DP 为什么敢不给你一根时钟线早期的数字显示接口把“时序”当成物理层的事来处理每个通道在固定的时隙里塞固定的东西像素来了就发像素行场同步来了就发同步码彼此靠一根额外的时钟线对齐。这套做法简单、硬件便宜代价是通道的用途被焊死了——你没法在同一个连接器上既不换线又不换座子地塞进新东西。DisplayPort 从 2006 年第一版就把这个前提拆了它赌的是另一条路把定时信号也变成数据。2.1 从固定时隙到微报文定时信号怎么被塞进数据流DP 的主链路传的是“微报文”micro-packet。源端把视频像素、行场定时信息、音频样本、附加数据统统切成小包按流的方式发出去接收端再按包头里的时间戳把它们重新拼回一条连续的像素流。这一步看起来只是软件层面的封装实际影响的是整条链路的物理结构既然定时信息在包里面物理层就不需要为它留专用通道四对差分线可以全部用来搬数据。这个选择带来三个连锁好处理解它们比记住版本号有用得多。第一是引脚数。标准 DP 连接器 20 个引脚主链路占 4 对差分8 根AUX 占 1 对2 根HPD 一根电源和地若干剩下的留给配置引脚。对比同代需要独立时钟通道的接口省下来的引脚可以换成更多的数据 lane或者干脆把连接器做小——Mini-DP 就是这么来的2008 年由某消费电子厂商推上笔记本外形缩了一圈电气规格和标准 DP 完全一致。第二是可扩展。因为功能是靠“包”承载的新增能力只要定义新的包类型物理连接器本身不用动。DP 从 1.0 一路加到 2.0连接器形状和引脚定义基本没变这在消费电子里是极罕见的稳定性。第三是 lane 数量可裁剪。主链路可以是 1、2 或 4 对差分源端和接收端在握手阶段协商。这意味着一颗低成本芯片可以只做 2 lane用一半的引脚和一半的功耗去驱动一块 1080p 屏高端显卡插满 4 lane 跑 8K。同一个协议从嵌入式模组到桌面显卡都能覆盖。代价也很实在接收端必须自己恢复时钟。这就是后面 8b/10b 和 128b/132b 存在的理由。2.2 8b/10b 的自定时机制与 20% 开销去了哪差分线上跑的是一串比特接收端要从中提取时钟前提是信号里有足够密的电平跳变而且长期来看直流分量要平衡——否则耦合电容会被单向的电荷顶偏眼图直接闭合。8b/10b 编码解决的就是这两件事每 8 位有效数据映射成 10 位符号映射表保证任意符号流里 0 和 1 的数量大致均衡同时不会出现太长的连续相同电平。接收端的 CDR时钟数据恢复电路就靠这些跳变沿锁相把时钟“榨”出来。DP 规范里明确写了时钟从 8b/10b 编码的数据流中提取主链路没有专用时钟通道。这笔账很好算每 lane 每个符号周期传 8 位有效数据占用 10 个比特时间效率 80%。原始码率 1.62、2.7、5.4 Gbit/s 对应到有效数据率就是 1.296、2.16、4.32 Gbit/s。4 lane 全开DP 1.0 的 10.8 Gbps 总带宽能落下 8.64 Gbit/s 的有效载荷DP 1.2 的 21.6 Gbps 落下 17.28 Gbit/s。# 反推一条 DP 链路够不够跑某个显示模式 # 单位统一用 Gbit/s避免在计算里来回换数量级 LANE_RATE {RBR: 1.62, HBR: 2.70, HBR2: 5.40, HBR3: 8.10} # 单 lane 原始码率 ENC_8B10B 10 / 8 # 8b/10b 编码开销8 bit 有效数据要占 10 bit 带宽 def usable(lane_rate_name, lanes): 返回有效数据率Gbit/s已扣掉编码开销 return LANE_RATE[lane_rate_name] * lanes / ENC_8B10B def check(width, height, refresh, bpp24, blanking1.15, rateHBR2, lanes4): # blanking 是行场消隐带来的额外开销CVT-RB 时序大约 1.05~1.10 # 传统 CVT 能到 1.25 以上这里取 1.15 做保守估计 pixel_clk width * height * refresh * blanking # 像素率单位 Hz payload pixel_clk * bpp / 1e9 # 需要的有效数据率 capacity usable(rate, lanes) return round(pixel_clk / 1e6, 1), round(payload, 2), round(capacity, 2), capacity payload for mode in [(1920, 1080, 60), (2560, 1440, 60), (3840, 2160, 60), (3840, 2160, 144)]: print(mode, check(*mode))上面这段只做一件事把“分辨率 刷新率 色深”翻译成带宽需求再和链路能力对撞。参数里最容易被忽略的是blanking它不是常数取决于时序标准同一块 4K 屏按 CVT-RB 算出来的像素率比传统 CVT 低两成链路等级可能差一档。bpp也要按实际色深填10 bpc 就是 30 位不是 24。跑出来的结果里 4K60 8bpc 大约需要 13.7 Gbit/s 有效带宽4 lane HBR2 的 17.28 Gbit/s 刚好留出余量给音频包和次级数据包——这也是 DP 1.2 被称作“4K 起步版本”的原因它的 HBR2 相比 1.1a 把单 lane 速率翻了一倍。2.3 128b/132b 与 FECDP 2.0 换编码换的是什么8b/10b 的 20% 开销在低速率时代可以接受到了要冲 80 Gbps 的时候它就成了最大的浪费。DP 2.0 把编码换成 128b/132b每 128 位有效数据只占 132 个比特时间开销降到约 3.03%。总带宽 80 Gbps 落地成 77.37 Gbps 有效这个数字和 8b/10b 时代“打八折”的直觉完全不同。配套的还有两件事。一是 lane 速率档位扩到 UHBR 10 / 13.5 / 20每 lane 10、13.5、20 Gbps四档往下兼容 RBR 到 HBR3。二是前向错误纠正FEC——它在 DP 1.4 就随 DSC 一起进来了逻辑是一旦你开始用显示流压缩把 8K 塞进有限的带宽里一个比特错误解压之后会扩散成一片马赛克靠重传来不及只能靠纠错码在接收端就地修。DP 1.4 的另一层思路是“带宽不变靠压缩顶上”总带宽还是 32.4 Gbps但加了 DSC 1.2 之后能推 8K60加 HDR meta 数据包之后能带高动态范围元数据音频通道从 8 声道 192 kHz 扩到 32 声道 1536 kHz。两条路线放在一起看就很清楚1.4 是“在既有物理层上抠效率”2.0 是“换物理层 换编码”。版本迭代表里那些分辨率数字只是结果真正决定它们的是编码效率和 lane 速率这两根杠杆。版本单 lane 最高速率最大总带宽编码有效数据率典型能力1.0 / 1.1a2.70 Gbit/s (HBR)10.80 Gbps8b/10b8.64 Gbps2560×1600 级1.2 / 1.2a5.40 Gbit/s (HBR2)21.60 Gbps8b/10b17.28 Gbps4K60、MST、Adaptive-Sync1.38.10 Gbit/s (HBR3)32.40 Gbps8b/10b25.92 Gbps4K120、5K60、8K301.4 / 1.4a8.10 Gbit/s (HBR3)32.40 Gbps8b/10b25.92 Gbps加 DSC、FEC、HDR 元数据2.020.0 Gbit/s (UHBR20)80.00 Gbps128b/132b77.37 Gbps16K60DSC、双屏 4K144注意DP 信号在电气层不兼容 DVI 和 HDMI。所谓“双模式 DP”是靠外部无源转接头把 DP 的 LVDS 电平转成 TMDS只支持单链路 DVI 或 HDMI 1.2/1.4VGA 和双链路 DVI 必须有源转换器。设计时如果看到有人直接在连接器上飞线转 HDMI那大概率是不懂这一层。3. AUX 与链路训练插上显示器的那 200 毫秒里发生了什么主链路负责搬像素但它什么时候开始搬、用几条 lane 搬、每条 lane 跑多快、摆幅多大全部由一条慢得多的小通道决定。AUX 通道速率只有约 1 Mbit/s、半双工、交流耦合差分却是整个 DP 体系里最不能出错的地方——它一挂后面所有事都不用谈。早期版本的 AUX 用 Manchester II 编码DP 1.2 之后改成 8b/10b最大数据率从 1 Mbps 提到 576 Mbps 量级本质上是为了让 EDID 和 DPCD 的批量读写别太磨人。3.1 HPD 的三种电平语义与两个时间常数热插拔检测HPD是 sink 到 source 的单向信号方向一定不能画反。它的电平不是简单的“插上/拔掉”二值而是三态语义靠持续时间区分拉到 3.3V 或保持高电平sink 存在且就绪。拉低超过 2 mssink 不存在即拔出。这个 2 ms 是去抖窗口防止插拔瞬间的机械抖动被误判成一次真实事件。拉低 0.5 ms 到 1 ms 之间这是一次中断请求IRQ_HPDsink 在告诉 source“我这边状态变了你来读一下”。source 收到之后通过 AUX 去读 DPCD 里的 IRQ 向量寄存器才知道具体是分辨率变了、链路丢了还是别的。这两个时间常数是排查时的第一把尺子。如果一个板子插拔时好时坏先拿示波器看 HPD 的低电平宽度如果掉到 1.5 ms 左右既不够 2 ms 的拔出判据、又远超 1 ms 的中断窗口source 就会进入一个语义模糊的状态表现成“识别到设备但不显示”。这种情况十有八九是 HPD 的上拉电阻太大、或者走线电容太大导致边沿被拉缓。3.2 DPCD 与 EDIDsource 靠什么问出 sink 的底细握手过程可以拆成两个阶段读的东西不一样。DPCDDisplayPort Configuration Data是 sink 侧的配置寄存器集合source 通过 AUX 读写它。读的时候拿到的是 sink 的能力支持几条 lane、支持哪些链路速率、接收端的均衡能力、时钟恢复范围。写的时候下发的是训练参数目标 lane 数、目标速率、电压摆幅等级、预加重等级。链路训练期间sink 会把每个阶段的训练结果写回 DPCDsource 再读回来判断成败。所以 DPCD 是双向的既是能力表也是状态机。EDID扩展显示标识数据描述的是“这块屏能显示什么”制造商信息、EDID 版本、屏幕物理尺寸、支持的颜色空间、原生分辨率和时序列表、音频格式。source 拿到 EDID 才知道该给屏送什么格式的内容。EDID 是通过 DDC 通道读的在 DP 上就是 AUX 之上跑 I2C 协议。两者的分工很清晰DPCD 决定“怎么连”EDID 决定“送什么”。调试时如果 AUX 能通但读 DPCD 失败问题在链路层如果能读 DPCD 但 EDID 是空的问题在 DDC 映射或者屏的 EDID 烧录。3.3 链路训练的迭代为什么它必须“试”链路训练不是一次配置到位而是一个搜索过程。原因是通道质量未知——线材长短、连接器接触、PCB 走线的阻抗连续性都会影响高频衰减。source 手里有四个可调旋钮lane 数、链路速率、电压摆幅决定信号幅度、预加重补偿高频损失。接收端还有一个均衡器可以调。流程大致是这样source 用自己偏好的配置起步通常是“能跑的最高速率 4 lane”但电压摆幅和预加重从保守值开始。每一轮它把参数写进 DPCD然后等 sink 回报时钟恢复是否锁定、通道间是否对齐、符号边界是否找到。某一档不成功就换下一档速率往下退、摆幅往上加、预加重往上加。整个过程可能包含上百次 AUX 读写这也是为什么一对支持多流的 source 和 sink 之间训练日志抓下来会很长。# 链路训练的搜索逻辑用伪代码还原“为什么它要试” # 真实实现里每一步都是 AUX 上的 DPCD 读写这里省略时序细节 LINK_RATES [UHBR20, UHBR13.5, UHBR10, HBR3, HBR2, HBR, RBR] # 从高到低尝试 SWING_LEVELS [0, 1, 2, 3] # 电压摆幅档位0 最保守 PREEMPH_LEVELS [0, 1, 2, 3] # 预加重档位 def train(sink_caps, channel_quality, lanes): # 只尝试 sink 声明支持的速率避免无效轮次 for rate in [r for r in LINK_RATES if r in sink_caps[rates]]: for swing in SWING_LEVELS: for pre in PREEMPH_LEVELS: # 通道越差需要的摆幅和预加重越高这里用简单的衰减模型代替实测 if channel_quality 0.3 and swing 2: continue # 差通道上低摆幅基本没戏跳过省时间 ok simulate_eye(rate, swing, pre, channel_quality) if ok: return {rate: rate, lanes: lanes, swing: swing, pre: pre} return None # 全部档位试完仍失败只能降 lane 数重来 def simulate_eye(rate, swing, pre, quality): # 眼高随摆幅增加、随速率下降眼宽随预加重先增后减 margin (swing 1) * quality * 2 - LINK_RATES.index(rate) * 0.4 return margin 1.0这段代码的重点不是模型准不准而是展示训练的三个特征速率优先从高往低退保住带宽、摆幅和预加重是嵌套的两层循环先加幅度再加高频补偿因为预加重会抬高功耗和 EMI、失败后回到上一层降 lane 数。实际调试时如果日志显示它在某一档反复重试却不往下走通常是 DPCD 写入没生效——比如 CTL 总线的上拉不对导致 I2C 应答丢失source 以为写成功了实际寄存器没变。3.4 MSA 与 Mvid/Nvid像素时钟是怎么被重建出来的链路速率和像素率是解耦的这是微报文架构的核心。链路侧跑的是固定的符号时钟比如 HBR2 下每 lane 540 MHz像素侧需要的节拍则取决于显示模式4K60 是 594 MHz 左右。两者不是整数倍关系怎么办答案是主数据流属性MSA。源端在每个视频帧的起始处发送 MSA里面带两个时间戳值Mvid 和 Nvid。接收端用它们算出链路符号时钟和像素时钟的比例关系再配合流里的时间戳把像素节拍“再生”出来。这两个值取的是一对整数让比例尽量接近真实值同时长期平均误差趋近于零——单帧算下来可能有极小的小数误差但因为它是个累加的时间戳机制不会漂移。from math import gcd def m_n_ratio(pixel_clk_khz, link_sym_clk_khz, lanes, bpp24): # 链路侧每秒能提供的有效比特数8b/10b 之后每符号每 lane 8 bit link_bps link_sym_clk_khz * 1e3 * lanes * 8 # 像素侧每秒需要的比特数 pixel_bps pixel_clk_khz * 1e3 * bpp # 用 24 位定点数表示比例这是 Mvid/Nvid 常见的位宽 scaled link_bps / pixel_bps * (2 ** 24) mvid int(round(scaled)) g gcd(mvid, 2 ** 24) return mvid // g, (2 ** 24) // g # 例4K60 8bpc像素率约 594 MHz4 lane HBR2符号时钟 540 MHz print(m_n_ratio(594000, 540000, 4)) # 输出约简后的 M/Nlanes和bpp两个参数直接决定比例改显示模式时这两个值会变Mvid/Nvid 也跟着变所以它不是一个固定常数而是每套时序都要重算。实际调试中如果画面出现周期性撕裂或垂直方向缓慢滚动大概率是 M/N 配错或者时间戳没对齐——这不是 lane 的问题是 MSA 的问题。MSA 之外还有次级数据包SDP承载音频和 INFOFRAME。INFOFRAME 定义了视频和音频的结构接收端靠它解释后续数据。多流场景下再叠一层边带消息用来枚举下游设备拓扑、下发命令。这些包全部挤在主链路的空隙里传所以带宽计算时要把它们的那一份留出来。4. 原理图上的 DP隔直电容、上下拉和那颗链路调理芯片从协议走到原理图最典型的场景是 FPGA 侧出来的 serdes 直接接 DP 连接器。FPGA 内部集成 DP 模块之后信号可以直接送进链路调理芯片做预加重再转给连接器接收方向则反过来连接器进来的信号先过均衡再进 FPGA。下面按输出和接收两个方向拆用的例子是某半导体厂商的一颗链路调理芯片手册上的短标号是 DP130支持到 DP 1.4b同时集成预加重和均衡因此既能当输出驱动器也能当输入均衡器双向都能用。4.1 隔直电容为什么必须落在驱动端DP 主链路是交流耦合的差分对双端接。AC 耦合的作用是隔离两端的共模电压——源端和接收端可能是不同工艺的硅片共模电平根本对不上直连会把其中一端的输入级顶死。规范里明确写了 AC 耦合的目的就是让 DPTX 和 DPRX 可以有不同的共模电压。电容放哪一端是个有物理后果的选择。放在驱动端靠近发送芯片的意思是电容之后的整段走线、连接器、线缆直流电平由接收端来定。这样做的实际好处有三个。第一插拔瞬间连接器上不会带着源端的直流偏置去和屏的外壳地打架减少打火和浪涌。第二接收端的共模建立电路只需要驱动自己这一侧的容性负载不受源端影响上电时序更好控制。第三测试时探头的接入点相对固定眼图测量的可复现性好。提示原文在输出和接收两处都写“隔直电容要放在驱动芯片端”这不是笔误。输出方向上驱动芯片是 DP130电容在 DP130 和连接器之间接收方向上驱动芯片是屏那一侧的发送器电容应该在连接器进来的位置附近而不是贴着 FPGA。判断标准只有一条谁在驱动这条差分对。容值不是随便挑的。它和接收端的终端电阻构成一个高通滤波器容值太小会让低频成分长连零或长连一之后的直流恢复衰减表现为基线漂移、眼图上下不对称。经验上按链路速率和终端阻抗算转折频率把它压到远低于数据流最低频成分的位置。4.2 输出链路FPGA 到连接器的四对差分输出方向的信号路径是 FPGA serdes → DP130 → DP 连接器。原理图上有五组东西要盯。差分输入。FPGA 给的 DP 信号本身就是 serdes 输出需要小电容隔直电容放在 DP130 这一端。这一段的阻抗控制是 100Ω 差分走线尽量短因为它在芯片和电容之间没有连接器做缓冲任何 stub 都直接变成反射。差分输出。DP130 输出给连接器的同样是 serdes 信号同样要小电容隔直但电容要靠近接口摆放。原因是这段走线要经过连接器接口处的 ESD 器件会带来额外的容性负载电容放在接口侧可以把 ESD 器件的容抗纳入匹配考虑。辅助通道。AUX 是 100Ω 差分源端接 FPGA中间用小电容隔直sink 端接连接器。这里最容易翻车的是上下拉AUX 是双向半双工两端的偏置必须配合上拉或者下拉配错会直接导致读不到 EDID。串行总线。DDC 那条 I2C 负责传 EDID也就是屏的性能参数CTL 那条是标准 I2C传 DDC 之外的控制信号比如读芯片状态、配寄存器。两条都要 3.3V 上拉。输出侧的上拉电阻按手册给的值取典型是 10 kΩ 量级。ADDR 引脚在多芯片共用一条 I2C 时用来错开地址地址不冲突的话可以挂同一条总线。接口与防护。DP 连接器是金属座金属外壳的接地要和系统地进行隔离——不是随便连一起而是通过合适的路径处理避免整条线缆的共模噪声直接灌进板内地。同时因为它是外接设备信号线和电源线上都要加 ESD 防护防护器件要放在连接器入口、隔直电容之前让静电在进入芯片之前就被泄放掉。4.3 接收链路AUX 为什么可以绕过调理芯片接收方向的路径是 DP 连接器 → DP130均衡→ FPGA但 AUX 不走这颗芯片。原因是 DP130 作为接收端时AUX 的作用变成了“源端来问我”而这条链路上没有下游显示器需要被枚举——本板就是 sink。所以 AUX 从连接器进来之后一边直接进 DP130 参与链路管理一边通过小电容隔直送给 FPGA让 FPGA 侧的控制器能直接处理握手。DDC 那条 I2C 在这里可以直接 NC因为作为接收端没有“读别人 EDID”的需求。CTL 那条仍然要接3.3V 上拉阻值按手册取典型是 2 kΩ 量级。注意这个 2 kΩ 和输出侧的 10 kΩ 不是随手写的下一节会算。HPD 在接收侧有两种接法可选取决于这颗芯片是否要参与 HPD 的整形。一种是把连接器的 HPD 直接送给 FPGA由 FPGA 产生中断另一种是经过 DP130由芯片在内部处理插入检测和中断脉冲再输出给 FPGA。选哪种要看系统对中断延迟和去抖的要求以及 FPGA 侧有没有现成的 HPD 检测逻辑。4.4 I2C 上拉 10K 还是 2K取决于总线电容上拉电阻的取值被两个边界夹住上限由上升时间决定下限由器件的灌电流能力决定。总线上的上升沿是指数充电从 0 到 0.3 VDD 的时间约等于 0.8473×R×C3.3V 供电时。标准模式 100 kHz 允许的上升时间上限是 1000 ns快速模式 400 kHz 是 300 ns。总线电容 C 包含走线、连接器、器件引脚和 ESD 器件的寄生电容实际板子上 100~300 pF 很常见。# 按上升时间和灌电流两个约束算 I2C 上拉的合理区间 C_BUS 200e-12 # 总线电容200 pF含走线、连接器、ESD 器件 T_RISE 300e-9 # 快速模式 400 kHz 的上升时间上限 VDD, V_OL, I_OL 3.3, 0.4, 3e-3 r_max T_RISE / (0.8473 * C_BUS) # 上升时间上限推出的最大阻值 r_min (VDD - V_OL) / I_OL # 灌电流上限推出的最小阻值 print(R 的合法区间: %.2f kΩ ~ %.2f kΩ % (r_min / 1e3, r_max / 1e3)) # 换成标准模式 100 kHz上升时间 1000 ns再看一次 r_max_std 1000e-9 / (0.8473 * C_BUS) print(标准模式下上限放宽到: %.2f kΩ % (r_max_std / 1e3))在 200 pF、快速模式下算出来的上限只有 1.77 kΩ 左右下限约 0.97 kΩ窗口很窄。这就解释了为什么接收侧用 2 kΩ——它的总线电容更小、或者速率要求更高必须用强上拉把边沿拉陡。而输出侧的 DDC/CTL 走线短、器件少、速率低10 kΩ 在标准模式下上限放宽到 5.9 kΩ 以上是能过的功耗还低。注意上拉不是越小越好。阻值下去之后器件拉低时的灌电流上升长期工作在极限附近会让 IO 口发热甚至失效。手册给的值通常是算过的改动之前先按上面的公式核一遍自己的总线电容。5. 排查链路训练失败、眼图不过、EDID 读空的五个现场DP 调试最难受的地方在于同一个现象背后可能是物理层、协议层、配置层三个层面的问题而它们的表现高度相似——都是“不亮”。下面五条是踩过之后总结出来的分辨方法每条都按现象、原因、解决三步走。5.1 训练停在时钟恢复AUX 通lane 不通现象AUX 读写正常DPCD 能读能写EDID 也能读出来但训练日志显示在时钟恢复阶段反复失败帧率上不去或者直接黑屏。原因AUX 是低速差分对主链路是高速差分对两者的通道要求差一个数量级。AUX 能通只说明连接器的低速引脚和基本的差分连接没问题完全不能证明高速 lane 的阻抗、长度匹配、隔直电容位置是对的。常见的是 lane 之间的长度偏差别太大导致通道间偏斜超出接收端对齐窗口或者隔直电容放在了接收端源端的共模没被隔离。解决先用 AUX Channel Monitor 类的工具把训练日志抓下来看它卡在哪一轮、用的是哪档速率和摆幅。如果它一路退到 RBR 才成功基本可以确定是通道问题而不是配置问题。然后量 lane 间的长度差把它压到规范允许的偏斜以内检查电容位置确认连接器侧的 ESD 器件没有把差分对的对内平衡破坏掉。降 lane 数能过、4 lane 不过是最典型的对内偏斜症状。5.2 EDID 读回全 0 或校验错现象链路能训练成功但 source 拿到的 EDID 是 0xFF 填充或者校验和错误导致分辨率退回默认值。原因DDC 那条 I2C 的物理层问题。三个高频原因上拉阻值不对导致边沿太缓、AUX 到 DDC 的映射关系配错、CTL 总线的地址冲突让器件不应答。还有一种隐蔽情况是 ESD 器件的寄生电容太大把 DDC 的上升沿吃掉读时序勉强能过但在某些字节上出错。解决先用示波器看 DDC 的 SCL/SDA 波形重点看上升时间。如果上升沿是明显的圆弧而不是陡沿就是上拉不够按上一节的公式重算阻值。然后确认 AUX 转 DDC 的映射逻辑——DP 的 EDID 读取是 AUX 上跑 I2C-over-AUX映射错了会读到空。最后查地址多个器件挂在同一条总线上时ADDR 引脚没配好会互相打架。5.3 眼图模板差一点点过不去现象功能全正常出图也正常但眼图测试的余量很小某些测试点刚好卡在模板边缘。原因眼图判据是分测试点的。输入端和输出端用的是不同模板——输入端TTP2看的是接收芯片看到的信号质量输出端TTP4看的是连接器处发出的信号质量。两个模板的张度和容限不一样在输入端过、在输出端不过是很常见的。另一个原因是预加重和摆幅的组合不是最优预加重加太多会让上升沿过冲眼高被削加太少高频损失补偿不够眼宽不够。解决先确认测的是哪个点别拿输入模板去判输出。然后在芯片的配置寄存器里扫一遍预加重和摆幅的组合找出余量最大的那组而不是用默认值。如果所有组合都贴着模板说明通道本身的损耗已经接近极限考虑缩短走线、换更低损耗的板材或者把链路速率降一档换取余量。5.4 插拔不识别、反复重连现象冷启动能识别热插拔时灵时不灵或者系统日志里反复出现设备上线、下线。原因HPD 信号的时间常数不对。前面说过拉低超过 2 ms本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?