ARTICLE DETAIL

资讯详情

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

RK3588双通道MIPI-CPHY屏显示异常排查与调试实战

RK3588双通道MIPI-CPHY屏显示异常排查与调试实战 RK3588跑Android12双通道MIPI-CPHY接口外接一块1080x2400的屏幕。开机logo正常进入桌面后画面却时不时闪一下把亮度调低能明显看到水波纹运气再差一点整个画面左右错位像被人从中间竖着切了一刀。这三个现象我连着调了将近一周才彻底解决期间把屏参改了无数遍最后发现真正的问题根本不在timing而是C-PHY物理层的配置、双通道数据划分方式以及Android12显示链路之间互相纠缠的结果。这篇东西就是把这几天踩过的坑、验证过的排查路径完整写下来给正在调RK3588双通道MIPI-CPHY屏的驱动、系统、以及硬件同事做个参照。如果你现在已经被异常显示折磨得想摔板子建议先别急着动DTS里的hback porch。先看我前两章把C-PHY和双通道拼接的机制理清楚再回头改参数效率会高得多。1. C-PHY没搞懂之前改一百次timing都是白费1.1 D-PHY和C-PHY是两套完全不同的信号机制很多从RK3399、RK3568平台转过来的朋友潜意识里还是会用D-PHY的思路调C-PHY这是最大的坑。D-PHY是差分信号一对线传数据、一对线传时钟时序清清楚楚。C-PHY完全不一样它没有独立的时钟线每一根lane内部有三根线通过三个引脚之间的电平差来同时承载数据和时钟信息。也就是说时钟是嵌在数据流里的MIPI接收端需要通过CDR时钟数据恢复把时钟从码流中提出来。这个差异直接导致两个后果第一C-PHY的物理层对信号质量更敏感稍有抖动接收端CDR就失锁表现出来就是闪屏、雪花、窄带条纹第二C-PHY的带宽计算逻辑跟D-PHY完全不同不能简单用频率×lane数来估算驱动里实际配置的lane-rate和用户手册里定义的方式往往还有换算关系拿D-PHY那套往上套配置出来的速率经常是偏的而且偏得不多恰好让你的屏偶尔能亮偶尔花屏。1.2 RK3588的双通道到底是怎么切画面的RK3588上做高分辨率屏幕单通道带宽经常不够用于是就有了双通道拼接的方案。芯片内部的VOP2显示控制器在像素层级把一帧画面分成左右两半通过两个MIPI DSI控制器DSI0和DSI1同时送出去再由屏幕端的TCON把两路信号拼成一幅完整画面。对外的物理接口每个DSI主机各挂一路C-PHY lane组屏幕两端各接一组最终形成一个双通道MIPI-CPHY的整体链路。这种架构里画面能不能正常显示不仅取决于每一路单独的时序对不对更关键的是两路信号必须严格同步。左右两半画面的分辨率必须一样时序参数必须一样甚至两边的lane数、PHY配置都必须保持对称。只要有一路数据晚半拍或者其中一路的line buffer利用率跟另一路不一致显示端就会出现接缝、错位、半屏条纹这些看起来像是屏坏了的现象。1.3 先区分物理层故障和业务层故障我调试时习惯先把异常现象归类是画面完全锁不住还是画面能出来但内容不对。信号完全锁不住大概率是物理层问题比如PHY速率太接近极限、线材/阻抗、CDR失锁画面能出来但拼接错乱那是数据链路问题主要查双通道的分割逻辑和同步机制如果画面内容正常但颜色偏、亮度不均才是软件格式配置问题。不同类型的异常对应完全不同的排查路径第一件事先归类能省下一大半冤枉路。2. 现象是花屏、闪屏还是错位用一张表反向定位2.1 常见异常现象与根因对照我把实际调试中遇到过的异常现象整理成了一张对照表每次现场出问题先对着表格做一轮初步过滤再决定深挖方向。异常现象常见根因优先排查动作全屏密集花屏/彩色噪点MIPI信号质量差、PHY速率超限、供电抖动先降lane-rate验证明再查PCB走线和电源纹波半屏正常、半屏雪花或条纹双通道拆分配置不对称、某一路PHY失锁对比DSI0和DSI1的DTS配置是否完全一致画面周期性闪烁PLL不稳、dclk抖动、背光PWM干扰查时钟树和PHY PLL配置再看PWM频率左右画面错位/拼接处有竖缝VOP2像素分割与TCON期望不一致核对dual-channel的像素划分逻辑和lane数白屏/黑屏但背光亮init code未执行、reset时序不满足、PHY未使能查reset/上电时序回读panel ID确认通信颜色偏紫/偏绿/暗部细节丢失像素格式匹配错误RGB888/666、YUV核对panel和VOP2的output-format低亮度下水波纹/灰阶滚条背光PWM信号耦合到MIPI链路或PHY驱动强度不当调整PWM频率/相位尝试降低PHY驱动电流2.2 一类特别容易被误判的现象开机logo正常、进系统后异常RK3588Android12平台上我遇到最多的是这一类uboot阶段logo显示完美一旦kernel起来、SurfaceFlinger开始工作画面就开始出问题。这种情况很多人第一反应是硬件没问题是driver的问题于是去翻drm驱动其实不一定。uboot阶段显示链路很简单单图层直接扫出去进入Android后是HWC通过DRM/KMS把多个图层合成然后送给VOP2。如果图层格式和VOP2输出格式不一致或者HWC合成时用了某些硬件加速特性而屏的handle能力跟不上就会在进入桌面后出现花屏或闪烁。排查这类问题时我建议不要只盯着内核日志Android层的dumpsys信息同样重要尤其是SurfaceFlinger的合成路径和图层格式。后面第5章我会具体写命令。2.3 用一个简单的排除法三板斧锁定大方向单靠现象表还不够实践里我习惯在深挖之前先做三个快速试验一是把刷新率临时降下来比如从60Hz降到55Hz甚至50Hz如果异常明显消失说明带宽裕量不够问题大概率在链路速率和信号质量二是把亮度调到0%和100%对比如果异常随亮度变化说明背光PWM串扰参与进来了三是把双通道改成单通道临时只点亮一半屏如果能正常显示半幅画面说明两路信号各自通路都是好的问题一定出在拼接和同步逻辑上。这三个试验成本很低但能快速把问题范围缩小到一个相对明确的区间后续定位会快很多。3. 双通道DTS配置核查data-lanes、lane-rate和时序不是随便填的3.1>
返回列表