LCD 显示问题分析

我们说的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 显示问题分析_第1张图片
在你LCD 上显示的颜色顺序和当前的显示一致,说明没有RGB的顺序问题,如果不一致,可能就要考虑修改屏幕,或者CPU 端的RGB顺序。

4.2 信号极性

如果pixelclock, Hsync, VSync 极性需要反转,但实际没有,也是导致色彩偏差的一个重要原因。

4.3 线的问题

如果上面都没有问题,建议确认下,是不是线的问题,是不是有几根线断了,或者有什么干扰,还是电路板走线那里有问题。pixelclock 和layout 走线太近了等等。

5. 屏幕闪烁


闪烁的问题很可能是pixelclock 的问题,是它不稳定,还是频率太低了,还是hsync 和vysnc 和屏幕不适配 。

你可能感兴趣的:(嵌入式移植专栏,驱动开发,armlinux,驱动开发,linux,LCD)