LVDS,LCD调试总结(持续更新)

Posted sky-heaven

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LVDS,LCD调试总结(持续更新)相关的知识,希望对你有一定的参考价值。

转自:https://blog.csdn.net/a617996505/article/details/82386952

1.LVDS接口分类与数据格式
单路6it LVDS

这种接口电路中,采用单路方式传输,每个基色信号采用6位数据,共18位RGB数据,因此,也称18位或18bit LVDS接口。此,也称18位或18bit LVDS接口。

 

双路6bit LVDS

这种接口电路中,采用双路方式传输,每个基色信号采用6位数据,其中奇路数据为18位,偶路数据为18位,共36位RGB数据,因此,也称36位或36bit LVDS接口。

 

单路8bit LVDS

这种接口电路中,采用单路方式传输,每个基色信号采用8位数据,共24位RGB数据,因此,也称24位或24bit LVDS接口。

 

双路8bit LVDS

这种接口电路中,采用双路方式传输,每个基色信号采用8位数据,其中奇路数据为24位,偶路数据为24位,共48位RGB数据,因此,也称48位或48bit LVDS接口

 

      现在市场上基本是8bit和6bit的屏幕,

 

      LVDS接口电路中,将像素的并行数据转换为串行数据的格式主要有两种标准:VESA和JEIDA

      1)VSEA标准格式如下图所示:

      

      

      以上图片是单路的VESA标准信号,对一行数据输入则多2bit。

 

      关于双路的信号格式这个可以举个例子:

     

      以上图片是双路8bit 的VSEA标准信号。

      2)JEIDA标准是由日本电子行业开发协会(JAPANELECTRONIC INDUSTRY DEVELOPMENT ASSOCIATION)制定的标准,其格式如下:

 

    

可以对比参照查看,如果像素为6bit RGB,则每个通道只需要最上面的3对数据线,其中的R9…R4, G9…G4, B9…B4 对应实际的R5…R0, G5…G0, B5…B0;同样,如果像素是 8 bit RGB,则每个通道只需要靠上面的4对数据线,其中的R9…R2, G9…G2, B9…B2 对应实际的R7…R0, G7…G0, B7…B0。

基本上每个屏幕的datesheet上都有相关信号图。

由这些信号图基本上可以判断:       1.单双路;

 2.是多少bit RGB;

       3.数据信号格式;

 

 

查看IMX6Q_LDB Control Register,内有相关设置:

       1.单双路;

 2.是多少bit RGB;

       3.数据信号格式;

 

有设备树的内核可以直接修改设备树来操作寄存器,红色部分即可修改的三个参数:

&ldb {

status = "okay";

dual-mode = <1>; //这里为单路LVDS,双路应设为 split-mode = <1>;

                 lvds-channel@0 {

                 fsl,data-mapping = "spwg"; //这里为数据格式(VESA),还有一种为JEIDA的标准

                 fsl,data-width = <24>; //这里是数据位宽,即8bit RGB

                 status = "okay";

                               display-timings {

                               native-mode = <&timing0>;

                               timing0: hsd100pxn1 {

                               clock-frequency = <65000000>; //像素时钟

                               hactive = <1280>; //横像素点数

                               vactive = <800>; //竖像素点数

                               hback-porch = <10>; //水平后沿

                               hfront-porch = <30>; //水平前沿

                               vback-porch = <2>; //垂直后沿

                               vfront-porch = <4>; //垂直前沿

                               hsync-len = <10>; //行同步脉宽

                               vsync-len = <6>; //垂直同步脉宽

                              };

                 };

};

下面我们分析蓝色部分应该如何填写。

 

2.屏幕参数的相关设置(蓝色部分)
fb_videomode各个参数的意义

各参数的抽象如下图所示:

 

关于fb_videomode各个成员的意义详解:

名称

数据手册中的简称

中文名

意义

备注

(简称或另名称)

name

No

名字

液晶屏名字(可选)

No

refresh

No

刷新频率

刷新频率(内核中很多例子都赋值为60)

No

xres

No

行宽

每行的像素个数

No

yres

No

屏幕高度

屏幕的行数

No

pixclock

No

像素时钟

每个像素时钟周期的长度,单位是皮秒(10的负12次方分之1秒)

No

left_margin

HBP

水平后沿

在每行或每列的象素数据开始输出时要插入的象素时钟周期数

No

right_margin

HFP

水平前沿

在每行或每列的象素结束到LCD 行时钟输出脉冲之间的象素时钟数

No

upper_margin

VBP

垂直后沿

在垂直同步周期之后帧开头时的无效行数

No

lower_margin

VFP

垂直前沿

本帧数据输出结束到下一帧垂直同步周期开始之前的无效行数

No

hsync_len

HPW

行同步脉宽

单位:像素时钟周期

HWH(HSYNC width)

vsync_len

VPW

垂直同步脉宽

单位:显示一行的时间th

HWH(HSYNC width)

sync

No

同步极性设置

可以根据需要设置FB_SYNC_HOR_HIGH_ACT(水平同步高电平有效)和FB_SYNC_VERT_HIGH_ACT(垂直同步高电平有效)

No

vmode

No

No

  在内核中的大多数示例都直接置为FB_VMODE_NONINTERLACED。interlaced的意思是交错[隔行]扫描,电视中使用2:1的交错率, 即每帧分两场,垂直扫描两次,一场扫描奇数行,另一场扫描偶数行。很显然LCD目前不是这种模式。

No

flag

No

No

目前没有看到用法

No

 

由上图可得:

水平总周期 = left_margin + right_margin + hsync_len

垂直总周期 = upper_margin + lower_margin + vsync_len

下面主要以16BPP的TFT屏作为例子。有的LCD会给出参数列表,比如下图,可以很清楚的在红框中找到需要的参数,取“type”典型值即可。但是有的LCD并没有直接给出这样的列表,设置某些参数没有给出,这需要通过时序图来确定。

 

 

下面以天马的3.5寸TFT液晶屏 TM035KDH03为例进行讲解。

参数计算:

 

可以看到LCD时钟是28M,所以pixclock=1000000/28 ,在设备树上是clock-frequency = <28000000>;

行同步脉冲宽度是一个时钟周期,所以,hsync_len=1

场同步脉冲的宽度是一个行周期,所以,vsync_len = 1

 

上图是一帧图像的显示时序图。的上图显示,up_margin = 13-1=12,, yres= 240,

整个场周期为263,所以lower_margin= 263-13-240 = 10

同时看到,列同步信号高电平有效,行同步信号也是高电平有效。

 

上图是一行的时序图。

可以看到,left_margin = 69, xres = 320, right_margin = 408 -320 - 70 = 18

数据在上升沿有效,输出使能是高电平有效。

总计一下上面的参数,得到如下结果:

static struct clcd_panel conn_lcd_panel = {  

.mode = {  

.name = "QVGA TM035KDH03",  

.refresh = 60,  

.xres = 240,  

.yres = 320,  

.pixclock = 35714,  

.left_margin = 69,  

.right_margin = 18,  

.upper_margin = 12,  

.lower_margin = 10,  

.hsync_len = 1,  

.vsync_len = 1,  

.sync = FB_SYNC_HOR_HIGH_ACT|FB_SYNC_VERT_HIGH_ACT,  

.vmode = FB_VMODE_NONINTERLACED,  

},  

}

所以用设备树可以这样写:

              clock-frequency = <28000000>;         //像素时钟

                            hactive = <240>;                              //横像素点数

                            vactive = <320>;                              //竖像素点数

                            hback-porch = <18>;                           //水平后沿

                            hfront-porch = <69>;                           //水平前沿

                            vback-porch = <10>;                           //垂直后沿

                            vfront-porch = <12>;                           //垂直前沿

                            hsync-len = <1>;                              //行同步脉宽

                            vsync-len = <1>;                               //垂直同步脉宽

3.调试过程中的常见问题
    1.背光

       调试屏幕首先要把背光点亮,没有点亮背光屏幕什么都显示不了,根据规格书将背光点亮,可以寻求硬件工程师帮忙

    2.屏幕上星星点点
  在调试的时候,我们会发现屏幕上有莫名其妙的星星点点,一般这种情况下,我们首先要看看VGH和VGL电压是否处于datasheet所描述的范围之 内。如果属于标准范围之内,但星星点点依旧,很有可能就是时序问题。这时候不妨在代码中变更采样的时序(比如上升沿采样改为下降沿采样)。如果无法在代码 中更改,也可以在clk信号线加个100R电阻,也可能解决该问题。

     3.显示抖动

                在确认VPW,VBP,VFP,HPW,HBP,HFP的设置已经符合LCD规格要求后,如果屏幕的显示还在抖动的话,不妨将输出的时钟信号频率降低,有可能解决该问题。                  

               还存在一种现象,LVDS的信号线电压高出规格书一点也会出现。曾经有过LVDS信号电压为3.3V的接到5V导致屏幕显示出现细小电波抖动。

    4.显示花屏

               出现花屏现象,理论上是RGB没有调好导致的。如颜色位数, 颜色顺序导致的。

               检查一下规格书的颜色格式部分, 是否将RGB888格式设置成了666,或者顺序是RBG,BGR之类的都有可能。
————————————————
版权声明:本文为CSDN博主「世黎」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/a617996505/article/details/82386952

以上是关于LVDS,LCD调试总结(持续更新)的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发调试技巧总结(持续更新中)

zabbix报错整理--持续更新

3月4日作业总结 持续更新

NC代码调试 - 持续更新

NC代码调试 - 持续更新

NC代码调试 - 持续更新