1、LCD简介
1、分辨率
LCD显示器都是一个个像素点组成,比如1080p就是LCD上屏幕点数是1920*1080
像素格式
上面提到了像素点1,一个像素点相当于一个RGB小灯,通过控制这三种颜色亮度就可以显示各种各样的色彩,R,G,B分别占用8bit,再加上透明通道的8bit,一个像素点相当于占用4个字节的内存
3、lcd屏幕接口
IMX6ULL支持RGB接口的LCD,信号线如下,24个io口需要设置
4、显存
存放一帧的图像数据大小,一般定义一个数组
5、lcd时间参数
画一帧图片需要一行一行的画,HSYNC信号表示新的一行开始显示,信号的维持时间是HSPW
下一行像素的显示需要有个延时,叫做HFP
垂直:
VSYNC:垂直同步信号,帧同步信号,当出现这个信号的时候表示新的一帧开始显示,持续时间是vspw,间隔时间是VBP
2.LCD驱动简析
不同分辨率的 LCD 屏幕其 eLCDIF 控制器驱动代码都是一样的,只需要修改好对应的屏幕参数即可,也就是在设备树里面修改。LCD驱动部分不需要我们修改,只需要根据所使用的LCD来修改设备树:
1、LCDs所使用的Io配置
RGB LCD 的 24 根数据线配置项/4 根控制线配置项/LCD 背光 PWM 引脚配置项
2、lcd屏幕节点修改,修改相对应的属性值,换成我们的LCD屏幕参数
使用到的电气属性(data/ctl)
屏幕尺寸等参数
3、lcd背光节点信息修改,要根据实际使用的背光io来修改相应的设备节点信息
LCD 驱动代码编写
应用程序将数据写入framebuffer中,然后地址映射到内存中(物理内存与虚拟内存需要是一个地址)
lcd控制器从framerbuffer内存中将每个像素点发送给lcd
famerbuffer驱动是一个字符驱动创建一个内存空间,可以直接对齐对写
frambuff驱动框架编写
一、分配fb_info
fb_alloc_framebuffer 为framebuffer分配空间,进行内存映射
二、设置fb_info
初始化fb_info设备结构体
从数据手册中获取屏幕参数,需要的参数每个屏幕不一定相同,填充fb_info
操作函数也在其中
三、注册fb_info
register_framebuffer
*注册fb设备到系统中
硬件的配置
1、引脚设置
配置GPIO用于LCD
2、时钟设置
根据LCD手册设置LCD控制器,比如VCLK的频率
3、lcd控制器设置
分配显存(framebuffer)并将地址告诉LCD控制器