ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

RK3568 eDP屏概率性黑屏:链路训练与上电时序的排查实战

RK3568 eDP屏概率性黑屏:链路训练与上电时序的排查实战 做RK3568显控类产品最怕遇到的就是eDP屏概率性不显示的问题。板子量产验证阶段几十台整机同时过温循总有那么一两台开机黑屏按一下复位又好了再冷启动又可能复现。这种问题非常磨人因为它在常温下偶尔出现一上高低温就活跃起来。我在这块RK3568的板子上前前后后排查了将近两周才把根因从“看起来像接触不良”逐步锁定到eDP的链路训练环节。这篇文章把我整个排查过程、涉及的技术原理、以及最后落地的一整套软件和硬件规避措施整理出来给正在被同类问题折磨的朋友一个参考。eDP屏在RK3568这类片上系统上出概率性不显示绝大多数绕不开两个环节——上电时序和链路训练。很多工程师第一反应是怀疑屏坏了或者连接器虚焊实际上十次里有八次是通信握手层面的问题。搞清楚eDP是怎么“握手”的问题就解决了一半。1. 先搞清楚eDP链路的握手过程才能定位概率性黑屏1.1 eDP屏和LVDS、MIPI屏的本质区别eDP全称是Embedded DisplayPort通俗理解就是把DisplayPort接口做成适合嵌入式设备使用的形态主要面向笔记本屏幕、工业平板、医疗显示这类中尺寸屏幕。RK3568同时集成了LVDS、MIPI DSI和eDP三种显示接口很多方案最终选择eDP一是因为市面上1080p以上的屏模组eDP接口占比高二是因为它的差分走线少、抗干扰能力比LVDS好三是因为支持可变刷新率、面板自刷新这些高级特性。eDP接口上有三组关键信号Main Link、AUX Channel和HPD。Main Link是数据主链路由几对差分线组成常见有1 Lane、2 Lane和4 Lane三种配置负责把图像数据高速传过去。AUX Channel是辅助通道速率比主链路低很多主要用来传输控制命令和读取屏幕信息。HPD是热插拔检测引脚用来告诉SoC屏幕是否已经准备好。你可以把这三组信号理解成一套开会系统HPD是门铃AUX是会议主持人Main Link才是真正发言的人。门铃不响主持人不会开门主持人还没确认好发言顺序发言人就开讲那信息必然传错。很多概率性不显示的问题就是门铃和主持人的配合节奏乱了。1.2 链路训练屏幕和SoC之间最关键的“握手”链路训练是eDP显示能够正常工作的基础。每次上电RK3568的eDP控制器都要和屏幕里面的接收端进行一轮协商确定三件事用几对Lane传数据、每对Lane跑多高的速率、发送端信号的电压摆幅和预加重调到什么档位。这个协商过程的专业术语叫Link Training分为两个阶段。第一个阶段叫Clock Recovery接收端从前向的时钟恢复信息中锁定时钟第二个阶段叫Channel Equalization把每一条通道的发送参数都调整到接收端认可的信号质量水平。如果这两个阶段都通过链路训练成功如果其中任何一步失败控制器会尝试降速或者减少Lane数重新训练。用个生活化的例子就像一个房间里有两个人一个在远处喊话另一个听不太清。喊话的人会先提高音量再放慢语速如果还是听不清就干脆换一个更短的句子重新喊。链路训练干的事情本质上就是“调音量、放慢语速、换短句”直到双方都能准确传话为止。问题就出在这个“调音量”的临界区里。当电路板设计、屏端IC参数、电源纹波、温度等因素叠加在一起信号质量刚好卡在“能通过训练”和“不能通过训练”的边缘就会表现出概率性不显示。今天开机通过明天开机失败常温通过高温失败。这就是为什么这个Bug这么难抓。2. RK3568上电时序与设备树里容易踩坑的三个细节2.1 eDP屏不是“给电就亮”上电顺序比你想的严格eDP屏模组内部有自己的一套控制逻辑普遍带一个TCON芯片或者MCU。屏幕从供电到可以接收数据需要一个完整的启动过程。标准的eDP上电时序是这样的先给屏幕的模拟电源和逻辑电源上电然后等待屏幕内部电源稳定再等HPD信号变为高电平SoC检测到HPD之后才发起链路训练训练完成后才允许打开背光。这个顺序里任何一个环节偏晚或者提前都可能造成不显示或者显示异常。最典型的一个问题是背光打开太早屏幕还没有完成链路训练背光已经亮了结果就是白屏、花屏、或者屏幕发光但没有任何画面。这种情况在RK3568平台上特别容易出现在使用独立背光控制芯片的方案里因为背光使能的GPIO往往由另一个驱动控制两者的初始化顺序没有强制约束。另一个容易忽略的坑是VDD到HPD的间隔。有些屏规格书里明确写需要至少50ms的延时实际设计时很多人觉得“多一点总没错”结果延时给到了200ms以上。延时加长本身问题不大但如果你在设备树里同时Enable了面板供电、HPD引脚和背光使能而它们又挂在不同的电源域下配合双方电源管理框架的启停顺序就可能出现某次启动HPD正好卡在电源域切换的瞬间导致SoC误判。这颗雷在常温下很少爆高低温下就频繁起来。2.2 设备树里Link Training参数与HPD配置的坑RK3568的eDP控制器在设备树里对应的节点一般是edp配套的还有PCIe PHY节点。设备树中与显示有关的主要配置项包括HPD引脚的GPIO编号与极性、屏供电的regulator节点、链路训练相关参数以及面板时序参数。我在实际调试中见过最隐蔽的一个坑是HPD引脚用的GPIO方向配置不对。eDP屏的HPD引脚本来是屏端输出给SoC的方向是屏端主动拉高。结果有些参考设计电路里HPD引脚既连到了SoC的HPD检测脚又连到了一个GPIO用来做屏在位检测这个GPIO如果被配置成输出模式开机瞬间就相当于直接往HPD线上灌了电平干扰了屏端自身的HPD信号。这个问题在静态检测时完全看不出来直到用示波器抓到HPD线上有异常毛刺才定位到。设备树里另一个跟概率性黑屏强相关的参数是Link Training的模式配置。有些内核版本默认允许面板支持的最高速率和Lane数去训练比如RK3568常见的eDP屏是1080pHBR2速率4 Lane。当PCB走线阻抗控制得不好、连接器接触电阻偏大或者屏端信号质量一般时最高速率模式下训练失败的几率会显著上升。这种情况我在调试中遇到过不止一次解决办法是把最大速率往下限一档从HBR2降到HBR画面分辨率不变肉眼几乎看不出区别但链路训练的成功率能从一个很不稳定的值直接拉到100%。2.3 供电与信号完整性概率性黑屏的物理根源链路训练本质上是模拟信号层面的握手所以PCBA上任何影响信号质量的环节都可能成为概率性黑屏的隐患。常用的是PCB上eDP差分线需要控制100Ω差分阻抗尽量等长、少打过孔。很多板卡设计时LVDS和eDP共用一组差分走线中间还经历了换层和跨分割这种情况下信号质量很难保证。屏的供电纹波也需要重点测。eDP屏内部的TCON工作电流并不小特别在链路训练阶段屏端会动态调整接收电路的参数这个时候如果供电电压跌落或者纹波过大接收端电路就可能达不到期望工作状态。我实测过一块问题板3.3V供电纹波在训练瞬间达到120mV而正常板在同样位置只有不到40mV。两者相差三倍训练结果却一个失败一个成功。还有一个容易被忽略的环节是连接器接触可靠性。eDP屏一般通过板对板连接器或者FFC软排线连接接触电阻过大或者个别引脚虚焊都会让信号幅度衰减。虚焊问题在量产阶段尤其难查因为有些板子交付前测试全通过到了客户现场经运输振动后才出现概率性黑屏。这类硬件层面的因素软件怎么调都很难彻底解决只能靠制造端的加严测试来兜底。3. 实测记录三步定位eDP训练失败的黑屏现场3.1 第一步复现并给故障分级排查概率性问题第一步永远是稳定复现。不能复现的问题没办法验证修改是否有效。我们当时在测试工装上写了一个循环冷启动的脚本连续给整机上下电并记录屏幕状态常温下跑了200轮复现了3次概率大约1.5%。打高低温箱之后在45℃环境下复现率飙到了15%左右基本坐实了“温度敏感”这个方向。复现的同时要给故障分级是完全没有背光还是有背光但无画面还是显示几秒后黑掉。这一步特别重要因为三类现象对应的排查路径完全不同。完全没有背光要先查背光供电和使能信号有背光但无画面要看Main Link有没有数据显示几秒后黑掉大多与屏的电源保护或者SoC检测到链路异常后主动关闭输出有关。我们的情况属于第二类背光亮、屏幕白茫茫一片没有画面这基本把范围缩小到了链路训练失败或HPD检测异常。3.2 第二步从内核日志里找到训练失败的证据RK3568在Linux内核里的显示驱动基于DRM框架eDP控制器对应的驱动会打印链路训练相关的关键日志。复现故障后第一时间抓串口日志或者存dmesg搜索关键词dp、edp、link、training。正常开机时日志里能看到链路训练成功的信息大概是这样的格式rockchip-dp edp: link training success rockchip-dp edp: lane count 4, rate 5.4Gbps故障时日志里会出现类似rockchip-dp edp: link training failed rockchip-dp edp: LT_FAIL, retry Link Training注意看驱动有没有自动重试。有些内核版本在链路训练失败后会尝试降低速率重新训练一次有些版本则直接跳过开屏步骤。如果你的内核版本没有重试逻辑概率性黑屏一旦训练失败就是永久黑屏必须按复位键才能恢复——这和我们现场的现象完全吻合。为了看到更详细的训练过程可以打开DRM调试输出echo 0x1f /sys/module/drm_kms_helper/parameters/debug这样内核会把训练过程中每一对的时钟恢复、均衡状态打出来。故障日志里能看到某一对Lane始终无法完成均衡这跟PCB走线或连接器该Lane接触不良高度相关。如果多台故障机的失败Lane都是同一对那基本可以判定是硬件布线或者连接器问题如果每次失败的Lane不固定则更偏向信号裕量不足。3.3 第三步示波器实测上电时序与AUX通信软件日志只能告诉你训练失败不能告诉你为什么失败。这时候要上示波器同时抓几个关键信号屏供电VDD、HPD、AUX的AUX_P差分对、背光使能。触发条件设置为HPD上升沿抓开机瞬间的完整波形。第一件事看VDD稳定到HPD变高之间的时间差。跟屏的规格书对比如果小于要求值那问题就很清晰了。我们这块屏要求的是VDD稳定后至少50ms再拉高HPD实测故障机上经常只有20ms左右。进一步追查发现屏供电不是直接由PMIC控制而是挂在了一颗负载开关上负载开关的使能信号和HPD的GPIO初始化顺序在某种电源域配置下不稳定导致HPD提前被拉高了。第二件事用示波器搭配逻辑分析仪解AUX总线。链路训练的命令和数据都跑在AUX上抓下来之后可以看到训练过程到底卡在哪一步。这一步需要一些经验AUX是双向半双工协议波形上能看到请求和应答。正常训练会依次收到EDID读取请求、链路训练请求、配置命令故障时往往停在读取EDID之后的第一个训练请求上也就是屏端收到了请求但没有任何回应或者回应了错误码。第三件事测电压纹波。把示波器带宽限制在20MHz探头放在屏端供电引脚上重点看链路训练发起瞬间的电压跌落幅度。前面说到我们实测故障板训练瞬间纹波120mV而正常板只有40mV这个差距足以让接收端电路工作点飘移。4. 从软件调优到硬件兜底一套可复用的解决路径4.1 设备树里加延时、限速率、强制训练参数如果示波器确认是上电时序不足优先在软件里补延时。RK3568的设备树中eDP节点和背光节点都支持配置延时参数。比如在背光节点里增加点亮前的延时pwm_backlight { status okay; enable-gpios gpio4 RK_PC6 GPIO_ACTIVE_HIGH; post-on-delay-ms 250; };这个post-on-delay-ms的含义是从链路训练成功通知到背光点亮至少再等250ms。加大这个值可以确保屏幕已经完全进入工作状态。类似的面板节点里也可以配置上下电时序的延时例如panel { compatible simple-panel; power-supply vcc3v3_lcd; delay-power-hpd 100; };注意不同内核版本的属性名可能会有差异具体以实际内核源码为准。有一点要注意加延时不要一次性加太大。比如从20ms加到200ms如果问题消失再逐步降到80ms、50ms去验证边界值。延时加太大会拖慢开机时间产品体验会受影响。如果链路训练在HBR2速率下反复失败可以通过设备树限制最大速率。RK3568的edp节点里有max-link-rate相关的配置项也可以在内核驱动里直接改默认速率。1080p60Hz的屏用HBR2.7Gbps完全足够。实测下来把速率从5.4Gbps降到2.7Gbps四对Lane全部保持重启上千次没有再出现一次训练失败。对于驱动没有自动重试的问题补丁逻辑不复杂在训练失败返回后把速率降一档重新发起训练最多重试三次。这个逻辑只需要改单个驱动文件实测对概率性黑屏有奇效。4.2 背光晚点亮、链路失败重触发等驱动层手段除了设备树参数驱动层面还有几个实用的兜底方案。第一个是背光延迟点亮的软实现。与其在硬件上用RC延时电路不如在驱动里监听DRM的原子提交事件在确认画面已经输出后再使能背光GPIO。具体做法是在backlight驱动里注册DRM panel事件的回调收到panel enabled事件后再拉高背光使能引脚。这个方法比单纯加延时可靠因为它是事件驱动的不依赖固定的毫秒数。第二个是链路训练失败后的自动恢复机制。有些平台在链路训练失败后会拉低HPD让屏重新进入上电流程。如果屏支持这种热复位方式可以在驱动失败路径里主动触发HPD拉低再拉高。需要注意的是HPD拉低之后必须等待足够时间让屏端完全掉电复位否则可能进入一个更尴尬的半复位状态。第三个是打开DRM框架的自适应刷新机制。如果屏支持eDP的PSR特性可以在链路训练完成后让面板进入PSR模式PSR模式下如果链路发生异常驱动会更容易感知并触发重建链路。这个方案不适合所有屏需要确认屏模组支持PSR功能。4.3 硬件层面的补救与量产兜底措施如果软件调整已经能把复现率降到极低但硬件设计上确实存在隐患建议从以下三个方向去改善。首先是电源纹波。屏供电的滤波电容要尽量靠近屏端连接器最好在连接器引脚旁边放一组1uF和0.1uF的并联电容。如果纹波还是偏大考虑电源输入串一个小阻值电阻再进LC滤波。我们整改后屏端纹波从120mV降到了50mV以内链路训练失败率直接归零。第二是走线和连接器。eDP差分线的阻抗控制在100欧姆正负10%以内尽量保持同一层走线避免换层损耗。如果实际版图上无法避免过孔至少保证差分对过孔位置对称、数量一致。连接器方面优先选择带锁扣的板对板连接器或者压接式FFC座避免振动导致的接触不良。第三是产线兜底。在整机测试软件里加一个开机自检逻辑开机后延时500ms读取DRM连接器状态如果检测到链路异常自动触发一次热复位重试。这个逻辑不解决根因但能把产线和售后端的不显示故障率降到极低给根因整改争取时间。5. 常见问题排查速查表与量产防坑清单5.1 概率性不显示常见现象、原因与排查要点现象可能原因排查要点解决方向开机黑屏复位后恢复链路训练失败后无重试dmesg搜link training failed驱动增加降速重试限速率背光亮但无画面上电时序中HPD提前或链路未完成示波器量VDD与HPD间隔设备树调整时序延时频繁断电冷启动后不显示屏供电纹波过大或电源跌落20MHz带宽测训练瞬间纹波加强滤波电容检查负载开关高低温下复现率上升信号裕量不足温度影响摆幅高低温箱循环冷启动限HBR速率改善差分走线固定某一对Lane训练失败连接器虚焊或PCB走线缺陷观察日志中失败Lane序号补焊连接器检查差分线排查概率性问题有一个铁律一次只改一个变量。改了设备树延时就只验证延时改了速率就只验证速率。同时改多处参数看着问题消失了但不知道是哪一处起的作用后续换一批屏或者换一版PCB问题就会换一种姿势回来。5.2 量产阶段提前暴露问题的测试建议概率性问题最怕量产阶段才爆出来所以测试阶段就要创造“刁难”的条件。上电时序问题可以用等幅电压拉偏来激发把屏供电电压从标称值拉偏正负10%连续冷启动200次。链路信号裕量不足可以用高低温循环来激发温度从零下10度到60度连续循环每个温度点停留30分钟全程做开机检测。另外强烈建议在测试脚本里加入HPD引脚的监测如果在开机过程中检测到HPD有毛刺或者重复翻转直接记录为失败。HPD异常是很多概率性黑屏的前置信号把这一项加进测试项能比单纯检测“屏幕有没有亮”更早发现隐患。5.3 避坑经验这些弯路我替你走过了第一不要一上来就怀疑屏。eDP屏模组出问题概率极低尤其是品牌屏。我们当时第一批换了三张屏问题照旧白白浪费了大半天。先看日志再动手拆屏这是排障的基本顺序。第二概率性问题必须做数据记录。每次复现时的环境温度、电压、开机次数、失败日志、当时改了什么参数全部记录在案。没有记录的表征都是主观感受有了数据才能分析出温度相关性、电压相关性这些关键线索。第三示波器探头要接对地。测HPD和AUX信号时探头地线要用短地针用长夹子地线会引入大量噪声波形严重失真判断结论也会失真。这个细节看起来不值一提实际排查时坑过不少人。个人经验里最想说的一句话这类问题排查到最后往往发现根因并不复杂复杂的是破案过程。RK3568平台的eDP显示链路硬件上无非是电源、差分线、HPD和AUX这几根线软件上无非是时序、链路训练参数、背光控制和重试机制这几段逻辑。把整个启动过程拆成一段一段波形来看把日志里每一个关键字段查清楚概率性黑屏是可以做到系统性消除的。后来我把这套排查流程固化成了一份内部清单先看日志确认训练结果再测时序确认阶段卡点再从波形回溯硬件隐患最后针对根因做精准修改。产线再遇到类似问题先按这份清单走一遍大多数时候半天之内就能找到方向。希望这篇文章也能帮你少走弯路。
返回列表