IMX6ULL裸机开发——LCD显示

一、LCD硬件原理

1、LCD硬件工作原理简介

我们把LCD的显示比作一个电子枪向像素点发送RGB数据,以前的CRT显示器就是这样的原理,LCD虽然没有了电子枪,但是该显示过程是类似的。

  • 电子枪在像素的背后,一边移动一边发出各种颜色的光,电子枪从左往右移动,到右边缘的时候跳到下一行的行首,如此往复,遍可以将要显示的数据显示在LCD屏幕上。
  • 电子枪打出的颜色由RGB三组信号线决定。
  • 电子枪移动到LCD屏幕右边缘时会关闭,当收到HSYNC信号时电子枪会跳到下一行的位置。
  • 电子枪在发送完成最后一行的数据后会关闭,当收到VSYNC信号时电子枪会跳到原点的位置。

2、RGB接口的LCD硬件连接

  • 像素时钟信号(DCLK):用于同步LCD上的DE,VS,HS,RGB信号线。
  • RGB信号线(R[0:7],G[0:7],B[0:7]):每组信号线都有8根线,三组信号线共同组成24根线来控制颜色数据。由此可知,每一个像素点就是24bit,这种像素格式称为RGB888,如果在加入8bit的Alpha通道,那么一个像素点就是32bit,这种像素格式称为ARGB888,这种格式需要占用4个字节的内存。
  • RGB数据使能信号(DE):RGB接口的LCD有两种驱动模式,分别是DE模式和HV模式,在HV模式下,需要用到HS和VS来控制刷新,不如对于分辨率为1024600的LCD,LCD控制器发出HS信号后,就会发出1024个DCLK,在每个DCLK上传输像素数据,当发出600个HS信号后,就会发出一个VS信号。
    在DE模式下,需要用到DE来控制刷新,在1024
    600像素的LCD上,LCD控制器发出一个DE信号后,就要发出1024个DCLK,在每个DCLK上传输数据,在发出600个DE信号后,刷新完一帧数据,又会从第一行开始扫描。
  • 水平同步信号(HS或者HSYNC):此信号告知开始新一行的扫描。
  • 垂直同步信号(VS或者VSYNC):此信号告知开始新一帧的扫描。
  • LCD背光控制:可以用GPIO控制,也可以使用PWM,使用PWM可以调节亮度。

3、LCD关键特性

LCD时间参数:

IMX6ULL裸机开发——LCD显示_第1张图片
RGB LCD屏幕时序:
IMX6ULL裸机开发——LCD显示_第2张图片

  • HBP(也叫thb):当产生HSYNC信号后到开始新一行数据的扫描,这中间插入一段延时,就是HBP,单位为CLK,也就是经过HBP个CLK时间后开始新一行数据的扫描。
  • HFP(也叫thf):当一行数据扫描完成后,等待HSYNC信号的产生,在这中间插入一段延时,就是HFP,单位为CLK。
  • HSPW(也叫thp):HSYNC信号的宽度,单位为CLK,也就是说HSYNC信号必须持续HSPW个CLK的时间,否则屏幕可能无法识别到HSYNC信号。

IMX6ULL裸机开发——LCD显示_第3张图片

  • VSPW(也叫tvp):垂直同步信号宽度,也就是该信号所要持续的时间,单位为CLK。
  • VBP(也叫tvb):产生VSYNC信号后开始新一帧图像的显示,在这中间加入一段延时就是VBP,单位为显示一行的时间。
  • VFP(也叫tvf):结束一帧图像的显示后,等待VSYNC信号,在这中间插入一段时间就是VFP,单位为显示一行的时间。
  • LINE:显示一帧有效数据所需要的时间,这我这里使用的屏幕是需要600行的时间。

根据以上可知,显示一帧图像需要的时间为:T = (VSPW+VBP+LINE+VFP) * (HSPW + HBP + HOZVAL + HFP)

4、像素时钟

  • 像素时钟就是RGCLCD的时钟信号,以目前使用的ATK7016这段屏幕为例(正点原子),显示一帧图像所需要的时钟数:
    = (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。

二、LCD控制器

  • 很多芯片平台都有LCD控制器,例如IMX6ULL这款芯片的LCDIF接口就是LCD的控制器。由于不同的平台其配置并不相同,所以这里并不记录如何配置LCDIF,能根据不同的芯片平台去设置LCD接口就好。

三、LCD程序框架

1、程序框架的目的

  • 很多LCD的参数并不相同,但是都可以连接同一个开发板,如何保证自己的程序适配不同的LCD。
  • 通一块屏幕,是否可以支持不同的开发板。
    所以我们的目标是使得程序容易扩展,只需要稍微修改而不必改动程序框架即可实现扩展

2、编程框架

  • 对于LCD屏幕来说,该有的参数都是一样的,只是值不一样,所以我们将LCD抽象出一个结构体来,里面有时序参数与、像素等信息,每个LCD提供它自己的LCD结构体。
  • 对于不同的开发板,它有自己的LCD控制器。对于不同的LCD控制器,其寄存器是不一样的,但是要实现的功能都是类似的,操作步骤也是类似的,我们可以根据LCD的参数社会组LCD控制器,分配显存,启动控制器。

3、程序源码

你可能感兴趣的:(I.MX6ULL,裸机,嵌入式硬件,arm开发)