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

posted @ 2016-03-27 19:03  yuxi_o  阅读(1963)  评论(0编辑  收藏  举报