裸板lcd开发——硬件原理

需要说明的是我所讲的这个lcd屏有点古老,但是依然可以给我们对现在的lcd开发有帮助
lcd硬件原理
lcd显示出图像是因为屏幕上有整齐排列的像素点,它之所以会产生不同的颜色是因为电子qiang会对产生高能电子流
为了引入对程序的开发,我们提出下面三个问题
电子qiang如何移动?

颜色如何确定?

电子qiang如何得知信号而移动到下一行或者重头开始(我个人把这个称之为行重置和面重置)?

回答这三个问题之前我先把开发板中关于lcd的接线图和lcd芯片的时序图贴出来
裸板lcd开发——硬件原理_第1张图片
电子qiang如何移动?我们可以看到上面的图中有一根vclk,它是cpu向lcd控制器发送一个时钟信号,电子qiang就会移动到下一个像素点
裸板lcd开发——硬件原理_第2张图片
回答了上一个问题我们就容易理解lcd控制器的时序图
颜色如何确定呢?
我们可以从lcd芯片手册看到控制颜色的有三组线rgb,每组线有8根,而从接线图上我们看到总共只接了16根线来控制颜色。因为16根线刚好两个字节,如果要是用24根线,我们只能用4个字节的位置,显然会有空间被浪费掉。

电子qiang如何得知信号而移动到下一行或者重头开始(我个人把这个称之为行重置和面重置)?
我们可以看时序图,时序图可以根据hsync分三个层次来看时序图。
从下往上分别是以pixel(像素)为单位、以line为单位、以面为单位来讨论时序
从最下面看,当到达最后一个pixel,DE信号首先会拉低,而hsync会等待一段时间后再长时间拉低。看中间层次,当时钟处于line中间时,hsync一直都是高电位,而当时钟处于切换line时,hsync电位拉低。再往上看最高层次,在整个切换line的时间段里,vsync的电位都是出于高电位,只有当到达了last line时,将要发生面重置,电位拉低。所以我们大概就清楚了如何换行和换面。h是horizon首字母,v是vertical首字母

如果愿意仔细分析时序图还可以得到更多的信息,比如这其中的每一个t背后代表什么硬件上的意义呢?

然后讨论另外一个问题,lcd控制器上的16根线控制着lcd上的像素颜色显示,但是lcd控制器又是从谁收到信息呢?
显然它是从内存上获得信息,我们会在内存上专门为lcd控制器创建一个framebuffer,这段内存区域上的地址空间会和lcd上的像素一一对应,framebuffer的信息将会被循环地传给lcd控制器,为什么这样呢?因为我们对内存的读和写是非常容易控制的,不然还能直接去操作lcd控制器吗?

到这里我们就可以大致的知道lcd控制器的作用了
简单总结一下
取数据,从framebuffer中取出数据,如果有调色板的作用,则以framebuffer的数据作为索引,从调色板中取出相应的数据
发送数据,lcd控制器将会把它从framebuffer或者调色板中取出的数据连同相关的信号(相关信号后面将会讲述)发送给lcd屏的芯片。
所以,lcd控制器和外设lcd屏之间存在信息交互,那么必然就要有类似的协议,当然,这里是裸板开发,所以我们只需要把lcd屏的相关硬件信息和cpu中的lcd控制器做相应的适配就可以了,如需要将lcd的时钟频率、数据结构格式以及framebuffer的地址等信息告诉lcd控制器。
下图是概览图裸板lcd开发——硬件原理_第3张图片
下面我列出lcd控制器提供的几种数据格式
裸板lcd开发——硬件原理_第4张图片
裸板lcd开发——硬件原理_第5张图片
裸板lcd开发——硬件原理_第6张图片
上面列出了24bpp、16bpp和8bpp
在本文的前面我解释过了为什么我们lcd屏芯片有24根线控制颜色,而我们在这里只用了其中的16根线,因为如果我们用了24根,那么在内存中每一个像素点对应的数据将会占用4个字节的空间,显然会造成内存的浪费
需要提出8bpp是因为我们要引出调色板的概念,lcd控制器将从framebuffer中读出数据,如果我们采用的是8bpp或者更少,那么framebuffer数据作为一个索引,去调色板上找到对应的16位的数据,然后把这个16位的数据和其他的信号一起发送给lcd。

你可能感兴趣的:(裸板lcd开发——硬件原理)