LCD屏参数及应用举例
1. LCD参数及原理
R G B 信号
PCLK(像素时钟),LCLK(HSYNC,线时钟,水平同步时钟),FCLK(VSYNC,帧时钟,垂直同步时钟)
7寸屏一般由两种工作模式DE和时钟模式,一般都采用时钟模式。4.3寸以下(包含3.5寸屏)与7寸屏不同,需要通过SPI接口初始化。
时序(800*480):帧同步用FCLK(VSYNC),一帧数据即一个画面;产生此信号就表示开始显示新的一帧图像。
行同步用LCLK(HSYNC),一帧数据包含480个行同步信号;产生此信号就表示开始显示新的一行。信号为持续一段时间的脉冲(HSPW)。
像素时钟用于采集1组RGB数据,一行数据有像素时钟800个(至少)。
一个画面是一帧数据,包含一个帧信号,480个行信号,480*800个像素信号。
实际应用中,屏数据手册都给出左裕度、右裕度、水平同步(水平信号),上裕度、下裕度、垂直同步(垂直信号),根据实际情况配置相关控制器。
内存中开辟Framebuf,通过DMA将数据导入显示屏上(自动完成)。
帧频率(刷新频率)的方法就是所有的像素点跟边沿(边框,hbpd 之类),同步脉冲的时间相加, 结果就是显示完整一帧所需时间, 其倒数即是帧频率.
显示一行所需要的时间就是:HSPW + HBP + HOZVAL + HFP。
显示一帧所需要的时间就是:VSPW+VBP+LINE+VFP 个行时间,最终的计算公式:T = (VSPW+VBP+LINE+VFP) * (HSPW + HBP + HOZVAL + HFP)
像素时钟就是 RGB LCD 的时钟信号,显示一帧图像所需要的时钟数就是:
= (VSPW+VBP+LINE+VFP) * (HSPW + HBP + HOZVAL + HFP)
= (3 + 20 + 600 + 12) * (20 + 140 + 1024 + 160)
= 635 * 1344
= 853440。
显示一帧图像需要 853440 个时钟数,那么显示 60 帧就是:853440 * 60 = 51206400≈51.2M。
2. MCU设置相应参数举例
3. CPU是否支持屏,需确认频率。
如9261不支持7寸屏,9G10支持(9G10频率提高,同时LCDC的频率计算减半,使屏频率可在cpu分频范围内)。
4. LCD驱动
Linux中使用framebuffer虚拟显示设备。fb是一种机制,将系统中所有跟显示有关的硬件以及软件集合起来,虚拟出一个fb设备。当我们编写好 LCD 驱动以后会生成一个名为/dev/fbX(X=0~n)的设备,应用程序通过访问/dev/fbX 这个设备就可以访问 LCD。
Linux 内核将所有的 Framebuffer 抽象为一个叫做 fb_info 的结构体,fb_info 结构体包含了Framebuffer设备的完整属性和操作集合,因此每一个Framebuffer设备都必须有一个 fb_info。换言之就是,LCD 的驱动就是构建 fb_info,并且向系统注册 fb_info的过程。
设备数compatible属性匹配后,运行probe函数。probe 函数的主要工作内容为:
1、申请 fb_info。
2、初始化 fb_info 结构体中的各个成员变量。
3、初始化 eLCDIF 控制器。
4、使用 register_framebuffer 函数向 Linux 内核注册初始化好的 fb_info。
int register_framebuffer(struct fb_info *fb_info)
LCD时序设置
&lcdif { display0: display { bits-per-pixel = <16>; bus-width = <24>; display-timings { native-mode = <&timing0>; timing0: timing0 { clock-frequency = <33000000>; /*像素时钟,Hz*/ hactive = <800>; /*X轴像素个数*/ vactive = <480>; /*Y轴像素个数*/ hfront-porch = <40>; /* hfp参数 水平前裕度*/ hback-porch = <88>; /* hbp参数 水平后裕度*/ hsync-len = <48>; /* hspw参数 水平信号HSYNC宽度*/ vback-porch = <32>; /* vbp参数 垂直后裕度*/ vfront-porch = <13>; /* vfp参数 垂直前裕度*/ vsync-len = <3>; /* vspw参数 垂直信号VSYNC宽度*/ hsync-active = <0>; vsync-active = <0>; de-active = <1>; pixelclk-active = <0>; }; }; }; };
可参考:
http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=29099635&id=3907093
http://blog.csdn.net/hs6662668/article/details/40412321