我们说的LCD 显示包括并口的LCD,串行的LVDS 接口的LCD,mipi 接口的LCD, 和edp 接口的LCD,甚至包括VGA,和HDMI。
如果其发生问题,可能有以下问题:
1. 背光不亮
一般的LCD 背光系统需要这几个信号,Vbkl,PWM, BL_EN 信号,一般确保这些信号的正确顺序,就可以正常输出。pwm 的输出频率,占空比等。
2. 背光亮但没有显示
没有显示可能有以下几个原因:
2.1 确保正常的上电时序
LCD 的上电时序是确保LCD 正常显示的基本前提,例如LCD 的某个VDD 没有开启,RST pin 一直拉低等,还有可能没有按照LCD spec 中
的上电时序,拉制LCD相关控制信号等。一般地的屏幕,只要确认好正确的LCD 上电时序,就可以正常显示了。
2.2 正确的mipi 屏幕初始化命令
对于mipi 屏幕,好多屏幕都需要在mipi DSI command 模式下,提供mipi
的初始化操作命令,没有这些命令,屏幕可能处于休眠模式,就无法正常显示。对于mipi-dsi 的command,我们给出一些设备树配置的例子:
panel-init-sequence = [
05 44 01 11
15 20 02 36 00
15 00 02 3A 70
05 80 01 29
];
第一个数据,叫做DI(Data identification), 就是数据的传输类型,第二个delay,数据发送后的延时时间,第三个数据长度, 第四位就是数据的开始。 有兴趣的可以参考MIPI DSI 的command 或者DCS command。
2.3 是否获取到正确的EDID
对于EDP 或者HDMI 这类显示设备,它们通常是通过读取显示器内部的EDID来获取的,有很多显示设备,EDID 是通过I2C 来读取,如果I2C读取有问题,EDID 自然就读不到,所以屏幕就无法显示。
linux 下确认EDID 读取到的信息可以查看:
/sys/class/drm/card0-VGA-1/edid
或者直接读取当前各种显示分辨率
cat /sys/class/drm/card0-VGA-1/modes
2.4 分辨率不正确
如果上面的方式都是正确的,那得看下屏幕的分辨是不是正确的,如果设备只的屏幕分辨率太小,或者太大,就导致屏幕无法正常显示。
3. 分辨率不对
移植一款屏幕时,必要要设定屏幕的分辨率,读取EDID的除外。
3.1 如何判断分辨率正确
什么是一个正确的分辨率,如何判断呢? 这里教给大家一个方法,就是你用鼠标,在你的电脑上的四个边界上走一圈,看到的鼠标的表现,就被认为是一个正确的分辨率。如果某个边界上,看不到鼠标,或者移动
好久才能看见鼠标,这个分辨率一定会有问题。
3.2 分辨率的时序参数
分辨率的时序参数,这里不再赘述,之前的文章有详细介绍。请参考与LCD移植相关的概念。
4. 色彩不对
4.1 RGB 的顺序设定
有些屏幕可能因为接受RGB 的排列顺序 和CPU 输出的RGB顺序不一致,导致色彩产生偏差,一个比较好的鉴定办法就是拿一张RGB的图片来判断。
在你LCD 上显示的颜色顺序和当前的显示一致,说明没有RGB的顺序问题,如果不一致,可能就要考虑修改屏幕,或者CPU 端的RGB顺序。
4.2 信号极性
如果pixelclock, Hsync, VSync 极性需要反转,但实际没有,也是导致色彩偏差的一个重要原因。
4.3 线的问题
如果上面都没有问题,建议确认下,是不是线的问题,是不是有几根线断了,或者有什么干扰,还是电路板走线那里有问题。pixelclock 和layout 走线太近了等等。
5. 屏幕闪烁
闪烁的问题很可能是pixelclock 的问题,是它不稳定,还是频率太低了,还是hsync 和vysnc 和屏幕不适配 。