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>;

[email protected] {

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

原文地址:https://www.cnblogs.com/sky-heaven/p/12315491.html

时间: 2024-08-01 04:07:50

LVDS,LCD调试总结(持续更新)【转】的相关文章

C# net core程序调试错误集(持续更新)

目录 C#程序调试错误集 1.依赖注入错误An unhandled exception has occurred while executing the request. 1.1 出错现象 1.1.1原因是net core在调用ValueController的时候,发现UnitOfWork没有进行依赖注入. 1.2 出错现象 1.2.1 原因是net core在调用UnitOfWork的时候,发现IPBoxContext没有进行依赖注入. 1.3 解决方法 C#程序调试错误集 1.依赖注入错误A

自己总结的 iOS ,Mac 开源项目以及库,知识点------持续更新

自己在 git  上看到一个非常好的总结的东西,但是呢, fork  了几次,就是 fork  不到我的 git 上,干脆复制进去,但是,也是认真去每一个每一个去认真看了,并且也是补充了一些,感觉非常棒,所以好东西要分享,为啥用 CN 博客,有个好处,可以随时修改,可以持续更新,不用每次都要再发表,感觉这样棒棒的 我们 自己总结的iOS.mac开源项目及库,持续更新.... github排名 https://github.com/trending,github搜索:https://github.

android开发开源宝贝——持续更新。。。

2016年11月11日更新 http://www.apkbus.com/forum-417-1.html http://p.codekk.com/detail/Android/hejunlin2013/LivePlayback www.codekk.com https://github.com/Trinea/android-open-project Android 开源项目分类汇总 我们的微信公众号:codekk.二维码如下: 专注于 Android 开源分享.源码解析.框架设计.Android

二进制炸弹实验(持续更新)

一.前期准备 首先,既然这是CSAPP这本书上的实验,我们就得想办法找到书上的实验素材,不能随便自己编炸弹.这里课本上给了一个卡内基梅隆大学的edu网址csapp.cs.cmu.edu,然而,防火墙阻挡了我们的脚步.这里给大家两种解决思路: (一)多费点时间精力,CSDN博客园上有少量博主曾在博客里共享过CSAPP的实验资源,例如这一个,亲测可下载: (二)直接选择科学上网工具,搭梯子即可. 因为二进制炸弹实验网上有很多破解教程,所以写这个炸弹素材的人就很坏,我发现他隔几个月就会发布一版更新炸弹

神技!微信小程序(应用号)抢先入门体验(附最新案例-豆瓣电影)持续更新

微信小程序 Demo(豆瓣电影) 由于时间的关系,没有办法写一个完整的说明,后续配合一些视频资料,请持续关注 官方文档:https://mp.weixin.qq.com/debug/wxadoc/dev/ Demo 预览 演示视频(流量预警 2.64MB) GitHub Repo 地址 仓库地址:https://github.com/zce/weapp-demo 使用步骤 将仓库克隆到本地: bash $ git clone https://github.com/zce/weapp-demo.g

干货!IT小伙伴们实用的网站及工具大集合!持续更新!

干货!IT小伙伴们实用的网站及工具大集合!持续更新! Other  崔庆才  4个月前 (12-24)  6720℃  7评论 1.Git 还在担心自己辛辛苦苦写的代码被误删了吗?还在担心自己改错了代码不能挽回吗?还在苦恼于多人开发合作找不到一个好的工具吗?那么用Git就对了,Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理.有了它,代码托管不是问题,版本控制不再苦恼,多人开发变得简单易行. 链接:http://git-scm.com/ 2.GitHub 学

W5500问题集锦(持续更新中)

在"WIZnet杯"以太网技术竞赛中,有非常多參赛者在使用中对W5500有各种各样的疑问,对于这款WIZnet新推出的以太网芯片,使用中大家是不是也一样存在下面问题呢?来看一看: 1. W5500不支持自己主动极性变换,有点失望-- 答: 事实上,仅仅要对方支持极性变换就能够实现,如今的设备不支持极性变换的非常少的. 你要是碰到个别老设备连不上,再换交叉线也不迟.基本上2000年以后的设备都没问题的啦~ 原帖来自:9MCU 2. W5500+STM32F0无法通信 问题描写叙述1:我如

android点滴之触控相关知识点(持续更新)

1.检查当前屏幕有多少个触摸点. 使用MotionEvent的getPointerCount()方法. 2.多点触控下,触摸的状态的检测 MotionEvent类中方法getActionMasked(),这个方法可以检查触摸的状态: 当只有一个触摸点时(只用一根手指触摸屏幕),按下是0,起来是1,移动是2: 当触摸点多于1时(多根手指触摸屏幕),按下是5,起来是6,移动是2: 3.多点触控下,每个触点的分类处理 多点触摸时 假如是第i个点 int x = event.getX(i); int y

普元EOS开发积累第一篇(常见错误解决方法) 持续更新

普元启动服务失败的解决方法 当多个人同时使用一个数据库的时候,启动普元控制台会一直停留在rcall,然后显示一个超时的警告,那样就需要修改一下普元的一个定时器配置项. 安装目录下\Primeton\Platform\apps_config\default\config 中的一个user-config.xml文件 将下列代码中高亮字段中的true改为false即可  <module name="Schedule">          <group name="

【持续更新】JavaScript常见面试题整理

[重点提前说]这篇博客里的问题涉及到了JS中常见的的基础知识点,也是面试中常见的一些问题,建议初入职场的园友Mark收藏,本文会持续更新~ 1. 引入JS的三种方式 1.在HTML标签中直接使用,直接内嵌JS(但是不提倡使用): >>>不符合W3C关于内容和行为分离的要求: 2.在HTML页面中使用<scrip> </script>标签包裹JS代码: >>>script标签可以放到页面的各种位置: 3.引入外部的JS文件使用<script&