驱动芯片选型:ILI9341、ST7789、SSD1306 怎么挑?
做 LCD 驱动,第一步就是选芯片。市面上常见的驱动 IC 就那么几款,但每款的脾气都不一样。我最早做项目时,觉得随便选一个能点亮屏幕就行,结果后来刷新率上不去,查了半天才发现是驱动 IC 的接口带宽卡了脖子。所以这一节,咱们把三款主流芯片掰开揉碎了聊。
三款芯片的定位差异
先看一张对比表,心里有个底:
| 芯片型号 | 分辨率上限 | 接口类型 | 典型应用 | 我个人的偏好场景 |
|---|---|---|---|---|
| ILI9341 | 320×240 (QVGA) | SPI / 8/16-bit 并口 | 2.8~3.5寸 TFT 彩屏 | 需要高刷新率动画时,我必用并口 |
| ST7789 | 240×240 / 320×320 | SPI / 并口 | 1.3~1.8寸小圆屏、方形屏 | 做智能手表表盘时,它很省引脚 |
| SSD1306 | 128×64 / 128×32 | I²C / SPI | 0.96寸 OLED 单色屏 | 低功耗待机界面,我首选它 |
说白了,ILI9341 是“全能型选手”,ST7789 是“小尺寸高颜值”,SSD1306 则是“省电小钢炮”。选型时先看你的屏幕尺寸和颜色需求,再看 MCU 还剩多少引脚。
数据手册怎么看?我教你抓重点
很多新手拿到几百页的 datasheet 就懵了。其实不用全看,抓住这几个章节就行:
- Chapter 1: Features & Block Diagram —— 先看芯片支持什么接口、最大分辨率、GRAM 大小。我习惯把 Block Diagram 截下来,画清楚 MCU 到 GRAM 再到 LCD 面板的数据流。
- Chapter 2: Pin Description —— 重点关注电源引脚(VCC、IOVCC)、复位引脚(RESX)、数据/命令选择脚(DC/RS)。有一次我忘了给 IOVCC 供电,屏幕死活不亮,查了半小时才发现。
- Chapter 8: Command Table —— 这是核心。所有初始化序列都从这里来。比如 ILI9341 的 0x36(Memory Access Control)、0x3A(Pixel Format Set)。
- Chapter 9: Timing Characteristics —— 刷新率优化的关键。看 SPI 最高能跑多少 MHz,并口的最小读写周期是多少。
关键寄存器配置:以 ILI9341 为例
配置驱动 IC,说白了就是往寄存器里写值。但每个寄存器都有坑。我挑几个最关键的说说:
1. Memory Access Control (0x36)
这个寄存器控制屏幕的扫描方向、RGB/BGR 顺序。你写出来的字是正的还是倒的,全看它。我遇到过客户说“屏幕显示镜像了”,其实就是这里没配对。
// ILI9341 初始化片段:设置扫描方向为横屏
void ILI9341_Init(void) {
// 0x36: MY=0, MX=1, MV=1, ML=0, BGR=1
// 二进制: 0110 1000 -> 0x68
WriteCmd(0x36);
WriteData(0x68);
// 0x3A: 16位色 (RGB565)
WriteCmd(0x3A);
WriteData(0x55);
}
2. Pixel Format Set (0x3A)
设置颜色深度。常用的是 0x55(16位色,RGB565)和 0x66(18位色,RGB666)。注意:如果你用 16 位色,MCU 每次传 2 个字节;用 18 位色,每次要传 3 个字节。带宽占用差 50%。
3. Frame Rate Control (0xB1)
这个寄存器直接决定刷新率。ILI9341 内部有一个振荡器,通过分频设置帧率。我一般设成 0xB1 = 0x00 0x1B,对应约 60Hz。设太高了屏幕会闪烁,设太低了拖影严重。
ST7789 与 SSD1306 的特殊之处
ST7789 的寄存器基本和 ILI9341 兼容,但多了几个针对小尺寸屏的优化。比如 0x21(Inversion On)可以让颜色更鲜艳。我做圆形表盘时,发现它的 0x36 寄存器里有一个 MADCTL 位专门控制“部分显示模式”,用来实现圆形裁剪效果。
SSD1306 就简单多了。它只有 128×64 像素,每个像素只有 1 bit(亮或不亮)。它的关键寄存器是 0x81(对比度设置)和 0x8D(电荷泵使能)。我踩过一个坑:0x8D 如果不写 0x14,屏幕就是黑的,因为内部升压电路没启动。
// SSD1306 初始化:开启电荷泵
WriteCmd(0x8D);
WriteData(0x14); // 使能内部 DC-DC 转换器
WriteCmd(0xAF); // 开启显示
一张图看懂选型逻辑
下面这张 SVG 图,是我自己总结的选型决策流程。每次做新项目,我都会走一遍这个流程:
避坑指南:我踩过的三个雷
- 寄存器地址不通用: 不同厂家(比如 ILI9341 和 ST7789)虽然命令码很像,但个别寄存器地址不同。我曾经直接把 ILI9341 的初始化代码搬到 ST7789 上,结果屏幕花屏。后来老老实实对着 datasheet 逐条核对。
- 复位时序: 很多驱动 IC 要求 RESX 引脚拉低至少 10μs 再拉高。我见过有人用 GPIO 直接拉低后立刻拉高,芯片根本没复位成功。建议在复位后加一个 5ms 的延时。
- GRAM 写入方向: 默认的写入方向是从左上角到右下角。如果你用 DMA 刷屏,一定要确认 0x36 寄存器里的扫描方向和你期望的一致,否则图像是反的。
核心总结:
- ILI9341 适合大屏、高刷新率场景,并口是性能首选
- ST7789 适合小尺寸、圆形屏,SPI 模式省引脚
- SSD1306 适合低功耗、单色显示,I²C 模式最省资源
- 数据手册重点看 Command Table 和 Timing Characteristics
- 关键寄存器:0x36(方向)、0x3A(色深)、0xB1(帧率)