未觉池塘春草梦,阶前梧叶已秋声 ——朱熹《劝学》
前面介绍了LED以及platform的驱动移植,然后做了对LCD的移植,感觉挺好玩的,于是就参考宋宝华老师的《Linux设备驱动开发详解》学习一下LCD的一些基本原理。本篇即是鄙人对LCD设备驱动的初步了解。
一、LCD的硬件原理
LCD(液晶显示器)根据驱动方式分为静态驱动、简单矩阵驱动以及主动矩阵驱动三种,简单矩阵型又分为扭转向列型(TN)和超扭转式向列型(STN),主动矩阵型以薄膜式晶体管型(TFT)为主流。LCD屏不但需要LCD驱动器,还要相应的LCD控制器。 LCD驱动器以COF/COG的形式与LCD玻璃基板制作在一起,LCD控制器由外部电路实现,MCU内部直接集成LCD控制器,通过LCD控制器方便地控制STN和TFT屏。
LCD的工作原理:LCD显示屏都是由不同部分组成的分层结构。位于最后面的一层是由荧光物质组成的可以发射光线的背光层。背光层发出的光线在穿过第一层偏振过滤层之后进入包含成千上万水晶液滴的液晶层。液晶层中的水晶液滴都被包含在细小的单元格结构中,一个或多个单元格构成屏幕上的一个像素。当LCD中的电极产生电场时,液晶分子就会产生扭曲,从而将穿越其中的光线进行有规则的折射,然后经过第二层过滤层的过滤在屏幕上显示出来。液晶的显示效果由加在液晶上的有效电压决定,彩色(灰度)的实现有两种方式:PWM(脉宽调制)和FRC(帧率控制),LCD为数字方式,只有位置固定的电流通路,所以只能通过电路矩阵逐行扫描,不能逐点,即一行上的所有点同时工作,要显示图像,肯定有的点不亮有的点亮,即每个点上的电压是不同的。
彩色液晶显示器颜色的形成:彩色LCD面板中,每一个像素都由三个液晶单元格构成,其中每一个单元格前都有红绿蓝三种颜色的过滤片,光线经过过滤片的处理照射到每个像素中不同色彩的液晶单元格之上,利用三原色原理组合不同的色彩。不同比例的红绿蓝可得不同颜色。
位图数据显示在LCD上:LCD显示是用动态扫描的方式实现,每次显示一整行,在一帧里每行一次扫描一遍,LCD驱动器就是一种控制行和列上的输出电压电路,驱动器的输出与图像和LCD的工作方式相关,驱动器需要接受从图像转换来的控制信号,从而改变行列的输出电压,控制器就是将工作方式及图像位图转换成控制信号的电路。控制器从MCU(微控制单元,单片机)接受位图数据,然后把它转换成控制信号提供给驱动器。
LCD屏显示图像不但需要驱动器,还需要控制器,LCD驱动器以COF/COG的形式与LCD玻璃基板制作在一起,而LCD控制器则由外部电路实现,许多MCU内部直接集成了LCD控制器,通过LCD控制器可以方便地控制STN和TFT屏。下面是TFT屏的典型时序图:
VCLK:像素时钟信号,用于锁存图像数据的像素时钟
HSYNC:行同步信号,每发出一个脉冲都表明新的一行图像资料开始发送。
VSYNC:帧同步信号,每发出一个脉冲,都意味着新的一屏图像数据开始发送。
VDEN:数据有效标志信号
VD:图像的数据信号
在帧同步以及行同步的头尾都必须留有回扫时间,这样的时序安排起源于CRT显示器电子枪偏转所需要的时间,但后来成为实际上的工业标准,因此TFT屏也包含了回扫时间。
下面这个图是LCD控制器中需要设置的TFT屏的参数:
其中的上边界和下边界即为帧切换的回扫时间,左边界和右边界即为行切换的回扫时间,水平同步是行同步本身需要的时间,垂直同步是帧同步本身需要的时间,xres是屏幕的水平分辨率,yres是屏幕的垂直分辨率。
这些参数在我做LCD移植的时候修改过的,可以回顾一下,这些参数也是根据自己的开发板的datasheet自己设置的。
下一篇介绍frambutter,即帧缓冲。
关于LCD的分析都是基于 http://blog.csdn.net/lwj103862095/article/details/18191285。