Linux Framebuffer 驱动框架之一概念介绍及LCD硬件原理【转】

时间:2023-01-03 10:41:44

本文转载自:http://blog.csdn.net/liuxd3000/article/details/17464779

一、基本概念

帧缓冲(Framebuffer)是Linux系统为显示设备提供的一个接口,它将显示缓冲区抽象,屏蔽图像硬件的底层差异,允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。用户不必关心物理显示缓冲区的具体位置及存放方式,这些都是由帧缓冲设备驱动本身来完成。对于帧缓冲设备而言,只要在显示缓冲区与显示点对应的区域写入颜色值,对应的颜色会自动在屏幕上显示,下一小节重点讲解各种模式下缓冲区与显示点的对应关系。

/**********************************************************************************************************************************/

原创作品,转载时请务必以超链接形式标明文章原始出处:http://blog.csdn.net/gqb666/article/details/9338679,作者:gqb666  
/**********************************************************************************************************************************/

帧缓冲设备为标准字符设备,主设备号为29,对应于/dev/fbn设备文件。应用程序可以通过打开读写此设备文件而讲视频及图像数据输出到显示设备上。在接下来的博文中会介绍用户态如果操作帧缓冲设备的方法,linux抽象出FrameBuffer这个设备来供用户态进程实现直接写屏。 Framebuffer机制模仿显卡的功能,将显卡硬件结构抽象掉,可以通过Framebuffer的读写直接对显存进行操作。用户可以将Framebuffer看成是显示内存的一个映像,将其映射到进程地址空间之后,就可以直接进行读写操作,而写操作可以立即反应在屏幕上。这种操作是抽象的,统一的,用户不必关心物理显存的位置、换页机制等等具体细节,这些都是由Framebuffer设备驱动来完成的,但Framebuffer本身不具备任何运算数据的能力,就只好比是一个暂时存放水的水池,CPU将运算后的结果放到这个水池,水池再将结果流到显示器,中间不会对数据做处理,应用程序也可以直接读写这个水池的内容。在嵌入式系统中一般没有专门的显存,而仅仅是从RAM(SDRAM)空间中分配一段显示缓冲区,典型结构如下图所示:

Linux Framebuffer 驱动框架之一概念介绍及LCD硬件原理【转】

二、显示缓冲区与显示点的关系

   在介绍显示缓冲区与显示点的关系前,先介绍下SOC或者CPU支持的色彩模式或者叫颜色位域。色彩模式即一个像素的三元色分别有几位数据组成。如RGBA8888则表示一个像素点由32位数据组,红、绿、蓝及透明度分别是8位。再或者ARGB8888则类似,只是在设置有有关数据结构时注意下顺序及偏移即可。帧缓冲设备中,对屏幕显示点的操作通过读写显示缓冲区来完成,在不同的色彩模式下,显示缓冲区和屏幕上的显示点有不同的对应关系,下图展示了一个像素点8位和16位情况下显示缓冲区与显示点的对应关系。Linux Framebuffer 驱动框架之一概念介绍及LCD硬件原理【转】

三、LCD的硬件原理及时序关系

利用液晶制成的显示器称为LCD,依据驱动方式可分为静态驱动、简单矩阵驱动、以及主动矩阵驱动3种。其中,简单矩阵型又可再细分为扭转向列型(TN)和超扭转式向列型(STN)2种,而主动型矩阵则以薄膜式晶体管型(TFT)为主流。下表列出这几种显示器的区别

Linux Framebuffer 驱动框架之一概念介绍及LCD硬件原理【转】

一块LCD屏不但需要LCD驱动器,还需要有相应的LCD控制器。通常LCD驱动器会以COF/COG的形式与LCD玻璃基板制作在一起,而LCD控制器则由外部电路来实现。许多MCU内部直接集成了LCD控制器,通过LCD控制器可以方便地控制STN和TFT屏。

TFT屏是目前嵌入式系统应用的主流。下图给出了TFT屏的典型时序。时序图中的VCLK、HCYNC、和VSYNC分别为像素时钟信号(用于锁存图像数据的像素时钟)、行同步信号和帧同步信号,VDEN为数据有效标志信号,VD为图像的数据信号。

Linux Framebuffer 驱动框架之一概念介绍及LCD硬件原理【转】

作为帧同步信号的VSYNC,每发出一个脉冲,都意味着新的一屏图像数据开始发送到屏幕上,而作为行同步信号的HSYNC,每发出一个脉冲都表明新的一行图像数据开始发送到屏幕上。在帧同步以及行同步的头尾都必须留有回扫时间,即图中的(HBPD+1)和(HFPD+1)为行回扫时间,(VBPD+1)和(VFPD+1)为帧回扫时间。这样的时序安排起源于CRT显示器电子枪偏转所需要的时间,但后来成为实际上的工业标准,因此TFT屏也包含了回扫时间。

下图给出一帧数据在实际LCD显示器上显示的映射图。其中的上边界和下边界即为帧切换的回扫时间,左边界和右边界即为行切换的回扫时间,水平同步和帧同步分别是行和帧同步本身需要的时间。x-res和y-res则分别是屏幕的水平和垂直分辨率。

Linux Framebuffer 驱动框架之一概念介绍及LCD硬件原理【转】

下转博文《Linux Framebuffer驱动框架之二软件架构》。

接下来将有如下博文:

Linux Framebuffer驱动框架之二软件架构
 Linux Framebuffer 驱动框架之三相关数据结构
 Linux Framebuffer 驱动框架之四设备驱动接口
 Linux Framebuffer 驱动框架之五DVI设备驱动的实现
 Linux Framebuffer 驱动框架之六用户态操作framebuffer