【嵌入式LINUX学习笔记】RGB LCD原理及接口寄存器简述
前言
所用平台为I.MX6UL。
原理简述
LCD简介
Liquid Crystal Display,液晶显示器。液晶显示器的每个像素由以下几个部分构成:悬浮于两个透明电极(氧化铟锡)间的一列液晶分子层,两边外侧有两个偏振方向互相垂直的偏振过滤片。如果没有电极间的液晶,光通过其中一个偏振过滤片其偏振方向将和第二个偏振片完全垂直,因此被完全阻挡了。但是如果通过一个偏振过滤片的光线偏振方向被液晶旋转,那么它就可以通过另一个偏振过滤片。液晶对光线偏振方向的旋转可以通过静电场控制,从而实现对光的控制。
分辨率
LCD是由像素点组成的(可以理解为放大版的点阵屏),在同等尺寸下,分频率越高,图像越细腻
常见的1080P指的是19201080,也就是2073600个像素点,2K就是25601440个像素点,4K是3840*2160个像素点
显示器左上角是第一个像素点,右下角为左后一个像素点,分x,y轴。
像素格式
一个像素点相当于个RGB小灯,通过控制R、G、B三种颜色的亮度就可以显示颜色。
- RGB888格式:通常一个R、G、B三部分分别使用8bit的数据,一个像素点就是8bit*3=24bit(三个字节)
- ARGB8888格式:在RGB888的基础上增加了8bit的Alpha(透明)通道,总达到32bit,4个字节
- RGB565格式:每个像素用16比特位表示,占2个字节,RGB分量分别使用5位、6位、5位。
- RGB555格式:每个像素用16比特位表示,占2个字节,RGB分量都使用5位(最高位不用)。
- RGB24格式: 每个像素用8比特位表示,占1个字节,注意:在内存中RGB各分量的排列顺序为:BGR BGR BGR ···
- RGB32格式:每个像素用32比特位表示,占4个字节,R,G,B分量分别用8个bit表示,存储顺序为B,G,R,最后8个字保留。
- ARGB32格式:在RGB32的基础上增加了alpha通道,保留的8bit用来表示alpha通道。
RGBLCD接口
信号线 | 描述 |
---|---|
R[7:0] | 8根红色数据线 |
G[7:0] | 8根绿色数据线 |
B[7:0] | 8根蓝色数据线 |
DE | 数据使能线(DE模式) |
VSYNC | 垂直同步信号线 |
HSYNC | 水平同步信号线(HV模式) |
PCLK | 像素时钟信号线 |
LCD时间参数
图像的形成:从左至右、从上到下的顺序扫描每个像素点(“Z”形运动,并在像素画上对应的像素。
一帧图像是一行一行组成的。
下图为分辨率为1020*600LCD一帧扫描图
- HSYNC是水平同步信号(行同步信号):当产生此信号表示开始新的一行。
- VSYNC是垂直同步信号(帧同步信号):当产生此信号表示开始显示新的一帧图像。
- HBP 水平同步信号前肩 :表示从水平同步信号开始到一行的有效数据开始之间的VCLK的个数
- HFP 水平同步信号后肩 :表示一行的有效数据结束到下一个水平同步信号開始之间的VCLK的个数
- VBP 垂直同步信号前肩 :表示在一帧图像开始时,垂直同步信号以后的无效的行数
- VFP 垂直同步信号后肩 :表示在一帧图像结束后,垂直同步信号曾经的无效的行数
这六个时间参数具体就要去查看LCD数据手册。
屏幕时序
行时序:
补充参数:
- HSPW: 是HSYNC信号宽度,也就是HSYNC信号持续时间。HSYNC信号不是一个脉冲,而是需要持续一段时间才是有效的,单位为 CLK
- HOZVAL:显示一行数据所需的时间
行列时序
补充参数:
- VSPW:是 VSYNC 信号宽度,也就是 VSYNC 信号持续时间,单位为 1 行的时间。
- LINE:显示一帧有效数据所需的时间
- 一行的通信过程:LCD控制器IC先发送一个HSYNC高电平脉冲信号,脉冲告诉驱动器下面的信息是一行信息。然后开始这一行信息,这一行信息包括3部分:HBPD+有效行信息+HFPD。其中前肩和后肩都属于时序信息(和LCD屏幕具体有关),有效行信息就是横向分辨率。所以你可以认为一行总共包含4部分:HSPW+HBP+HOZVAL(有效行信息)+HFPD。
- 一帧图像其实就是一列,一列图像由多个行组成,每行都是上面的时序。
- 一帧图像的通信过程:整个帧图像信号分为4部分:VSYNC+VBPD+LINE(帧有效信号)+VFPD。VSVNC是帧同步信号宽度,用来告诉驱动器一帧图像要开始了;VBPD和VFPD分别是垂直同步信号前后肩。
- 整帧所需时间为:T = (VSPW+VBP+LINE+VFP) * (HSPW + HBP + HOZVAL + HFP)
同时这也能解释黑边产生原因,无效行和无效个数一同组成了黑边。
像素时钟
像素时钟就是 RGB LCD 的时钟信号,显示一帧图像所需时钟数为上文提到的T
显存
显存=单个像素的大小*分辨率
通常RGB LCD内部不带内存,需要从其他地方分出一段内存作为显存用。
驱动分析
eLCDIF接口:
用于连接RGB LCD接口的屏幕,特性如下:
- 支持 RGB LCD 的 DE 模式。
- 支持 VSYNC 模式以实现高速数据传输。
- 支持 ITU-R BT.656 格式的 4:2:2 的 YCbCr 数字视频,并且将其转换为模拟 TV 信号。
- 支持 8/16/18/24/32 位 LCD。
支持以下三种接口:
- MPU 接口
用于与LCD屏幕直接传输数据和命令,用于6080/8080接口的LCD屏幕 - VSYNC 接口
VSYNC 接口时序和 MPU 接口时序基本一样,只是多了 VSYNC 信号来作为帧同步 - DOTCLK 接口
DOTCLK 接口就是用来连接 RGB LCD 接口屏幕的, 它包括 VSYNC、 HSYNC、 DOTCLK和 ENABLE(可选的)这四个信号,这样的接口通常被称为 RGB 接口,其时序和上文提到的行类时序很类似。
重要寄存器
配置寄存器LCDIF_CTRL
重要位:
位 | 描述 |
---|---|
SFTRST(bit31) | 软复位控制位,为1则复位 |
CLKGATE(bit30) | 正常运行下为0,为1则不会进入到LCDIF |
BYPASS_COUNT(bit19) | 在DOTCLK模式下必须为1 |
VSYNC_MODE(bit18) | 为1在VSYNC接口模式 |
DOTCLK_MODE(bit17) | 为1在DOTCLK接口模式 |
INPUT_DATA_SWIZZLE(bit15:14) | 输入数据字节交换设置,为0,不交换字节(小端模式);为1交换所有字节;为2半字交换;为3在每个半字内进行字节交换 |
CSC_DATA_SWIZZLE(bit13:12) | CSC数据字节交换设置,交换方式同上 |
LCD_DATABUS_WIDTH(bit11:10) | LCD 数据总线宽度,为0总线宽度为16bit;为1总线宽度为8bit;为2总线宽度为18bit;为宽度为24bit |
WORD_LENGTH(bit9:8) | 输入的数据格式(像素数据宽度),为0每个像素16bit;为1每个像素8bit;为2每个像素18bit;为3每个像素24bit |
MASTER(bit5) | 为1工作在主模式 |
DATA_FORMAT_16_BIT(bit3) | 当此位为 1 并且 WORD_LENGTH 为 0 的时候像素格式为 ARGB555,当此位为 0 并且 WORD_LENGTH 为 0 的时候像素格式为 RGB565 |
DATA_FORMAT_18_BIT(bit2) | 当 WORD_LENGTH 为 2 的时候此位才有效,此位为 0 的话低 18 位有效,像素格为 RGB666,高 14 位数据无效。当此位为 1 的话高 18 位有效,低14为数据无效 |
DATA_FORMAT_24_BIT(bit1) | 当 WORD_LENGTH 为 3 的时候此位才有效,为0表示全部的 24 位数据都有效.为1数据有效位只有 18 位,每个颜色通道的高 2 位数据会被丢弃掉 |
RUN(bit0) | 接口运行控制位,为1使能,开始传输数据 |
控制寄存器 LCDIF_CTRL1
重要位:
- BYTE_PACKING_FORMAT(bit19:16),用来决定在 32 位的数据中哪些字节的数据有效,默认值为 0XF,也就是所有的字节有效,当为 0 的话表示所有的字节都无效。
寄存器LCDIF_TRANSFER_COUNT
- 高16位:V_COUNT,LCD 的垂直分辨率
- 低16位:H_COUNT,是 LCD 的水平分辨率
寄存器 LCDIF_VDCTRL0
VSYNC 和 DOTCLK 模式 控制寄存器0
重要位:
位 | 描述 |
---|---|
VSYNC_OEB(bit29) | VSYNC 信号方向控制位,为0输出,为1输入 |
ENABLE_PRESENT(bit28) | EBABLE 数据线使能位(DE数据线),为1使能,为0关闭 |
VSYNC_POL(bit27) | VSYNC 数据线极性设置位,为 0 的话 VSYNC 低电平有效,为1高电平有效 |
HSYNC_POL(bit26) | HSYNC 数据线极性设置位,为 0 的话 HSYNC 低电平有效,为1高电平有效 |
DOTCLK_POL(bit25) | DOTCLK 数据线(像素时钟线 CLK) 极性设置位,为0的话下降沿锁存数据,上升沿捕获数据,为1相反 |
ENABLE_POL(bit24) | EANBLE 数据线极性设置位,为 0 的话低电平有效,为1高电平有效 |
VSYNC_PERIOD_UNIT(bit21) | VSYNC 信号周期单位,为 0 的话 VSYNC 周期单位为像素时钟。为1的话 VSYNC 周期单位是水平行,如果使用 DOTCLK 模式话就要设置为 1 |
VSYNC_PULSE_WIDTH_UNIT(bit20) | VSYNC信号脉冲度单位,设置同上 |
VSYNC_PULSE_WIDTH(bit17:0) | VSPW 参数设置位 |
寄存器 LCDIF_VDCTRL1
VSYNC 和 DOTCLK 模式 控制寄存器1
设置VSYNC总周期:VSYNC 和 DOTCLK 模式 控制寄存器0
寄存器 LCDIF_VDCTRL2
分为高 16 位和低 16 位两部
- 高16bit,HSYNC_PULSE_WIDTH,用来设置 HSYNC 信号宽度,也就是 HSPW
- 低16bit,HSYNC_PERIOD,设置 HSYNC 总周期,就是:屏幕宽度+HSPW+HBP+HFP
寄存器LCDIF_VDCTRL3
重要位:
- HORIZONTAL_WAIT_CNT(bit27:16):此位用于 DOTCLK 模式,用于设置 HSYNC 信号产生到有效数据产生之间的时间,也就是 HSPW+HBP
- VERTICAL_WAIR_CNT(bit15:0):此位用于 DOTCLK 模式,用于设置 VSYNC 信号产生到有效数据产生之间的时间,也就是 VSPW+VBP
寄存器 LCDIF_VDCTRL4
重要位:
- SYNC_SIGNALS_ON(bit18):同步信号使能位,设置为 1 使能 VSYNC、 HSYNC、DOTCLK 信号
- DOTCLK_H_VALID_DATA_CNT(bit15:0): 设置 LCD 的宽度,也就是水平像素数量
寄存器 LCDIF_CUR_BUF 和 LCDIF_NEXT_BUF
LCD显存,分别存放当前帧和下一帧缓冲区,保存在同一地址
【嵌入式LINUX学习笔记】RGB LCD原理及接口寄存器简述相关推荐
- 嵌入式linux学习笔记--TCP通讯整理
嵌入式linux学习笔记–TCP通讯整理 之前的项目中使用到了比较多的tcp 通讯相关的知识,一直也没有进行整理,今天准备拿出时间好好的整理一下TCP通讯的整个过程.预计会整理linux和window ...
- 迅为嵌入式Linux学习笔记4——进程
迅为嵌入式Linux学习笔记4--进程 进程指的是正在运行的程序,是操作系统分配资源的最小单位. 进程ID 每个进程都有唯一的标识符,这个标识符就是进程ID,简称pid 进程间通信的方法 管道通信:分 ...
- 迅为嵌入式Linux学习笔记5——进程间通信
迅为嵌入式Linux学习笔记5--进程间通信 管道通信 无名管道 无名管道只能实现有亲缘关系的进程之间的通信,比如父子进程. pipe函数: #include <unistd.h> int ...
- 嵌入式Linux学习笔记—fastboot烧写Android
本系列为本人在自学过程中的学习笔记,如有错误欢迎大家指正. 学习资料为讯为ITOP4412开发板. fastboot烧写Android 1.主要工具 OTG 接口烧写方式也叫 fastboot 烧写方 ...
- 嵌入式linux学习笔记(一)
最近开始学习linux驱动编写,目前直接使用jz2440已移植好的系统配合视频开始学习驱动编写,但是总是出现这样那样的问题.于是决定重头开始,先自己移植内核,在开始驱动学习. 今天参照<嵌入式l ...
- 嵌入式Linux学习笔记(1-1)——linux系统搭建
版权声明:本文为博主原创文章,未经博主允许不得转载. 学习嵌入式linux已经有2年时间,虽然时间不长,但一路走来遇到很多问题,绕了很多弯路.写这篇文章的目的是分享我的经验,以供初学者参考,希望能够帮 ...
- 嵌入式linux编程,嵌入式Linux学习笔记 - 嵌入式Linux基础知识和开发环境的构建_Linux编程_Linux公社-Linux系统门户网站...
注:所有内容基于友善之臂Mini2440开发板 一.嵌入式Linux开发环境的构建 嵌入式开发一般分为三个步骤: 1.编译bootloader,烧到开发板 2.编译嵌入式Linux内核,烧到开发板 3 ...
- linux内核编译选项ccl,嵌入式Linux学习笔记(一)
注:所有内容基于友善之臂Mini2440开发板 一.嵌入式Linux开发环境的构建 嵌入式开发一般分为三个步骤: 1.编译bootloader,烧到开发板 2.编译嵌入式Linux内核,烧到开发板 3 ...
- 嵌入式Linux学习笔记(1-4)——下载bootoader
俗话说万事开头难(然后中间难结尾难),拿到一款开发板之后,由于缺少教程或者教程不够详细等多种原因导致菜鸟一脸茫然无从下手,信心受挫,此时若有一个大牛在手把手指导哪该多好,但是大牛总是很忙--所以关键还 ...
最新文章
- -Linux基础知识2 -文件系统的操作 压缩,解压缩
- python 能干嘛-python能干嘛
- PyCharm取消启动时自动加载项目
- python3.6安装步骤-python3.6、opencv安装环境搭建过程(图文教程)
- 在CentOS6.5上安装/启动PostgreSQL
- 绿联串口线linux驱动下载,绿联USB转DB9串口线驱动 V1.6.1 Mac版
- R语言:商业数据分析实例(4)【总结篇,回归】
- 揭秘 | 直播美颜不靠脸 靠的是阿里云程序员?
- 什么是python语言的解释性?
- CF120F Spiders 题解
- 数据湖统一存储在 OPPO 的实践
- 【无标题】input开始输入文字,到输入结束触发事件
- Tableau实现跑道图
- 最受程序员欢迎的20本书
- 域控服务器降级失败,windows2003域控制器升级和降级的图文教程
- 蓝桥杯: Cowboys
- ckplayer 网页视频播放
- Journal日志服务详解
- 关于CPU使用率飙升,我们需要了解什么?
- 计算机二级word云计算机交流,全国计算机二级office-word-历年真题5.docx
热门文章
- from skimage import morphology 报错
- 在Form1中打开另一个窗体Form2
- 为什么微服务实施那么难?如何高效推进微服务架构演进
- WorkNC机床碰撞检测(变化角度)
- iText7高级教程之构建基础块——1.引入字体
- Three.js 3D建模必备基础
- 【题解】[NOIP模拟题]我要的幸福-C++
- (11)桌面日历——日程管理和任务清单
- android 视频转表情包,视频转gif动图怎么转?一款能制作表情包的软件,年轻人很爱用...
- 2021第三届传智杯决赛全题解