LV10-01-LCD驱动-01-LCD基础知识
先来了解LCD屏幕的一些基础知识?若笔记中有错误或者不合适的地方,欢迎批评指正😃。
点击查看使用工具及版本
PC端开发环境 | Windows | Windows11 |
Ubuntu | Ubuntu20.04.2的64位版本 | |
VMware® Workstation 17 Pro | 17.6.0 build-24238078 | |
终端软件 | MobaXterm(Professional Edition v23.0 Build 5042 (license)) | |
Win32DiskImager | Win32DiskImager v1.0 | |
Linux开发板环境 | Linux开发板 | 正点原子 i.MX6ULL Linux 阿尔法开发板 |
uboot | NXP官方提供的uboot,使用的uboot版本为U-Boot 2019.04 | |
linux内核 | linux-4.19.71(NXP官方提供) |
点击查看本文参考资料
分类 | 网址 | 说明 |
官方网站 | https://www.arm.com/ | ARM官方网站,在这里我们可以找到Cotex-Mx以及ARMVx的一些文档 |
https://www.nxp.com.cn/ | NXP官方网站 | |
https://www.nxpic.org.cn/ | NXP 官方社区 | |
https://u-boot.readthedocs.io/en/latest/ | u-boot官网 | |
https://www.kernel.org/ | linux内核官网 |
点击查看相关文件下载
分类 | 网址 | 说明 |
NXP | https://github.com/nxp-imx | NXP imx开发资源GitHub组织,里边会有u-boot和linux内核的仓库 |
nxp-imx/linux-imx/releases/tag/v4.19.71 | NXP linux内核仓库tags中的v4.19.71 | |
nxp-imx/uboot-imx/releases/tag/rel_imx_4.19.35_1.1.0 | NXP u-boot仓库tags中的rel_imx_4.19.35_1.1.0 | |
I.MX6ULL | i.MX 6ULL Applications Processors for Industrial Products | I.MX6ULL 芯片手册(datasheet,可以在线查看) |
i.MX 6ULL Applications ProcessorReference Manual | I.MX6ULL 参考手册(下载后才能查看,需要登录NXP官网) | |
Source Code | https://elixir.bootlin.com/linux/latest/source | linux kernel源码 |
kernel/git/stable/linux.git - Linux kernel stable tree | linux kernel源码(官网,tag 4.19.71) | |
https://elixir.bootlin.com/u-boot/latest/source | uboot源码 |
一、显示器简介
显示器属于计算机的I/O设备,即输入输出设备。它是一种将特定电子信息输出到屏幕上再反射到人眼的显示工具。 常见的有CRT显示器、液晶显示器、LED点阵显示器及OLED显示器。
1. 液晶显示器
1.1 液晶简介
液晶是一种介于固体和液体之间的特殊物质,它是一种有机化合物,常态下呈液态, 但是它的分子排列却和固体晶体一样非常规则,因此取名液晶。如果给液晶施加电场,会改变它的分子排列, 从而改变光线的传播方向,配合偏振光片,它就具有控制光线透过率的作用,再配合彩色滤光片, 改变加给液晶电压大小,就能改变某一颜色透光量的多少,下图中的就是绿色显示结构。

利用这种原理,做出可控红、绿、蓝光输出强度的显示结构,把三种显示结构组成一个显示单位, 通过控制红绿蓝的强度,可以使该单位混合输出不同的色彩,这样的一个显示单位被称为像素。
注意液晶本身是不发光的,所以需要有一个背光灯提供光源,光线经过一系列处理过程才到输出, 所以输出的光线强度是要比光源的强度低很多的,比较浪费能源(当然,比CRT显示器还是节能多了)。 而且这些处理过程会导致显示方向比较窄,也就是它的视角较小,从侧面看屏幕会看不清它的显示内容。 另外,输出的色彩变换时,液晶分子转动也需要消耗一定的时间,导致屏幕的响应速度低。
1.2 液晶显示器简介
液晶显示器,简称LCD(Liquid Crystal Display),相对于上一代CRT显示器(阴极射线管显示器), LCD显示器具有功耗低、体积小、承载的信息量大及不伤眼的优点,因而它成为了现在的主流电子显示设备, 其中包括电视、电脑显示器、手机屏幕及各种嵌入式设备的显示器。下图是液晶电视与CRT电视的外观对比, 很明显液晶电视更薄。

2. LED和OLED显示器
LED点阵显示器不存在以上液晶显示器的问题,LED点阵彩色显示器的单个像素点内包含红绿蓝三色LED灯, 显示原理很简单,就是就是控制不同颜色的LED灯,通过控制红绿蓝颜色的强度进行混色,实现全彩颜色输出, 多个像素点构成一个屏幕。由于每个像素点都是LED灯自发光的,所以在户外白天也显示得非常清晰, 但由于LED灯体积较大,导致屏幕的像素密度低,所以它一般只适合用于广场上的巨型显示器。 相对来说,单色的LED点阵显示器应用得更广泛,如公交车上的信息展示牌、店招等,如下图所示。

新一代的OLED显示器与LED点阵彩色显示器的原理类似,但由于它采用的像素单元是“有机发光二极管”(Organic Light Emitting Diode), 所以像素密度比普通LED点阵显示器高得多,如下图所示。

LED显示器不需要背光源、对比度高、轻薄、视角广及响应速度快等优点。待到生产工艺更加成熟时, 必将取代现在液晶显示器的地位。

3. 显示器的基本参数
不管是哪一种显示器,都有同样的基本参数用于描述它们的特性,各个参数介绍如下:
- 像素
像素是组成图像的最基本单元要素,显示器的像素是指它成像最小的点,即前面液晶原理中提到的一个显示单元。
- 分辨率
一些嵌入式设备的显示器常常以“行像素值x列像素值”表示屏幕的分辨率。如分辨率800x480表示该显示器的每一行有800个像素点,每一列有480个像素点,也可理解为有800列,480行。
- 色彩深度
色彩深度指显示器的每个像素点能表示多少种颜色,一般用“位”(bit)来表示。如单色屏的每个像素点能表示亮或灭两种状态(即实际上能显示2种颜色),用1个数据位就可以表示像素点的所有状态,所以它的色彩深度为1bit,其它常见的显示屏色深为16bit、24bit。
- 显示器尺寸
显示器的大小一般以英寸表示,如5英寸、21英寸、24英寸等,这个长度是指屏幕对角线的长度, 通过显示器的对角线长度及长宽比可确定显示器的实际长宽尺寸。
- 点距
点距指两个相邻像素点之间的距离,它会影响画质的细腻度及观看距离,相同尺寸的屏幕,若分辨率越高,则点距越小,画质越细腻。如现在有些手机的屏幕分辨率比电脑显示器的还大,这是手机屏幕点距小的原因;LED点阵显示屏的点距一般都比较大,所以适合远距离观看。
4. TFT LCD
在开发板中经常会看到TFT LCD这样的写法,TFT是什么?
薄膜晶体管(Thin Film Transistor,简称TFT)是一种特殊的晶体管,其特点是使用薄层技术在基板上沉积半导体材料及其他材料形成晶体管。TFT技术主要应用于液晶显示(LCD)领域,是现代显示技术的核心组成部分之一。在LCD显示面板中,每个像素点都配有一个TFT,用来控制通过像素的光线量。这种主动控制机制使得TFT LCD能够提供高分辨率、高对比度、快速响应时间和良好的色彩再现,从而成为电视、电脑显示器、手机屏幕以及其他便携式电子设备的首选显示技术。
TFT的工作原理基于电场效应,与金属氧化物半导体(MOS)场效应晶体管类似。当栅极施加电压时,会改变沟道区域的电导率,从而控制源极和漏极之间的电流流动,这个电流进而控制像素点的明暗变化,实现图像的显示。TFT有多种结构设计,包括底栅结构(BG)、顶栅结构(TG)和双栅结构(DG),每种结构都有其特定的应用优势。随着技术的发展,TFT技术也在不断演进,比如低温多晶硅(LTPS)TFT和氧化物TFT(如IGZO),它们能够提供更高的电子迁移率,从而支持更高分辨率的显示和更低的功耗。除了在显示技术中的应用,TFT还因其轻薄、可大面积制备的特点,在有源矩阵有机发光二极管(AMOLED)显示、电子纸、以及各种光电器件和传感器中有所应用。
二、LCD硬件
上面以了解了显示器的一些东西,接下来就来看一下开发中的LCD屏幕。
1. LCD屏幕的参数
1.1 分辨率
LCD 显示器都是由一个一个的像素点组成,像素点就类似一个灯(在 OLED 显示器中,像素点就是一个小灯),这个小灯是 RGB 灯,也就是由 R(红色)、 G(绿色)和 B(蓝色)这三种颜色组成的,而 RGB 就是光的三原色。

而我们常说的1080P的意思就是一个 LCD 屏幕上的像素数量是1920*1080 个,也就是这个屏幕一列 1080 个像素点,一共 1920 列 :

就是 1080P 显示器的像素示意图, X 轴就是 LCD 显示器的横轴, Y 轴就是显示器的竖轴。图中的小方块就是像素点,一共有 1920*1080=2073600 个像素点。
左上角的 A 点是第一个像素点,右下角的 C 点就是最后一个像素点。 2K 就是 2560*1440 个像素点, 4K 是3840*2160 个像素点。很明显,在 LCD 尺寸不变的情况下,分辨率越高越清晰。同样的,分辨率不变的情况下, LCD 尺寸越小越清晰。
LCD 显示器的分辨率是一个很重要的参数,但是并不是分辨率越高的 LCD 就越好。衡量一款 LCD 的好坏,分辨率只是其中的一个参数,还有色彩还原程度、色彩偏离、亮度、可视角度、屏幕刷新率等其他参数。
1.2 像素格式
一个像素点就相当于一个 RGB 小灯,通过控制 R、 G、 B 这三种颜色的亮度就可以显示出各种各样的色彩。那该如何控制 R、 G、 B 这三种颜色的显示亮度?
一般一个 R、G、 B 这三部分分别使用 8bit 的数据,那么一个像素点就是 8bit*3=24bit,也就是说一个像素点3 个字节,这种像素格式称为 RGB888。如果再加入 8bit 的 Alpha(透明)通道的话一个像素点就是 32bit,也就是 4 个字节,这种像素格式称为 ARGB8888。
先来看一个基本概念:bpp——bits per pixel,每个像素用多少位来表示。我们开发过程中应该会看到24bpp、16bpp等,比如:
- 24bpp:实际上会用到32位,其中8位未使用,其余24位中分别用8位表示红(R)、绿(G)、蓝(B),如rgb888
- 16bpp:有rbg565,rgb555
rgb565:用5位表示红、6位表示绿、5位表示蓝
rgb555:16位数据中用5位表示红、5位表示绿、5位表示蓝,浪费一位

2. 屏幕接口
LCD 屏幕或者说显示器有很多种接口,比如常见的RGB、LVDS、EDP、MIPI、MCU、SPI这些。
2.1 串行接口
SPI接口:SPI即串行的外围接口。是Motorola最先在其MC68HCXX系列的处理器上面所定义的。它是可以使MCU和各种外围设备来以串行的方式进行通信,从而交换信息。SPI有三种寄存器分别是:控制寄存器的SPCR,状态寄存器SPSR以及数据寄存器SPDR。外围的设备主要包括网络控制器、LCD显示的驱动器、FLASHRAM、A/D转换器以及MCU等。SPI的接口主要还是应用在FLASH、EEPROM、AD转换器、实时时钟,以及数字信号的处理器和数字信号的解码器之间。
2.2 并行接口
2.2.1 RGB接口
RGB颜色是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。具有高速度、低功耗和品种多等特点。正点原子的alpha开发板用的就是这种RGB接口的LCD。
2.2.2 MCU接口
使用8080/6800总线,目前最常用的连接模式,一般是80系统(68系统已经不存在了)。数据位传输有8位、9位、16位和18位。连线分为:CS/、RS(寄存器选择)、RD/、WR/,再就是数据线了。优点是:控制简单方便,无需时钟和同步信号。缺点是:要耗费GRAM,所以难以做到大屏(QVGA以上)。
2.3 高速差分接口
Tips:这里的高速差分接口也是串行接口。
2.3.1 LVDS接口
LVDS,即Low Voltage Differential Signaling,是一种低压差分信号技术接口。克服以TTL电平方式传输宽带高码率数据时功耗大、EMI电磁干扰大等缺点而研制的一种数字视频信号传输方式。LVDS输出接口利用非常低的电压摆幅(约350mV)在两条PCB走线或一对平衡电缆上通过差分进行数据的传输,即低压差分信号传输。采用LVDS输出接口,可以使得信号在差分PCB线或平衡电缆上以几百Mbit/s的速率传输,由于采用低压和低电流驱动方式,所以才实现了低噪声和低功耗。
2.3.2 EDP接口
EDP接口是一种基于DisplayPort架构和协议的一种全数字化接口,可以用较简单的连接器以及较少的引脚来传递高分辨率信号,且能够实现多数据同时传输,所以它的传输速率也要远高于LVDS。EDP接口的优势相当明显,特别是在高清屏中。
2.3.3 MIPI接口
Mobile Industry Processor Interface
,即移动产业处理器接口。是MIPI联盟发起的为移动应用处理器制定的开放标准和一个规范。主要是手机内部的接口(摄像头、显示屏接口、射频/基带接口)等标准化,从而减少手机内部接口的复杂程度及增加设计的灵活性。对于LCD,MIPI接口可以分为3类:
- MIPI-DBI (Display Bus Interface)
(1)既然是Bus(总线),就是既能发送数据,也能发送命令,常用的8080接口就属于DBI接口。
(2)Type B (i-80 system), 8-/9-/16-/18-/24-bit bus
(3)Type C (Serial data transfer interface, 3/4-line SPI)
- MIPI-DPI (Display Pixel Interface)
(1)Pixel(像素),强调的是操作单个像素,在MPU上的LCD控制器就是这种接口
(2)Supports 24 bit/pixel (R: 8-bit, G: 8-bit, B: 8-bit)
(3)Supports 18 bit/pixel (R: 6-bit, G: 6-bit, B: 6-bit)
(4)Supports 16 bit/pixel (R: 5-bit, G: 6-bit, B: 5-bit)
- MIPI-DSI (Display Serial Interface)
(1)Serial,相比于DBI、DPI需要使用很多接口线,DSI需要的接口线大为减少
(2)Supports one data lane/maximum speed 500Mbps
(3)Supports DSI version 1.01
(4)Supports D-PHY version 1.00

3. 怎么把颜色发给LCD?
3.1 Framebuffer(也叫显存)
假设每个像素的颜色用16位来表示,那么一个LCD的所有像素点假设有xres * y res个,需要的内存为:xres * yres * 16 / 8,也就是要设置所有像素的颜色,需要这么大小的内存。这块内存就被称为framebuffer。
Framebuffer中每块数据对应一个像素每块数据的大小可能是16位、32位,这跟LCD上像素的颜色格式有关。设置好LCD硬件后,只需要把颜色数据写入Framebuffer即可

3.2 统一的LCD硬件模型
有了Framebuffer,那么就会有下面的问题:
- Framebuffer在哪里?
- 谁把Framebuffer中的数据发给LCD?
统一的LCD硬件模型:

参考资料: