一、LCD驱动概述:从原理到实战

各位同学好,我是老张。做嵌入式LCD驱动这块,掐指一算也有十来年了。今天咱们开始第一课,先不急着敲代码,把LCD的底裤扒清楚——它到底怎么亮的?我们驱动工程师在跟谁打交道?

你想想看,一个LCD屏,说白了就是一堆像素点的矩阵。每个像素点能显示红绿蓝三种颜色。驱动芯片的任务,就是告诉每个像素点:「你,显示红色;你,显示蓝色」。就这么简单。

但实际做起来,坑可不少。我刚开始做驱动时,就遇到过屏幕死活不亮,查了三天发现是初始化时序不对。嗯,这些坑咱们后面都会讲到。

核心要点:LCD驱动 = 控制像素点阵 + 管理显示时序 + 处理数据接口

1.1 LCD工作原理:像素是怎么亮起来的?

LCD本身不发光,它靠背光模组照亮。每个像素点就像一个「小百叶窗」,通过电压控制液晶分子的扭转角度,来决定透光多少。

具体来说:

  • 背光层:提供白色光源,通常是LED灯条
  • 偏光片:两层,夹着液晶层
  • 液晶层:电压改变液晶分子排列,控制透光率
  • 彩色滤光片:每个像素分成R/G/B三个子像素

我习惯把LCD想象成一个「水龙头矩阵」。每个子像素就是一个水龙头,电压是把手,液晶是阀门。电压不同,阀门开度不同,水流(光)量就不同。

个人经验:调试时如果屏幕全白或全黑,先别怀疑驱动代码。拿手电筒照一下屏幕背面——如果能看见图像,说明背光坏了;如果看不见,那才是驱动或屏本身的问题。

1.2 驱动接口类型:你该选哪种?

做项目选型时,接口类型是第一个要拍板的。目前主流的有三种:RGB、MCU、SPI。我分别说说它们的脾气。

接口类型 带宽 是否需要GRAM 典型应用 引脚数
RGB 高(并行) 不需要(直接刷新) 大屏、高分辨率 20~30
MCU(8080/6800) 中(并行) 需要(自带显存) 小屏、低功耗 8~16
SPI 低(串行) 需要 超小屏、低成本 4~6

RGB接口

说白了就是「直连」。主控直接把像素数据通过并行总线发给屏幕。没有中间商赚差价,速度最快。但缺点也很明显——需要主控持续刷新,占用大量引脚和内存带宽。

我记得有一次做7寸屏项目,用的RGB接口。主控是STM32F429,光LCD的DMA就占了两个通道。调试时稍微没配好,屏幕就出现撕裂感。后来加了双缓冲才搞定。

MCU接口(8080/6800)

这种接口的屏自带GRAM(显存)。主控把数据写到GRAM里,屏自己负责刷新。好处是主控可以「写完就跑」,省心。坏处是GRAM大小限制了分辨率,而且写入速度受限于总线频率。

我建议小尺寸(3.5寸以下)用MCU接口,开发简单,代码量也少。

SPI接口

最省引脚的方式。4根线:SCK、MOSI、MISO、CS。但速度也是最慢的,适合128x64这种小屏,或者做OLED屏。

嗯,这里要注意:SPI屏的初始化时序特别讲究。我曾经遇到过一款国产OLED屏,数据手册写的初始化序列少发了一条命令,结果屏幕显示全是花的。后来用逻辑分析仪抓了原厂demo板的波形才找到问题。

避坑指南:选型时别只看接口类型,还要看屏的驱动电压(3.3V还是1.8V?)、背光电压、以及主控的GPIO驱动能力。我曾经因为GPIO驱动电流不够,导致RGB接口的时钟信号变形,屏幕一直闪。

1.3 驱动芯片简介:那些常见的「屏管家」

每个LCD屏背后都有一个驱动芯片,它负责接收主控的命令和数据,然后控制每个像素点。常见的驱动芯片厂商有:

  • ILI(Ilitek):ILI9341、ILI9488,市场占有率最高,资料最全
  • ST(Sitronix):ST7735、ST7789,小尺寸屏常用
  • NT(Novatek):NT35510,高清屏常见
  • HX(Himax):HX8357,性价比高

这些芯片虽然型号不同,但核心功能大同小异:

  1. 初始化配置:设置显示方向、扫描方式、颜色格式等
  2. 显存管理:读写GRAM,支持窗口裁剪
  3. 时序控制:生成行场同步信号(RGB接口)或自刷新(MCU接口)
  4. 伽马校正:调整亮度和对比度曲线

我个人习惯,拿到一个新屏,第一件事就是看它的数据手册。重点关注初始化命令序列和时序参数。很多坑都藏在这些细节里。

1.4 知识体系总览

下面这张图,是我画的本章节的知识结构。你可以把它当作后续学习的「地图」。

LCD驱动知识体系(第1章) LCD驱动概述 工作原理 背光 + 偏光片 液晶 + 彩色滤光片 驱动接口类型 RGB(并行高速) MCU(自带显存) SPI(串行省引脚) 驱动芯片简介 ILI / ST / NT / HX 初始化 / 显存 / 时序 核心:理解像素控制 + 接口选型 + 芯片初始化 后续章节将逐行分析驱动源码

这张图把本章的三个核心模块串起来了。你仔细看,其实所有LCD驱动都绕不开这三件事:怎么控制像素、用什么接口传数据、驱动芯片怎么配置。后面的课程,我们会逐行分析源码,把这些概念落地到代码里。

学习建议:如果你手头有开发板,建议先找一块带LCD的板子,对照着数据手册看。理论结合实践,学得最快。我当年就是一边看ILI9341的手册,一边用逻辑分析仪抓波形,才真正搞懂驱动时序的。