转发路径: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之类的都有可能。