FramBuffer参数的确定
作者:小辛
1.、LCD工作的硬件需求:
要使一块LCD正常的显示文字或图像,不仅需要LCD 驱动器,而且还需要相应的LCD控制器。在通常情况下,生产厂商把LCD驱动器会以COF/COG的形式与 LCD玻璃基板制作在一起,而LCD控制器则是由外部的电路来实现,现在很多的MCU内部都集成了LCD控制器,如S3C2410/2440等。通过LCD控制器就可以产生LCD驱动器所需要的控制信号来控制STN/TFT屏了。
2、S3C2440 内部 LCD 控制器结构图
我们根据数据手册来描述一下这个集成在S3C2440内部的LCD控制器:
a:LCD控制器由REGBANK、LCDCDMA、TIMEGEN、VIDPRCS寄存器组成;
b:REGBANK 由17个可编程的寄存器组和一块256*16的调色板内存组成,它们用来配置LCD控制器的;
c:LCDCDMA是一个专用的DMA,它能自动地把在侦内存中的视频数据传送到LCD 驱动器,通过使用这个DMA通道,视频数据在不需要CPU的干预的情况下显示在LCD屏上
d:VIDPRCS接收来自LCDCDMA的数据,将数据转换为合适的数据格式,比如说4/8位单扫,4位双扫显示模式,然后通过数据端口VD[23:0]传送视频数据到LCD驱动器;
e:TIMEGEN 由可编程的逻辑组成,他生成LCD驱动器需要的控制信号,比如VSYNC、HSYNC、VCLK和LEND等等,而这些控制信号又与REGBANK寄存器组中的LCDCON1/2/3/4/5的配置密切相关,通过不同的配置,TIMEGEN就能产生这些信号的不同形态,从而支持不同的LCD驱动器(即不同的STN/TFT屏)。
3、常见 TFT屏工作时序分析
(1)LCD提供的外部接口信号:
VSYNC/VFRAME/STV:垂直同步信号(TFT)/帧同步信号(STN)/SEC TFT 信号;
HSYNC/VLINE/CPV:水平同步信号(TFT)/行同步脉冲信号(STN)/SEC TFT 信号;
VCLK/LCD_HCLK:象素时钟信号(TFT/STN)/SEC TFT 信号;
VD[23:0]:LCD 像素数据输出端口(TFT/STN/SEC TFT);
VDEN/VM/TP:数据使能信号(TFT)/LCD 驱动交流偏置信号(STN)/SEC TFT 信号;
LEND/STH:行结束信号(TFT)/SEC TFT 信号;
LCD_LPCOE:SEC TFT OE 信号;
LCD_LPCREV:SEC TFT REV 信号;
LCD_LPCREVB:SEC TFT REVB 信号。
(2)LCD各个参数的含义
A:显示指针从矩形左上角的第一行第一个点开始,一个点一个点的在 LCD 上显示,在
上面的时序图上用时间线表示就为 VCLK,我们称之为像素时钟信号;
B:当显示指针一直显示到矩形的右边就结束这一行,那么这一行的动作在上面的时序
图中就称之为 1 Line;
C:接下来显示指针又回到矩形的左边从第二行开始显示,注意,显示指针在从第一行
的右边回到第二行的左边是需要一定的时间的,我们称之为行切换;
D:如此类推,显示指针就这样一行一行的显示至矩形的右下角才把一副图显示完成。
因此,这一行一行的显示在时间线上看,就是时序图上的 HSYNC;
E:然而,LCD 的显示并不是对一副图像快速的显示一下,为了持续和稳定的在 LCD 上
显示,就需要切换到另一幅图上(另一幅图可以和上一副图一样或者不一样,目的只是
为了将图像持续的显示在 LCD 上)。那么这一副一副的图像就称之为帧,在时序图上就
表示为 1 Frame,因此从时序图上可以看出 1 Line 只是 1 Frame 中的一行;
F:同样的,在帧与帧切换之间也是需要一定的时间的,我们称之为帧切换,那么 LCD
整个显示的过程在时间线上看,就可表示为时序图上的 VSYNC。
(3)时序图上各时钟延时参数的含义
VBPD(vertical back porch):表示在一帧图像开始时,垂直同步信号以后的无效的行
数,对应驱动中的 upper_margin;
VFPD(vertical front porch):表示在一帧图像结束后,垂直同步信号以前的无效的
行数,对应驱动中的 lower_margin;
VSPW(vertical sync pulse width):表示垂直同步脉冲的宽度,用行数计算,对应驱
动中的 vsync_len;
HBPD(horizontal back porch):表示从水平同步信号开始到一行的有效数据开始之间
的 VCLK 的个数,对应驱动中的 left_margin;
HFPD(horizontal front porth):表示一行的有效数据结束到下一个水平同步信号开
始之间的 VCLK 的个数,对应驱动中的 right_margin;
HSPW(horizontal sync pulse width):表示水平同步信号的宽度,用 VCLK 计算,对应驱动中的 hsync_len;
(4)Linux驱动中需要配置的参数
Width //屏幕宽度
Height 屏幕高度
Pixclock //像素时钟
Xres //水平可见的有效像素
Yres //垂直可见的有效像素
Bpp //色位模式
left_margin //行切换,从同步到绘图之间的延迟
right_margin //行切换,从绘图到同步之间的延迟
hsync_len //水平同步的长度
upper_margin //帧切换,从同步到绘图之间的延迟
lower_margin //帧切换,从绘图到同步之间的延迟
vsync_len //垂直同步的长度
4、实际TFT屏的时序图
(1)LTS350Q1时序图
(2)参数为
Width = 240;
Height = 320;
Pixclock = 166667; /* HCLK 60 MHz, divisor 10 */
计算:1/(60/10 * 10^6) * 10^12 = 166667
Xres = 240; //水平可见的有效像素
Yres = 320;
Bpp = 16;
left_margin = 6;
right_margin = 2;
hsync_len = 3;
upper_margin = 1;//帧切换,从同步到绘图之间的延迟
lower_margin = 2; //帧切换,从绘图到同步之间的延迟
vsync_len = 1; //垂直同步的长度
此文档是个人观点,可能有错误….