1、LCD屏幕的重要属性参数:
① 分辨率:也就是屏幕上的像素点的个数;
② 像素格式:即单个像素点RGB三种颜色的表达方式,包括RGB888、ARGB8888和RGB565等。
③ LCD屏幕硬件接口:
这里指的是RGB LCD排线接口,
如下图所示:
R[7:0]、G[7:0]和B[7:0]这24根是数据线,DE、VSYNC、HSYNC和PCLK这四根是控制信号线
。RGB LCD一般有两种驱动模式:
DE模式和HV模式,这两个模式的区别是DE模式需要用到DE信号线,而HV模式不需要用到DE信号线,
在DE模式下是可以不需要HSYNC信号线的(
DE与HSYNC功能相同
),即使不接HSYNC信号线LCD也可以正常工作。
///
2、LCD的时间参数:(
重要)
如果将LCD显示一帧图像的过程想象成绘画,那么在显示的过程中就是用一根“笔”在不同的像素点画上不同的颜色。
这根笔按照
从左至右、从上到下
的顺序扫描每个像素点,并且在像素画上对应的颜色,当画到最后一个像素点的时候一幅图像就绘制好了。
假设一款LCD屏幕的分辨率为1024*600,如下图所示:
HSYNC是水平同步信号,也叫做行同步信号,当产生此信号的话就表示开始显示新的一行数据;
VSYNC信号是垂直同步信号,也叫做帧同步信号,当产生此信号的话就表示开始显示新的一帧图像了。
当显示完一行以后会发出HSYNC信号,此时电子枪就会关闭,然后迅速的移动到屏幕的左边,当HSYNC信号结束以后就可以显示新的一行数据了,电子枪就会重新打开;
在HSYNC信号结束到电子枪重新打开之间会插入一段延时,这段延时就图 50.1.5中的HBP;当显示完一行以后就会关闭电子枪等待HSYNC信号产生,关闭电子枪到HSYNC信号产生之间会插入一段延时,这段延时就是图 50.1.5中的HFP信号。同理,
当显示完一帧图像以后电子枪也会关闭,然后等到VSYNC信号产生,
期间也会加入一段延时,这段延时就是图 50.1.5中的VFP;VSYNC信号产生,电子枪移动到左上角,当VSYNC信号结束以后电子枪重新打开,中间也会加入一段延时,这段延时就是图 50.1.5中的VBP。
///
3、RGB LCD屏幕的时序(
底层核心
):
① 行显示的时序:
HSYNC:行同步信号,当此信号有效的话就表示开始显示新的一行数据,查阅所使用的LCD数据手册可以知道此信号是低电平有效还是高电平有效,
假设此时是低电平有效。
HSPW:有些地方也叫做thp,是HSYNC信号宽度,
也就是HSYNC信号持续时间。HSYNC信号不是一个脉冲,而是需要持续一段时间才是有效的,
单位为CLK。
HBP:有些地方叫做thb,前面已经讲过了,术语
叫做行同步信号后肩,
单位是CLK。
HOZNAL:有些地方叫做thd,
显示一行数据所需的时间,假如屏幕分辨率为1024*600,那么HOZVAL就是1024,
单位为CLK。
HFP:有些地方叫做thf,前面已经讲过了,术语叫做行
同步信号前肩,
单位是CLK。
显示一行所需要的时间就是:HSPW + HBP + HOZVAL + HFP。单位:CLK。
② 帧显示的时序:
VSYNC:
帧同步信号,当此信号有效的话就表示开始显示新的一帧数据,查阅所使用的LCD数据手册可以知道此信号是低电平有效还是高电平有效,
假设此时是低电平有效。
VSPW:些地方也叫做tvp,是VSYNC信号宽度,也就是
VSYNC信号持续时间,
单位为1行的时间(
多少个HSYNC
)。
VBP:有些地方叫做tvb,前面已经讲过了,术语叫做
帧同步信号后肩,
单位为1行的时间。
LINE:有些地方叫做tvd,
显示一帧有效数据所需的时间,假如屏幕分辨率为1024*600,那么LINE就是600行的时间。
单位是1行的时间。
VFP:有些地方叫做tvf,前面已经讲过了,术语叫做
帧同步信号前肩,
单位为1行的时间。
显示一帧所需要的时间就是:VSPW+VBP+LINE+VFP个行时间。
显示完整一帧图像的
clk时间
是:T = (VSPW+VBP+LINE+VFP) * (HSPW + HBP + HOZVAL + HFP)。
///
|
1、驱动框架的介绍:
帧缓冲(framebuffer)是Linux为显示设备提供的一个接口,
把显存抽象后的一种设备,他允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。所以在Linux系统中,凡是显示设备都被称为FrameBuffer设备(帧缓冲设备),所以LCD自然而言就是FrameBuffer设备。
FrameBuffer设备对应的设备文件为/dev/fb*,
Linux下可支持多个FrameBuffer设备,最多可达32个,分别为/dev/fb0到/dev/fb31,如果没有指定系统所使用的显示设备,通常指向/dev/fb0,在嵌入式系统中支持一个显示设备就够了。在Linux系统中,FrameBuffer设备为标准字符设备,主设备号为29,次设备号则从0到31。分别对应/dev/fb0-/dev/fb31。
在Linux系统中,FrameBuffer设备也有对应的设备驱动框架,我们把它叫做FrameBuffer驱动框架,所以Linux下编写LCD驱动我们就可以使用FrameBuffer驱动框架。
FrameBuffer驱动架构其实也是基于字符设备驱动来开发的,其内核源码位置在
drivers/video/fbdev/core/fbmem.c中。
其原理大概如下:
① 内核源码基于字符设备驱动
在/dev目录下挂载fbxx设备,其
主设备号为29,此设备0~31;
② 最多允许同时存在32个显示设备
③ 在字符设备的file_operations中,
实现了open、release、read、write以及memey、ioctl等函数;
④ 这些函数其本质是调用了内核链表的一种
结构体对象struct fb_info;
⑤ 作为驱动开发者,实际上
我们就是要描述并挂载一个struct fb_info对象,并初始化配置一下外设;
2、LCD驱动开发的基本流程(
基于ZYNQ开发板
):
① 根据实际
|
文章来源地址https://www.toymoban.com/news/detail-794225.html
文章来源:https://www.toymoban.com/news/detail-794225.html
到了这里,关于Linux下的FrameBuffer驱动框架的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!