尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

MIPI DSI显示调试实战:RK3588点屏与ST7701S故障排查指南

MIPI DSI显示调试实战:RK3588点屏与ST7701S故障排查指南 写这篇东西的起因是我前阵子帮客户调试一块RK3588方案的板子屏幕是1080p的MIPI DSI屏驱动IC是ST7701S。板子拿来的时候系统能起来但屏幕死活不亮最后查出来是MIPI DSI的初始化序列里有一个porch参数配错了。这种问题放在并行RGB接口时代很难想象但到了MIPI DSI时代参数稍微差一个像素时钟周期显示就会出各种稀奇古怪的症状。这篇文章就把我对MIPI DSI协议的理解、实战中踩过的坑、以及一套从零开始点屏的排查思路整理出来希望能给正在跟DSI较劲的同行一点参考。1. MIPI DSI在显示链路里的角色1.1 为什么移动设备几乎都在用DSI在MIPI DSI出现之前手机屏幕接口是五花八门的并行RGB接口一根屏幕排线动辄几十根信号线。那时候主板和屏幕之间靠的是同步信号、像素时钟、RGB数据线一堆线硬怼信号线多、功耗高、EMI也难控制而且频率一高并行信号之间的时序偏差就非常头疼。MIPI DSIDisplay Serial Interface是MIPI联盟定义的显示串行接口标准。它最核心的思路就是把几十根并行线换成少数几对差分串行线通过高频率的串行传输来搬运像素数据。比如一个1080p的屏用并行RGB接口可能要30多根线但用DSI的话4对数据线加1对时钟线就能搞定排线宽度直接缩小一大截而且功耗和电磁干扰都更好控制。这个变革意义很大。手机要做得更薄、屏占比更高、电池更大内部空间寸土寸金接口占用的面积和排线宽度是实实在在的成本。DSI把显示接口从“宽而慢”变成了“窄而快”整个行业就跟着它走了。现在的手机、平板、车载中控、工业HMI、智能门锁、甚至一些带屏幕的IoT设备几乎清一色的MIPI DSI。1.2 DSI的分层结构从物理到应用的完整链路MIPI DSI不是一个简单的“串行接口”四个字能概括的它本身是一个分层的协议栈从底往上大致分为物理层、协议层和应用层。物理层用到的规范主要是D-PHY。D-PHY定义了两对信号一对时钟和一到四对数据线信号是差分形式的工作模式分为高速模式HS和低功耗模式LP。高速模式下跑的是实际的像素数据时钟和数据都走差分信号速率可以达到每lane 1Gbps甚至更高低功耗模式下则用于传输命令和握手信号特点是电压摆幅低、功耗小但速率也低得多。这个“双模式”设计是D-PHY很有意思的地方平时待机用LP模式省电真正要刷屏了切到HS模式狂飙。协议层做的事情简单说就是把图像数据和命令数据封装成DSI包格式加上包头、校验、包尾再通过物理层发出去。命令和像素数据走的是不同的包类型比如DCS Short Write用于发命令Long Write用于发初始化参数或者大块数据Pixel Stream包则专门用来传像素。应用层就是跟显示驱动IC打交道的那一层了。屏幕的初始化、亮度调节、颜色格式配置、DSC参数的传递都是在应用层通过DCS命令完成的。这一层也是我们平时调试最多的部分因为不同的屏幕模组初始化序列差异巨大而这些代码基本都是从屏厂给的规格书或者初始化代码里搬过来的。1.3 DSI和DPI、CSI的关系别混了很多人第一次接触MIPI会给一串缩写搞晕DSI、CSI、DPI、DBI都是干什么的DSI是显示串行接口输出的是串行像素流或者命令用来点亮屏幕。CSI是摄像头串行接口方向相反是传感器把图像数据传回主控和DSI共用物理层的D-PHY规范但协议层完全不一样。DPI是并行RGB接口的显示规范属于老一代接口一般叫RGB接口。DBI是并行或串行的命令接口LCD时代很常见现在低端小屏上还能见到。简单记忆DSI和CSI都是串行、差分、高速的DPI和DBI都是并行的、老派的。很多SoC的规格书上会写“MIPI DSI x4”“MIPI CSI x2”指的就是支持几路DSI显示或者几路CSI输入。调试的时候别把DSI和CSI的引脚复用搞混这在某些引脚功能复用比较复杂的平台上是真实发生过的事故。2. 关键参数先算明白2.1 Lane数量和数据率的匹配做DSI调试第一个绕不开的问题就是用几根lane每根lane跑多快答案取决于分辨率和刷新率。一帧画面里每一个像素都有固定的位数比如RGB888就是24bit每像素。D-PHY的每一个lane在一个时钟周期内可以传1bit所以总数据率 lane数 × 每lane速率。而这个总数据率必须大于等于像素时钟 × 每像素位数。这就引出一个公式需要的每lane数据率 像素时钟 × 每像素位数 ÷ lane数。像素时钟不是简单的分辨率乘积而是要算上消隐区porch。比如1080p60Hz像素有效区是1920×1080但实际的行消隐和场消隐加起来整个周期可能是2200×1125这样所以实际像素时钟大概是148.5MHz。如果按RGB888来算4 lane的情况下每lane需要大约148.5M × 24 ÷ 4 891Mbps。这个数在D-PHY v1.2的1.5Gbps上限之内所以1080p60Hz用4 lane是绰绰有余的。但如果上到4K30Hz像素时钟就奔着300MHz去了4 lane的话每lane要1.8Gbps已经超出D-PHY v1.2的能力这时候要么用8 laneDSI规范支持到8 lane的配置要么上DSC压缩或者改用D-PHY v2.0规格。2.2 时钟怎么算一个1080p示例我把整个计算过程展开一下方便刚接触的人照着算。以一个典型的1080p60Hz屏幕为例水平有效1920像素水平消隐HFPHBPHsync一般取280像素左右总共2200垂直有效1080行垂直消隐VFPVBPVsync一般取45行左右总共1125像素时钟 2200 × 1125 × 60 ≈ 148.5MHz然后看DSI输出的数据率BPBits per Pixel如果是24bit那么每根lane的速率 148.5M × 24 ÷ 4 891MbpsD-PHY在HS模式下数据率就是时钟频率的两倍DDR所以这891Mbps对应的DSI时钟频率是445.5MHz很多平台在设备树里配DSI时钟的时候给的就是这个“DSI时钟频率”而不是像素时钟。如果配错了要么花屏要么屏幕直接不工作。所以拿到一个新的屏先把这个数算出来再去设备树里核对一遍能省掉不少排错时间。2.3 DSC4K屏的救星说到4K屏就不得不提DSCDisplay Stream Compression显示流压缩。DSC是VESA制定的标准专门针对显示画面做视觉无损压缩压缩率一般在3:1左右。MIPI DSI规范里也支持传递DSC参数和压缩流所以现在很多4K分辨率的高刷屏其实都在用DSC。为什么需要DSC因为4K60Hz RGB888的原始数据流需要大约12.5Gbps的总带宽就算用4 lane每lane也要3.1Gbps远超D-PHY的能力。如果不愿意升级到C-PHY或者D-PHY v2.0最现实的方案就是压缩。RK3588的DSI控制器是支持DSC的设备树里会有一个dsc相关的节点需要把pic_width、pic_height、slice_width、slice_height这些参数配好而且要跟屏幕驱动IC端DSC decoder的配置完全一致。这里面最容易翻车的是slice参数不同屏厂的标准不太一样有的用8×8有的用4×8配错了屏幕会直接花到没法看而且是那种很规则的花纹一眼就能看出来是DSC配置不对。2.4 色深、porch、sync模式的影响除了分辨率和lane数还有几个参数对最终显示效果影响很大。色深Color Depth是一个。DST支持16bit、18bit、24bit、30bit等几种颜色格式常见的面板大多是24bitRGB888。有的屏幕标称支持16.7M色实际驱动IC支持的是18bit那初始化代码里会配成RGB666或RGB666 with dithering。这个参数直接决定DSI包里的pixel格式和每像素位数配错了屏幕会偏色或者出现奇怪的纹理。porch参数就是上文提到的消隐区包括HFP、HBP、HSYNC、VFP、VBP、VSYNC。这些参数的作用是让屏幕有时间从一行切到下一行、从一帧切到下一帧。屏厂给的timing参数必须逐项核对不能想当然填个“差不多”的值。之前有个项目就是因为VBP比规格书要求的少了4行结果屏幕上部有一条淡淡的闪烁带看起来像水波纹排查了好几天。sync模式方面DSI有同步脉冲模式和同步事件模式两种对应到面板时序就是需要hsync/vsync信号还是只需要event信号。多数驱动IC两种都支持但有些屏只在某一种模式下工作稳定所以初始化序列里记得核对这部分配置。3. 从硬件到驱动的实操记录3.1 40p排线硬件连接容易忽略的细节很多人在协议和驱动上花了大量时间最后发现是硬件连接出了问题。我见过不少“死黑屏”的板子查到最后是40pin MIPI排线的地线没有铺好导致的。40p排线是现在很常见的一种MIPI DSI接口物理定义通常包含了4对数据线、1对时钟线、电源、背光控制、复位、I2C等信号。别小看这根排线它比普通的FFC排线对阻抗和屏蔽要求高得多。MIPI差分线的单端阻抗一般要求50Ω差分阻抗100Ω如果排线设计得不规范或者连接器接触不良高速信号会反射、衰减结果就是一上电就花屏或闪屏。关于排线的几个实操建议选排线的时候尽量选带屏蔽的尤其是长距离走线超过15cm的时候。MIPI的差分对要等长对间还要注意包地避免相互串扰。插拔排线之前确认电源已经断开带电插拔不仅容易损坏接口还可能直接把屏幕驱动IC打坏。连接器锁扣一定要扣到位很多“接触不良”其实是锁扣没压到底。这类问题和代码无关但往往最坑因为它的表现看起来和驱动配置错误完全一样。排查手段也很原始换一根排线试试换个连接器试试用示波器看波形。3.2 ST7701S这类驱动IC的初始化配置ST7701S是目前市面上很常见的显示驱动IC支持480×854到1080×2000左右的分辨率MIPI DSI接口支持RGB888和RGB666。很多中低端手机屏、工控屏都用它。调试这类屏幕本质就是把屏厂给的初始化代码按驱动IC的寄存器规则填进去但这里面有两个坑。第一个坑是初始化序列的时序。ST7701S要求在初始化过程中很多命令之间必须要有足够的delay特别是0xFF和后续设置命令之间。如果delay太短寄存器写入会失败屏幕可能表现为颜色异常或者完全无显示。所以拿到初始化代码后先看每一行命令后面有没有延时延时时间是什么单位然后在驱动里照搬。第二个坑是TFT Panel的Gamma和电源设置。ST7701S内部有专门的gamma寄存器用来调整灰阶电压曲线屏厂给的代码里都配好了。如果自己改驱动的时候误动了这些寄存器显示会马上出现偏色、灰阶断层甚至负像。我建议初始化代码能不动就不动即使要调亮度也优先用一个单独的寄存器去做而不是去改gamma相关的段。我习惯的做法是拿到一份新的初始化代码后先原封不动烧进去确认屏幕能正常亮起来再做任何“优化”。如果屏幕正常就先跑一遍基本功能验证比如纯白、纯黑、纯红、纯绿、纯蓝确认颜色通道没接反。然后再考虑改背光、改睡眠唤醒流程这些应用层的功能。3.3 以RK3588为例的DSI驱动配置要点瑞芯微的RK3588是这几年做带屏产品很火的平台双HDMI、双DP、多路MIPI DSI显示能力相当强。MIPI DSI这块RK3588的设备树配置有几个值得特别注意的地方。首先是route配置。RK3588里一个DSI控制器要对应一个route节点如果没有正确地route到对应的显示管道屏幕可能不会亮或者系统启动时检测不到显示器。route节点的status要设置为“okay”并且和DSI节点、显示管道的连接关系要对上。其次是DSI节点的panel子节点需要配置compatible、reg、backlight、reset-gpios、enable-gpios这些基本信息。其中reset-gpios是用来控制面板复位的上电的时候要有一个由高到低再由低到高的脉冲这个可以在设备树里通过reset-delay-ms等参数控制但效果不如在驱动代码里显式处理来得稳。我习惯在做点屏调试的时候先把reset引脚手动拉一把排除复位时序的影响。然后是panel的display-timings这个节点里要配clock-frequency、hactive、hfp、hbp、hsync-len、vactive、vfp、vbp、vsync-len。这些参数直接对应屏的规格书不能抄错。RK3588的dts里这种字段很长但别看花了眼逐个对照规格书填就行。RK3588还涉及DSC配置如果你用的是支持DSC的屏需要在dsc节点里配置enable、dsc_version、pic_width、pic_height、slice_width、slice_height这些。很多RK3588的开发板上已经有了DSC屏的参考配置如果找不到对应型号用同分辨率同类屏的配置先跑通再调整是效率最高的路径。3.4 点屏调试的标准流程点屏这件事方法很重要。我总结了一套自己惯用的流程从拿到屏到点亮再到调优按部就班能省不少时间。第一步是确认硬件链路。上电之前用万用表量一下屏的供电电压有没有到位背光电压、逻辑电压、IO电压分别是多少检查有没有短路。排线插好后量一下屏端的MIPI信号点是否有波形确认信号确实过来了。这一步虽然基础但能排除掉相当一部分“板级问题”。第二步是确认系统识别到面板。内核起来之后看log里有没有“panel”相关的输出。RK3588的平台会在drm驱动加载时打印panel的compatible和timing信息如果看不到这些信息说明设备树没有匹配上优先查设备树的compatible字符串是否跟屏模组驱动一致。第三步是点屏命令的验证。如果系统能正常初始化面板但屏幕不亮或显示异常这时候需要用示波器抓MIPI信号确认初始化命令有没有发出去。如果MIPI波形上有正常的LP和HS序列那问题大概率在屏或者数据处理上如果波形上什么都没有那就是主控没发出命令往驱动方向查。第四步是确认图像输出。屏幕亮了但花屏优先检查lane数量和lane映射是否正确如果颜色不对检查数据通道顺序和色深配置如果图像整体有偏移或者闪烁检查timing参数。这一步能通过反复调整参数快速定位是驱动问题还是配置问题。这套流程走下来绝大多数DSI问题都能定位到具体环节。我的经验是不要跳步尤其不要在一开始就怀疑“屏坏了”否则很容易被表象带偏浪费时间。4. 常见问题与排查心得4.1 花屏的几种典型原因花屏是DSI调试中遇到最多的现象但原因可能是多方面的。我这里按概率排序列几个典型场景。最常遇到的是lane数量配置不匹配。主控配置了4 lane但实际屏只有2 lane或者反过来都会导致花屏。这种花屏的特征是画面“撕裂”感很强部分区域是全乱的甚至整屏都是噪声。排查方法很简单确认屏的规格书里写的是几lane再跟驱动配置核对。MIPI控制器通常有lane_count寄存器可以读取当前实际配置值来确认。其次是乱序问题。DSI的lane是有序号的如果PCB走线交叉了导致data0接到了控制器的data2上那么就需要在驱动里做lane swap映射。很多SoC的DSI控制器支持这种映射比如RK3588的dts里就有data-lanes属性可以指定lane顺序和映射关系。如果映射不对画面会显示成规则的花纹或者颜色分离。还有一个容易忽略的是时序参数中的hactive和vactive。如果这两个值比实际有效区域小画面上会多出黑边如果比实际区域大屏幕会显示不全。这两种情况严格来说不算“花”但很多人会误以为是花屏然后去调别的参数越调越乱。4.2 白屏/黑屏时序和复位的问题白屏通常意味着背光亮了但像素部分没有正常驱动。这种情况下先不急着怀疑MIPI信号而是检查LCD的电源信号和复位引脚。复位引脚在LCD模块里至关重要。一般屏幕在初始化之前复位脚需要拉低一段时间再拉高这个过程叫做power on sequence。如果复位时间不够或复位没拉低屏幕的状态机进不了正常模式就会一直白屏。排查方法是检查驱动里power on的时序是否符合规格书特别是reset和power之间的延时。规格书里一般会写tRES等时间参数照着把延时配够。黑屏相对复杂可能是背光没亮也可能是像素没驱动起来或者两者都异常。先确认背光驱动芯片有没有输出电压再确认面板的供电电压正常然后再看MIPI链路。黑屏还有一种情况是系统根本没初始化面板比如route配置里没有正确把DSI管道连接起来这样面板就一直处于未使能状态不会执行初始化命令。4.3 高分辨率下的闪屏与信号完整性屏幕能显示但过一会儿闪一下或者局部有闪烁这在高分辨率下很常见。根本原因是信号完整性不足或者电源纹波太大。视频信号虽然跟电源没直接关系但LCD内部的TCON和column driver需要稳定的电压如果VDD等电压受背光调光的噪声干扰就会表现为微小的亮度波动。排查方法是在背光驱动的负载变化较大时用示波器观察面板电源地上的纹波如果纹波超过规格书限制需要增加滤波电容。还有一个容易被忽略的信号完整性问题MIPI差分对的VIA和走线过孔。如果PCB设计不规范via会引入阻抗不连续高速信号反射会让眼图变差。反映在显示上就是某些图案下出现噪点尤其是在低频图案边缘颜色会跳动。如果板子已经定型只能通过降低DSI速率缓解或者调整驱动里的预加重设置。另外一个很实际的点很多屏幕模组对MIPI信号的上升时间和下降时间有要求如果主控侧的驱动能力过强或者过弱都会让波形变形。遇到闪屏可以试试调整DSI PHY的驱动强度寄存器这个参数有些平台叫drive strength有些叫tx term调节一下可能有意想不到的效果。4.4 通用排查清单为了方便现场排查我整理了一个简化版的DSI问题排查表按现象、原因、排查手段三列展开仅供参考。现象可能原因排查手段黑屏背光、电源、reset时序量背光电压、量VDD、查reset时序白屏面板没有初始化检查初始化命令是否发出、复位时序花屏lane配置不对、时序错误核对lane_count和timing参数偏色色彩格式配置不对检查RGB888/RGB666配置闪屏电源干扰、信号完整性差观察电源纹波、调整驱动强度图像偏移porc参数错误对照规格书核对HFP/HBP上下闪烁带VBP不对调整VBP参数这个表是我做项目时候自己贴注释用的不代表所有的情况但覆盖了80%以上的问题。遇到问题先对照着排查比瞎猜效率高得多。5. 一点个人经验最后说几个我在实际调试过程中总结的小经验不按什么体系来就是碎片化的干货。第一DSI协议的调试工具很重要。有条件的话买一个支持MIPI协议分析的逻辑分析仪能直接解码DSI包的内容看初始化序列有没有发出去、发的对不对这会省掉大量用示波器数波形的时间。如果没有硬件工具内核日志里开启DRM和MIPI相关的debug打印也能帮忙确认状态机走到了哪一步。第二“dsi studio”一个用于分析和调试MIPI显示命令的工具这类软件层面的调试工具在小团队中也很有价值。它可以直接生成DCS命令脚本、验证初始化序列甚至在PC上模拟面板的响应。对于没有系统级驱动开发经验的人先用这类工具跑通初始化代码再移植到内核驱动里会容易很多。第三拿到屏的第一件事是读规格书的“Power On Sequence”和“Command Sequence”两个段落这两段决定了屏幕能不能点亮。时序参数、复位脉冲宽度、每步间的延时全部必须严格按规格书来。就算你觉得某些延时可以缩短也先按规格书跑等确认稳定后再尝试优化。第四40p排线和连接器是薄弱环节批量生产的时候尤其要重视。我做过一个项目开发阶段样机没问题一到量产就出现比例不低的屏不亮最后查出来是排线的镀金层不合格导致接触电阻偏大。量产选料时排线的材质、连接器的品牌、锁扣的可靠性这些都要写进选型标准。MIPI DSI这个协议看着不复杂但真正较真起来细节非常多。希望这篇文章能帮你在点屏的路上少走一些弯路。
返回列表