1. 花屏现象总览:认识TouchGFX花屏的常见表现
做嵌入式UI开发,最让人头疼的是什么?我个人觉得,就是屏幕花屏。
你辛辛苦苦把界面搭好了,动画调顺了,一上电,屏幕上一片乱七八糟的条纹、噪点,或者图像错位、疯狂闪烁。那一刻,真的想砸东西。
我做了七八年TouchGFX开发,踩过的花屏坑少说也有几十个。今天咱们先把「敌人」认清楚——花屏到底长什么样?只有知道它长啥样,你才能对症下药。
1.1 条纹花屏——最常见的「老朋友」
条纹花屏,说白了就是屏幕上出现横向或纵向的线条。有时候是细密的彩色条纹,有时候是几根粗黑线或白线。
典型表现:
- 水平方向出现彩色或黑白条纹,像老电视没信号
- 条纹位置固定,或者随画面滚动
- 触摸操作时条纹可能消失或变化
我在项目中遇到过最典型的一次:客户反馈屏幕开机后全是彩色竖条纹,但过几秒又正常了。查了两天,最后发现是LTDC时钟配置里,HBP(水平后肩)参数写错了。你想想看,一个参数不对,整个画面就崩了。
1.2 噪点花屏——画面「长麻子」了
噪点花屏,就是屏幕上出现大量随机分布的小点,像雪花一样。有时候是彩色噪点,有时候是黑白噪点。
典型表现:
- 画面整体模糊,覆盖一层「雪花」
- 噪点密度可能均匀,也可能局部密集
- 静态画面和动态画面都有噪点
为什么会这样?我遇到过的情况是:SDRAM时钟信号质量不好,导致帧缓冲区数据读取时出现位错误。说白了,就是内存读到的东西本身就是错的,显示出来当然全是噪点。
| 噪点类型 | 常见原因 | 排查方向 |
|---|---|---|
| 均匀分布彩色噪点 | SDRAM时钟不稳定 | 检查SDRAM时钟走线、阻抗匹配 |
| 局部密集噪点 | DMA2D传输错误 | 检查DMA2D配置、FIFO溢出 |
| 黑白噪点 | LTDC数据线虚焊 | 检查RGB数据线连接 |
1.3 错位花屏——画面「劈叉」了
错位花屏,就是图像显示的位置不对。比如上半部分显示正常,下半部分跑到左边去了;或者整个画面偏移了几个像素。
典型表现:
- 画面被切割成几块,位置错乱
- 图像重复显示,像「鬼影」
- 触摸坐标和显示内容对不上
嗯,这里要注意。错位花屏最容易跟条纹花屏搞混。我刚开始做TouchGFX时也分不清。后来总结了一个规律:条纹是「线」的问题,错位是「面」的问题。
错位花屏,我印象最深的一次是:客户把屏幕分辨率从480x272改到800x480,只改了LTDC配置,没改TouchGFX的FrameBuffer分配。结果画面直接劈成两半。你说气不气人?
1.4 闪烁花屏——屏幕「抽风」了
闪烁花屏,就是屏幕亮度或内容周期性变化。有时候是整个屏幕闪,有时候是局部区域闪。
典型表现:
- 屏幕整体明暗交替,像低频PWM调光
- 局部区域(如按钮、文本)闪烁
- 刷新率不稳定,画面撕裂
闪烁花屏的病因比较杂。我个人习惯先分两类:硬件闪烁和软件闪烁。
- 硬件闪烁:背光PWM频率太低、LCD电源纹波大、LTDC时钟抖动
- 软件闪烁:双缓冲切换不同步、VSync信号没处理好、重绘逻辑有bug
我记得有一次,客户说屏幕每隔几秒就闪一下。我拿示波器一测,发现背光PWM频率只有60Hz。人眼对60Hz的闪烁其实挺敏感的,尤其是余光区域。把频率调到200Hz以上,问题就解决了。
1.5 花屏分类全景图
说了这么多,咱们用一张图把四种花屏的关系理清楚。这样你以后遇到问题,可以快速定位属于哪一类。
1.6 建立问题分类意识
好了,四种花屏都认识了。但光认识还不够,你得建立一种「分类意识」。
什么意思呢?就是遇到花屏,别急着改代码。先问自己三个问题:
- 这是什么类型的花屏?——条纹、噪点、错位、闪烁,先归类
- 什么时候出现的?——上电就有?操作后出现?特定界面才出现?
- 有没有规律?——固定位置?随机出现?跟温度有关?
这三个问题问完,排查范围至少缩小一半。我自己的习惯是,在项目里建一个「花屏问题日志」,每次遇到新问题,先拍照、记录现象、归类。时间长了,你看到花屏就能猜个八九不离十。