ARTICLE DETAIL

资讯详情

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

瑞芯微RK3326 MIPI DSI休眠唤醒黑屏排查实战

瑞芯微RK3326 MIPI DSI休眠唤醒黑屏排查实战 做瑞芯微平台的驱动工程师八成都在屏的问题上熬过夜。rk3326本身是入门级低功耗平台经常被拿去做带屏的智能硬件、商业显示和IoT网关类产品MIPI DSI屏休眠唤醒后黑屏、但背光还亮着可以说是这个平台的高发问题。这个标题在开发者社区里被反复提起我自己也在这上面废过好几个通宵。先给没接触过屏驱动的读者一个定位这不是系统起不来的死机问题而是系统活了、屏幕没活的链路恢复问题。现象看着简单实际牵扯到DRM显示框架、MIPI DSI控制器、面板IC初始化时序、电源和时钟恢复顺序每一环都有可能掉链子。而且rk3326这颗SoC本身没有太多冗余资源DDR频率切换、bus空闲降频这些省电策略都会和显示时钟打架所以排查起来比普通Linux PC上的黑屏问题复杂得多。这篇文章我打算围绕黑屏但有背光这个现象从链路拆解、休眠唤醒机制、常见根因、排查工具、修复模板到验证方法把整条路的坑都趟一遍。适合正在调rk3326平台、或者手里有其他RK平台MIPI屏问题的驱动工程师参考也适合做硬件但需要和软件联动排查的同学读一读了解软件侧到底在忙什么。1. 现象拆解黑屏加背光这六个字把故障范围缩小了一半1.1 为什么背光亮是个好消息很多人在群里提问的时候只说休眠唤醒黑屏但我拿到问题第一反应是问背光亮不亮不是客套而是这个信息直接决定排查方向能砍掉多少工作量。背光亮说明从AP到背光LED驱动器的控制链路是通的。具体拆开看背光点亮至少需要三样东西齐备背光供电通常是boost升压出来的12V或者串联LED电压、背光使能信号BL_EN一般是一个GPIO、PWM/模拟调光信号可能是PWM波形也可能是I2C配置。这三个条件在休眠唤醒后都正常说明系统电源域恢复、GPIO状态恢复、PWM控制器恢复这三个模块大概率没问题。反过来想如果背光不亮那问题可能只是出在背光控制这一条独立链路上往往和MIPI显示数据链路毫无关系。背光亮着但屏幕黑就逼着我们把注意力集中到像素数据这条通路上VOP有没有输出、DSI有没有发数据、屏IC有没有正确把数据显示出来。这一下就把搜索范围从整机电源管理缩小到了显示数据通路恢复。实际排查中我还发现一个规律背光随系统休眠灭掉、唤醒后能正常亮起说明kernel的suspend/resume流程本身没有卡死系统确实是完整地走了休眠再唤醒的流程。这排除了最麻烦的一种情况——系统根本没睡下去或者唤醒时崩了。能走到背光恢复这一步证明整个软件栈是活的我们面对的只是一个局部功能缺失问题。1.2 黑屏到底黑在哪一环把问题具体化黑屏的黑可以有三种完全不同的含义对应完全不同的根因。第一种是纯粹的没信号黑屏屏模组的TFT玻璃上压根没有数据写入所有像素保持初始状态。这种情况VOP可能没输出、DSI可能没发数据或者面板IC收到了数据但power时序不对导致source driver没工作。表现是屏幕完全黑亮度和关机时一模一样。第二种是显示了黑色内容的黑屏就是数据链路其实是通的VOP在正常刷新但要么显存内容是全黑要么panel进入了某种异常状态后把所有像素写成了黑色。这种黑屏看似一样但排查难度完全不同——你不需要修链路你需要查的是唤醒后显示内容为什么没恢复。第三种最隐蔽一闪黑或半秒花屏后永久黑屏。唤醒瞬间能看到屏幕闪了一下或者出现雪花条纹然后彻底黑屏。这说明唤醒后有短暂的数据传输但很快因为DSI error、PHY lock丢失或者面板IC异常复位而中断。这种问题往往和时序竞争、延时不足强相关。区分这三种黑屏最简单粗暴的方法是在唤醒过程中接上示波器看MIPI DSI的clock lane和数据lane有没有波形同时观察屏的电源、reset、背光使能这几根关键信号的跳变顺序。稍后在排查链路章节我会详细说怎么测。1.3 先把链路画出来再动手做驱动排查最忌讳拿到板子就开始改代码。先在心里把数据通路一条条列出来按顺序验证。rk3326的MIPI DSI显示链路从里到外大概是这个顺序AP内部的VOP模块也就是Video Output Processor负责把显存里的framebuffer转换成并行的像素数据流。它输出的是RGB888、DC时钟、行场同步信号这一层出问题会导致完全没有有效数据源。紧接着是MIPI DSI Controller在rk3326上用的是DesignWare的DW-MIPI-DSI IP核。这一层负责把并行像素数据按MIPI DSI协议打包成包结构加上包头、ECC、CRC再通过D-PHY物理层以差分信号发出去。这一层出问题表现是没有MIPI包甚至没有clock。D-PHY物理层负责把逻辑电平转换成差分高速信号同时产生DDR clock。这一层如果PLL没锁住clock lane就出不来波形屏收不到参考时钟不可能工作。屏模组端的TFT面板和驱动IC典型的有ST7701S、ILI9881C、HX8399这些。面板驱动IC需要按规格书要求在上电后收到正确的初始化序列然后从sleep mode切到normal mode开始接收像素数据并驱动液晶翻转。最后是背光模组它只是照明不参与图像显示但它的点亮时序会影响观感。如果屏幕数据还没就绪就把背光打开用户看到的就是黑屏背光亮这个经典现象。把这五层拆开就明白休眠唤醒黑屏有背光的问题本质是什么了前三层恢复异常或者第四层没有正确回到工作状态而第五层表现得一切正常。排查的目标就是找出前三层和后一层之间到底谁没跟上节奏。2. 休眠唤醒时RK显示链路做了什么2.1 DRM框架下的suspend/resume链rk3326在Linux内核中的显示驱动基于DRM/KMS框架。系统进入休眠时drm_device的suspend回调会按照从显示输出到显示源的顺序逐一关闭各个组件。走的大致顺序是先停止功能层也就是plane然后关闭CRTC再关encoder最后让panel的disable和unprepare回调执行。对应到代码里就是drm_helper_force_disable_all、drm_atomic_helper_suspend这些接口被逐级调用。这个过程直观理解就像关生产线先停掉往传送带上放货的机器VOP出数据再停传送带MIPI DSI发包最后把生产线末端负责包装的工人也撤下来panel进入休眠模式。但这里有个关键点让panel进sleep mode这个动作不是必然发生的它完全取决于drm_panel驱动怎么实现unprepare回调。有些面板驱动在unprepare里会把reset拉低然后掉电有些只是简单关掉时钟有些甚至什么都不做。唤醒时是反向操作panel的prepare先执行然后是enable再往后是encoder恢复、CRTC恢复、plane恢复。看起来逻辑很清楚但问题恰恰容易出在“唤醒时的init sequence该由谁负责、该完整执行到什么程度”这个边界模糊的地带。在RK的很多BSP kernel里drm_panel的driver是厂商模组厂商写好的有些模组驱动图省事把初始化序列只放在probe阶段执行一次唤醒时只做部分恢复。结果就是系统休眠后复位了panel IC唤醒时没有完整重发初始化序列屏自然就黑着。2.2 面板侧到底经历了什么从面板IC的角度看休眠唤醒的过程和MCU的复位很类似。多数MIPI DSI接口的面板驱动IC比如我在项目中常用的ST7701S内部都有一个寄存器状态机。上电或者reset pin拉低再拉高之后IC会进入初始化状态此时它要求主机通过DSI接口发送一串初始化命令包括设置电压、gamma、分辨率、扫描方向、接口格式等。命令发完后再发0x11退出sleep mode延时120毫秒左右接着才能发0x29开启显示。如果在系统休眠时硬件上把面板的电源切掉了或者reset被拉低过那么唤醒后IC会回到上电初始状态寄存器全部变成默认值。这时必须完整地重走一遍初始化流程尤其是那些和显示相关但不写在标准MIPI命令里的厂商私有命令。很多黑屏问题的根因就在这里唤醒后的初始化流程被简化了或者省略了私有命令导致IC的source driver输出异常表现就是“不亮”。还有一种情况系统休眠时电源没断reset也没动但MIPI signal已经停了一整夜。面板IC在长时间收不到MIPI时钟之后内置的clock monitor可能会判断信号异常自动进入某种保护状态。唤醒时如果不做reset只发命令IC未必能正常恢复。这也是为什么很多LCD模组规格书里明确写了“System enter sleep in: 0x10”就是要求主机在休眠时主动通知面板进入低功耗状态。2.3 时钟和供电在休眠时如何变化RK平台休眠时电源管理控制器会按照device tree里的配置把大部分模块的时钟关闭、电源域断开或降频。显示链路相关的pclk、dclk会被关闭VOP会和DSI Controller一起停止工作。这本来是为了省电但关键问题是唤醒时这些时钟的恢复时序是否正确。RK平台的BSP里时钟框架会根据设备树中定义的clocks属性来找回时钟树。如果device tree里MIPI DSI节点配置的时钟有误或者时钟恢复时DCLK的频率计算和休眠前不一致VOP输出的像素时钟就可能和面板要求的时序不一致显示自然不正常。这种问题不是单纯的黑屏往往伴随画面撕裂、偏色、滚动条纹等。另一个更隐蔽的坑是DDR频率切换。rk3326在休眠和唤醒过程中DDR频率可能会被压到最低再恢复。而VOP的带宽直接从DDR取数据如果唤醒后DDR频率恢复不够快VOP取帧会超时表现出来就是黑屏或者画面停滞。这类问题在dmesg里通常能看到vop的underrun报错。这些信息非常重要它们能帮你直接定位是对外输出问题还是内部取数问题。3. 几个最容易踩的坑初始化序列重发、Reset时序与时钟恢复3.1 坑一唤醒后panel还停在sleep状态这个坑我觉得是所有MIPI休眠黑屏问题里出场率最高的。有相当一部分模组驱动在唤醒路径里只是简单地把显示打开没有完整重发初始化序列。我印象很深的一个case用的是一块ST7701S方案的高亮屏。休眠唤醒后屏幕黑但背光正常dmesg里任何报错都没有。刚开始我怀疑是VOP没恢复但检查状态节点发现CRTC和plane都已经active。后来在prepare回调里加打印才发现唤醒时执行的初始化流程只发了一个0x11和一个0x29那些设置gamma和电压的私有命令根本没执行。原因是这颗IC在掉电复位后默认的gamma寄存器和我们模组要求的gamma参数不一样导致画面输出异常但异常得又不彻底正好是全黑。修复方式很简单把完整的初始化序列重新在resume里执行一遍。但这里有个细节要注意初始化序列的重发时机。必须在reset拉高且延时结束之后DSI host已经准备好传输命令的状态下才能发。如果顺序乱了照样不工作。我习惯把初始化序列封装成一个数组在一个专门函数里执行这样无论是probe还是resume都调用同一个入口可以避免两套逻辑不一致的问题。3.2 坑二Reset时序和模组规格书打架另一个让我记忆深刻的问题是reset引脚的时序。MIPI屏模组的规格书里通常都写着reset的时序要求比较典型的要求是上电稳定后RESX拉低至少10ms然后拉高拉高后等待120ms才可以发命令。听起来很简单但实际做起来问题很多。我遇到过一块屏规格书上写的是“RESX low pulse width 10ms typical, from RESX high to first command 120ms”。但BSP里给到的初始化代码reset高电平之后只延时了20ms就开始发初始化命令。屏幕在常温下试是好的但产品放到空调房里跑老化测试唤醒就会偶发性黑屏。原因就是低温下面板IC启动变慢时序余量不够。这种问题如果不用示波器测光靠看log根本发现不了。另外还有一个容易搞反的坑reset脚的极性。有些模组的reset脚是低有效有些高有效device tree里GPIO_ACTIVE_LOW如果标错了系统理解为拉高复位实际上就是在正常运行期间把屏复位了那画面不可能正常。这点虽然基础但改dts的时候稍微不注意就错了。正确做法是拿到模组后先仔细读规格书时序部分把上电时序图用笔抄下来标注每个边沿的延时需求。然后对照dts和初始化代码确认reset、power、backlight这三个关键信号的状态切换顺序是对的。dmesg里没有报错不代表时序正确这点一定要记牢。3.3 坑三唤醒后DCLK或DDR频率恢复乱套第三类坑集中在时钟域。RK平台休眠唤醒时会涉及到多个时钟域的开关和频率切换。如果唤醒时VOP的DCLK没有按预期恢复或者DSI Controller的bit clock没锁住最直接的现象就是屏黑。有个通用经验如果屏幕在唤醒后出现极短暂的白屏或花屏再变黑大概率是D-PHY的HS clock在唤醒初始阶段没有稳定输出或者VOP输出的像素clock时序不对。如果屏幕一直是纯黑没有任何闪烁则需要怀疑是数据完全没过来多半是DSI controller或者panel自身的初始化问题。我遇到过一个比较折腾的case是DDR频率切换和显示恢复的竞态。板子从休眠唤醒时会先把DDR切到最高频率但VOP在这个切换还没完成时就开始取数据导致framebuffer读出来全是错的。表现是唤醒后屏幕是黑的偶尔会闪一下噪点。查了一整天才发现是驱动里resume流程没有等DDR频率切换完成就打开了CRTC。解决的方案是调整时钟框架里的prepare_enable顺序并增加频率稳定标志位的等待机制。这类问题用普通的调试方法比较难发现因为没有明显的error log。最好的方式是打开内核的clock framework调试开关动态观察唤醒时的时钟树状态变化确认VOP的dclk、DSI的bitclk、DDR的时钟在时间轴上的先后顺序是否合理。4. 完整排查链路从日志到波形一步一步走4.1 第一步先看dmesg和DRM状态节点遇到休眠唤醒黑屏我不建议马上改代码而是先花十分钟收集现场信息。第一步是抓dmesg重点过滤drm、dsi、mipi、panel、vop这几个关键词。常见的开机唤醒log里如果DSI controller在唤醒时初始化失败通常会有类似“failed to write command FIFO”或者“D-PHY PLL lock timeout”的报错。如果panel驱动在resume时出错通常也有i2c传输失败或者“failed to send mipi commands”之类的信息。再往下就是看DRM状态节点确认软件层面觉得显示有没有起来。在RK平台一般可以这么做cat /sys/kernel/debug/dri/0/state重点看CRTC、plane、connector各自的active状态。正常唤醒后CRTC和plane应该是activeconnector状态应该是connected。如果这些都正常说明DRM框架认为显示已经恢复了问题在更底层。如果CRTC没有active那说明是原子状态恢复出了问题得从drm_atomic_helper_resume的链路查。另外推荐看看/sys/kernel/debug/dri/0/下的其他节点例如cat /sys/kernel/debug/dri/0/summary这个节点在RK的drm驱动里会打印VOP当前的时序参数、是否开启、时钟频率等。通过这里能确认VOP输出的分辨率、刷新率是否和休眠前一致。如果这里显示异常问题基本就在VOP恢复链路。4.2 第二步直接操作寄存器做隔离看日志只能定位大概方向要精确定位还是得上寄存器操作。rk3326的寄存器地址我在调试时会用devmem2或者瑞芯微的io工具直接读这两个工具原理一样就是通过mmap访问物理地址。以rk3326 MIPI DSI controller为例它的寄存器基地址通常配置在0xFF150000这个范围内。D-PHY寄存器则根据dts配置可能挂在0xFF150000附近或者单独的PHY节点地址。具体偏移可以参考TRM手册但排查黑屏时我一般重点看几类寄存器DSI controller的power状态、DPI input使能位、D-PHY的PLL lock状态位。实际操作方式大致是devmem 0xFF150000 32 devmem 0xFF150004 32每次唤醒后先读这些寄存器和正常开机状态下的值对比看差异。比如PHY的lock状态位如果唤醒后是0说明D-PHY没有锁住那就得去查PHY的供电和参考时钟。如果PHY lock是1但VOP和DSI之间没有握手成功那要看DPI input和DPI output的状态寄存器。这一招能很快把问题从“整个系统层面的黑屏”压缩到“某一个模块的某一位寄存器异常”。但操作寄存器需要对照TRM手册做之前建议先把对应模块的寄存器章节读熟不然等于瞎试。4.3 第三步示波器锁定时序真相软件调试到一定程度就会遇到瓶颈——驱动看起来一切正常寄存器配置也和正常开机一致但屏就是不亮。这时候必须上示波器别再靠猜了。测量MIPI DSI信号建议优先测clock lane。用示波器差分探头夹在时钟线对上设置触发电平在差分电压的中点然后跑一次唤醒流程。如果唤醒瞬间能看到一组连续的高速时钟脉冲出现说明D-PHY的clock lane在唤醒时工作正常。如果完全没有时钟或者时钟出现了一下然后消失那就是D-PHY或者DSI controller的问题。数据lane也值得测特别是唤醒后第一个命令包。通常panel的初始化命令是在低功耗模式下传输的也就是LP模式这时候信号幅度接近0到1.2V的逻辑电平速率不高。如果看到LP模式下有命令传输但随后进入HS模式后数据很快断了那多半是panel IC侧阻抗匹配或者供电问题。还有一个必须测的点是reset脚和panel供电脚的时序顺序。用示波器同时测panel的VDD、reset、power enable、backlight enable这几根线对比规格书的上电时序图。很多黑屏问题就是在这一对比之下现出原形的。比如backlight enable比panel数据就绪早了200ms用户就会看到一瞬间的黑屏加亮背光感官上就成了“黑屏有背光”。4.4 用一串脚本把整个调试过程固定下来调试过程其实很机械每次都需要跑一遍休眠唤醒、抓一次log、看一眼状态。我习惯把这些步骤写成一个脚本一键执行避免漏步骤。一个最简单的循环测试脚本大概是这样的#!/bin/bash for i in $(seq 1 100); do echo round $i /tmp/wake_test.log rtcwake -m mem -s 10 sleep 3 cat /sys/kernel/debug/dri/0/summary /tmp/wake_test.log dmesg | grep -E mipi|dsi|panel|vop /tmp/wake_test.log done跑完100轮之后把log拿下来对比看看是否有偶发性的报错出现。很多休眠唤醒问题都是概率性发生手工测十次可能一次都不出跑脚本压一晚上就能复现。这一招在量产前特别有用能提前暴露时序余量不足的问题。5. 从根因出发的修复方案和验证5.1 按根因分类的处理路径排查到最后根因基本可以归成几类修复路径也各有侧重。我做了一个对照表方便大家按症状快速定位根因类型典型现象修复路径Panel IC初始化序列未完整重发唤醒后纯黑无闪烁无报错在panel driver的resume/prepare里重发完整初始化序列Reset/power时序不满足规格书偶发黑屏低温老化时加重严格按规格书修改dts中gpio延时调整reset时序D-PHY PLL未锁定唤醒后完全没有MIPI时钟检查PHY参考时钟、供电调整时钟树恢复顺序VOP取数据超时黑屏偶发花屏dmesg有underrun等待DDR频率稳定后再使能VOP或调整带宽策略Backlight先于显示就绪唤醒瞬间看到背光亮但屏黑在display enable complete之后再加背光延时这张表基本覆盖了我见过的绝大多数场景。拿到问题之后先对号入座能省去很多无用功。5.2 一套可靠的修复模板不管根因是哪一类最终修复落地的形式基本都是改dts配置或者改panel驱动。为了让大家少走弯路我给一套在大多数RK平台上都可以套用的panel驱动恢复流程模板。以drm_panel驱动为例核心是把初始化序列封装成可重入的函数在prepare阶段统一调用static const struct panel_init_cmd st7701s_init_cmds[] { {0xFF, 5, {0x77, 0x01, 0x00, 0x00, 0x10}}, {0xC0, 2, {0x3B, 0x00}}, /* ... 其他厂商私有初始化命令 ... */ {0x11, 0, {}}, {0x29, 0, {}}, }; static int st7701s_prepare(struct drm_panel *panel) { struct st7701s *ctx panel_to_st7701s(panel); /* 1. 确保供电稳定 */ regulator_enable(ctx-vcc); usleep_range(10000, 20000); /* 2. Reset时序按规格书严格来 */ gpiod_set_value_cansleep(ctx-reset_gpio, 1); usleep_range(10000, 20000); gpiod_set_value_cansleep(ctx-reset_gpio, 0); usleep_range(10000, 20000); gpiod_set_value_cansleep(ctx-reset_gpio, 1); usleep_range(120000, 130000); /* 3. 完整重发初始化序列 */ panel_cmd_send_seq(ctx-dsi, st7701s_init_cmds, ARRAY_SIZE(st7701s_init_cmds)); return 0; }这套模板有几个关键点reset拉低的时长、拉高后到发命令的延时必须严格按照模组规格书来不能拍脑袋。规格书写的120ms就是120ms不能用20ms代替。初始化序列从probe到resume走同一个函数保证每次执行的命令序列完全一致。0x11退出sleep mode之后再延时120ms再发0x29开启显示。这个延时是MIPI DSI标准里明确要求的少了会有概率性黑屏。注意rk3326的panel驱动不一定都叫st7701s但思路完全通用。关键是不管哪家模组都把初始化序列集中管理不要散落在probe、resume、enable好多个地方。5.3 回归验证不能只测一两次修复完成后验证阶段一定要做压力测试。休眠唤醒这类问题最大的特点就是概率性你连续唤醒十次都正常不代表第100次就一定正常。尤其是时序余量不够的那些case往往要在温度、电压的临界条件下才会暴露。我的做法是分三步验证。第一步常温下跑100轮休眠唤醒循环每次唤醒后检查屏是否正常亮起同时用程序检查panel的状态寄存器确认IC确实进入了normal mode。第二步在低温箱里跑同样的循环测试低温能让IC启动变慢时序问题更容易暴露。第三步用示波器抓唤醒瞬间的关键时序和规格书逐一比对确认余量充足。这一步看起来繁琐但真到了量产阶段就会发现提前跑通这些测试能省下大量售后返修的成本。屏的问题不像软件bug能远程修复模组不良一旦流入市场基本都是整机召回。6. 遇到相似屏异常时的快速判断思路6.1 花屏、闪屏、亮半屏分别暗示什么很多时候群里问问题的现象并不是纯黑屏有些是花屏、闪屏、亮半屏或竖条纹这些现象对应的方向各不相同。多积累一些判断思路能帮你快速缩小范围。花屏或者雪花噪点基本可以断定是数据在传输过程中出错或者数据源本身错误。优先查VOP输出的DCLK频率是否正确DDR带宽是否足够以及MIPI DSI数据lane的时序是否满足屏的要求。闪屏则多半是panel内部电源或者参考电压不稳定常见原因是初始化序列里设置的display voltage不当或者panel的VCOM补偿没有和模组匹配好。亮半屏或者屏幕上半部分正常下半部分黑这时候要怀疑source driver的扫描方向配置有问题或者COF绑定有异常。竖条纹则通常是source driver的列翻转或者极性配置错误也可能和LCD的gate信号异常有关。这些现象和休眠唤醒黑屏有个共性它们都可能是初始化序列不完整、时序不满足导致的。所以基本排查方法还是一样的先看dmesg再看寄存器再上示波器。6.2 长线FPC和retimer场景下的补充排查热词里出现mipi retimer这里多说一句。有些产品结构上避不开长FPC或者转接板MIPI信号经过长走线后衰减严重结果就是屏幕在常温下正常温度一高或者一低就花屏、分裂、黑屏。这种问题单靠软件是修不好的需要硬件介入。但这里有个很重要的判断方法如果问题在休眠唤醒后出现、正常开机一直正常那就不是信号完整性的问题因为如果信号完整性不达标开机第一次点亮就会有问题不会等到唤醒才爆发。休眠唤醒黑屏更多是状态恢复问题优先从软件时序和状态机入手。只有当你确认了正常开机完全稳定、唤醒时序也正确但唤醒后依然概率性黑屏时才考虑是不是模组端和主板端的信号质量在唤醒瞬间存在margin不足这时考虑加retimer或者调整PCB走线才是合理的。我见过一个案例PCB走线从主控到屏连接器只走了60mm按理说很短了但FPC转接了两段中间还过了一个板对板连接器。低温下唤醒就是偶发黑屏查了三个星期软件最后示波器测到HS signal眼图严重偏小加了一颗retimer彻底解决。这种case属于极端情况但也提醒我们软件调到怀疑人生的时候回过头量一下波形。6.3 产品落地阶段的工序建议最后聊点偏产品工程的经验。休眠唤醒黑屏这个问题最怕在研发阶段偶尔出现一次大家改改代码觉得好了结果一到产测阶段大量暴露。所以我在带项目的时候会把休眠唤醒循环测试直接写进产测流程。产测阶段可以用一条非常简单的自动化用例设备进入产测模式后自动执行100次休眠唤醒每次唤醒后让屏幕显示不同的纯色画面同时通过摄像头或者光传感器检测屏幕亮度变化。只要有一次唤醒后屏幕亮度没达到阈值就判为不良品自动拦截。这套方案投入成本不高但能拦下大量时序余量不足的模组比出货后售后返修划算得多。另外如果产品有电池供电的场景还需要覆盖低电量下的休眠唤醒测试。因为低电量时系统电压波动更大DDR频率可能被策略压得更低这会让本来余量就不足的问题暴露得更频繁。这块我吃过亏提醒大家可以提前安排上。做屏驱动这些年越来越觉得这类问题的核心不在于某个具体的寄存器配置而在于对整个链路的理解深度。黑屏有背光看起来是软件问题实际上往往是软硬件时序配合的问题。把MIPI的协议流程、面板IC的上电时序、RK平台的低功耗策略都搞透排查起来就不会乱修复之后也不会轻易复发。
返回列表