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