3. 常见LCD驱动IC概述:ILI9341、ST7789、ST7735等常用驱动芯片特性对比

在单片机驱动TFT彩屏的实践中,驱动IC(Driver IC)是决定显示效果、接口协议和开发复杂度的核心器件。市面上常见的驱动芯片包括 ILI9341、ST7789、ST7735 等,它们虽然都支持SPI接口,但在分辨率、色彩深度、GRAM大小、初始化流程等方面存在显著差异。本章将系统对比这三款主流驱动IC的特性,帮助你在选型和调试时快速定位关键参数。

选型提示: 驱动IC的型号通常直接印在PCB背面的FPC排线或玻璃边缘的COG(Chip On Glass)封装上。如果屏幕没有标注,可以通过读取LCD的ID寄存器(如0xD3、0x04命令)来识别。

3.1 核心参数对比表

下表从分辨率、色彩深度、GRAM容量、SPI模式支持、典型应用尺寸等维度,对ILI9341、ST7789、ST7735进行横向对比:

参数项 ILI9341 ST7789 ST7735
最大分辨率 240×320 (QVGA) 240×320 (QVGA)
或 240×240 (方形)
132×162
或 128×160
色彩深度 16位/18位 RGB 16位/18位 RGB 12位/16位/18位 RGB
GRAM大小 172,800 字节 (240×320×18b) 172,800 字节 (240×320×18b) 42,768 字节 (132×162×16b)
SPI模式 SPI 4线 (标准)
支持SPI 3线 (9位)
SPI 4线 (标准)
支持Dual/Quad SPI
SPI 4线 (标准)
最大SPI时钟 ~10 MHz (典型) ~15 MHz (典型) ~15 MHz (典型)
典型屏幕尺寸 2.4" ~ 3.2" 1.3" ~ 2.0" 0.96" ~ 1.8"
驱动电压 I/O: 1.65V~3.3V
Core: 2.5V~3.3V
I/O: 1.65V~3.3V
Core: 2.5V~3.3V
I/O: 1.65V~3.3V
Core: 2.5V~3.3V
常见初始化命令数 ~30条 ~25条 ~20条
内置电荷泵 是 (生成VCOM/VGH/VGL) 是 是
关键差异: ILI9341 是“全功能型”,适合大尺寸QVGA屏;ST7789 在保持QVGA分辨率的同时支持更小的封装和更高的SPI时钟,且支持Dual/Quad SPI加速;ST7735 是“入门经济型”,分辨率较低,但初始化简单,适合小尺寸低成本应用。

3.2 驱动IC内部架构对比

虽然三款芯片的引脚定义和寄存器地址不同,但它们的内部架构遵循相似的模块化设计。下图以ILI9341为代表,展示典型LCD驱动IC的软件架构层次:

LCD驱动IC软件架构层次图(以ILI9341为例) MCU SPI 接口层 (4线: CS/DC/SCLK/SDA) 命令解析器 + GRAM 读写控制 像素数据路径 (颜色格式转换 / 窗口裁剪 / 旋转) GRAM 帧缓冲 + 源极/栅极驱动输出 (到TFT面板) 注:ST7789 在命令解析层增加了 Dual/Quad SPI 加速路径;ST7735 的 GRAM 容量较小,但架构层次一致。

3.3 初始化流程差异

三款驱动IC的初始化流程均遵循“复位 → 退出睡眠 → 设置像素格式 → 设置显示方向 → 设置显示窗口 → 开启显示”的通用步骤,但具体命令参数和寄存器地址不同。下表列出初始化中的关键差异点:

初始化步骤 ILI9341 典型命令 ST7789 典型命令 ST7735 典型命令
软件复位 0x01 0x01 0x01
退出睡眠 0x11 (需等待120ms) 0x11 (需等待120ms) 0x11 (需等待120ms)
像素格式设置 0x3A → 0x55 (16位)
0x3A → 0x66 (18位)
0x3A → 0x55 (16位)
0x3A → 0x66 (18位)
0x3A → 0x05 (16位)
0x3A → 0x03 (12位)
内存访问控制 0x36 (MV/MX/MY等位) 0x36 (MV/MX/MY等位) 0x36 (MV/MX/MY等位)
列/页地址设置 0x2A / 0x2B (4字节参数) 0x2A / 0x2B (4字节参数) 0x2A / 0x2B (4字节参数)
开启显示 0x29 0x29 0x29
特殊初始化序列 需设置帧率控制(0xB1)、电源控制(0xC0~0xC8)等 需设置帧率控制(0xB1)、伽马校正(0xE0)等 需设置帧率控制(0xB1)、显示模式(0xB4)等
常见陷阱: ST7735 的像素格式命令 0x3A 参数值与 ILI9341/ST7789 不同。ST7735 使用 0x05 表示 16位 RGB565,而 ILI9341 使用 0x55。如果误用参数,屏幕会显示颜色错乱或完全不显示。

3.4 SPI时序与命令/数据切换

三款驱动IC均使用 DC(Data/Command)引脚 来区分传输的是命令还是数据。SPI时序的基本要求如下:

  • DC=0:发送命令字节(8位)
  • DC=1:发送数据字节(8位或16位,取决于像素格式)
  • CS:片选,低电平有效,每次传输前拉低,传输完成后拉高
  • SCLK:时钟,空闲时通常为低电平(CPOL=0),数据在上升沿采样(CPHA=0)

以下是一个典型的SPI写命令+写数据代码片段(以STM32 HAL库为例):

// SPI 写命令(DC=0)
void LCD_WriteCmd(uint8_t cmd) {
    HAL_GPIO_WritePin(DC_GPIO_Port, DC_Pin, GPIO_PIN_RESET); // DC=0
    HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_RESET); // CS=0
    HAL_SPI_Transmit(&hspi1, &cmd, 1, HAL_MAX_DELAY);
    HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_SET);   // CS=1
}

// SPI 写数据(DC=1)
void LCD_WriteData(uint8_t data) {
    HAL_GPIO_WritePin(DC_GPIO_Port, DC_Pin, GPIO_PIN_SET);   // DC=1
    HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_RESET); // CS=0
    HAL_SPI_Transmit(&hspi1, &data, 1, HAL_MAX_DELAY);
    HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_SET);   // CS=1
}
性能提示: 对于ILI9341和ST7789,如果MCU支持DMA,建议将像素数据通过DMA+SPI连续发送,避免CPU逐字节干预。ST7789的Dual SPI模式可将数据吞吐量提升一倍,但需要MCU支持半双工双向SPI。

3.5 选型决策流程

下图帮助你在项目初期快速选择最合适的驱动IC:

LCD驱动IC选型决策流程图 项目需求分析 所需分辨率 > 160×128 ? 选 ST7735 需要 QVGA (240×320) 屏幕尺寸 > 2.0" ? 选 ILI9341 选 ST7789

3.6 总结与调试建议

  • ILI9341:功能最全,适合2.4寸以上大屏,初始化命令较多,建议使用现成的初始化序列库。
  • ST7789:性能均衡,支持Dual/Quad SPI加速,适合1.3~2.0寸小屏,注意其像素格式参数与ILI9341兼容。
  • ST7735:入门首选,分辨率低但成本低,初始化简单,适合0.96~1.8寸屏,注意其像素格式参数的特殊性。
调试技巧: 如果屏幕初始化后全白或全黑,首先检查复位时序(RST引脚低电平至少10ms)和退出睡眠后的等待时间(120ms)。如果颜色异常,优先检查0x3A命令的像素格式参数是否正确。