SPI LCD 显示屏使用指南¶
1. 概述¶
本指南描述如何在 iford 平台上配置 WL-28X0002 LCD 显示屏驱动,实现屏幕点亮。
1.1 显示屏参数¶
- 驱动 IC: ST7789V
- 屏幕型号: WL-28X0002-B-A20
- 分辨率: 240 x 320 像素
- 颜色格式: RGB565
- 接口: 4线 SPI (56MHz)
1.2 屏幕接口定义¶
WL-28X0002-B-A20 屏幕通过 10 针 FPC 接口与 Comake D2 开发板连接,接口引脚定义如下:
| 引脚序号 | 信号名称 | 功能描述 | 连接到开发板 |
|---|---|---|---|
| 1 | GND | 地线,提供参考电位 | GND |
| 2 | RS / DCX | 寄存器选择(数据/命令选择) | PAD_MSPI_CK |
| 3 | /CS | 片选信号(低电平有效) | PAD_SPI0_CZ |
| 4 | SCL / SCLK | 串行时钟输入 | PAD_SPI0_CK |
| 5 | SDA / MOSI | 串行数据输入 | PAD_SPI0_DI |
| 6 | RESET | 复位信号(低电平有效) | PAD_MSPI_CK |
| 7 | VCC | 逻辑电源(1.8V 或 3.3V) | 3.3V_STD |
| 8 | GND | 地线 | GND |
| 9 | A | LED 背光阳极(正极) | 3.3V_STD |
| 10 | K | LED 背光阴极(负极) | 3.3V_STD |
信号说明:
- RS/DCX: 高电平时传输显示数据,低电平时传输命令
- /CS: 低电平时使能屏幕通信,高电平时屏幕忽略输入信号
- SCL/SCLK: SPI 时钟信号,用于同步数据传输
- SDA/MOSI: SPI 主机输出数据线
- RESET: 低电平时复位屏幕寄存器,恢复默认状态
- VCC: 为屏幕逻辑电路供电(电压根据屏幕型号可能为 1.8V 或 3.3V)
- A/K: LED 背光电源引脚,用于控制屏幕背光
2. 驱动配置¶
2.1 内核配置¶
FBTFT 驱动位于 kernel/drivers/staging/fbtft/ 目录下。要启用 ST7789V LCD 支持,需要在内核 defconfig 中添加以下配置(例如 arch/arm/configs/iford_ssc029d_s01a_d2_full_defconfig):
# FBTFT 框架(编译进内核)
CONFIG_FB_TFT=y
# ST7789V 驱动(编译进内核)
CONFIG_FB_TFT_ST7789V=y
2.2 设备树配置¶
2.2.1 ST7789V 设备节点¶
在 arch/arm/boot/dts/iford.dtsi 中添加:
#if IS_ENABLED(CONFIG_SSTAR_QSPI)
qspi: spi@0x1f201A00 {
compatible = "sstar,qspi";
reg = <0x1F201A00 0x200>, <0x1F201C00 0x200>;
clocks = <&CLK_fsp_qspi>, <&CLK_spi_nonpm>, <&CLK_spi_synth_pll>;
qspi-group = <3>;
#address-cells = <1>;
#size-cells = <0>;
dma-write-en;
#dma-read-en;
width_ctrl = <0>;
cs-mode = <2>;
cs-num = <1>;
// cs-ext = <PAD_FUART_TX>;
status = "ok";
spi-cpol;
wl28x0002@0 {
compatible = "sitronix,st7789v";
reg = <0>;
status = "ok";
spi-max-frequency = <54000000>;
rotate = <0>;
fps = <20>;
buswidth = <8>;
spi-tx-bus-width = <1>;
spi-rx-bus-width = <1>;
dc-gpios = <&gpio PAD_MSPI_CK 0>;
reset-gpios = <&gpio PAD_MSPI_DI 1>;
txbuflen = <4096>;
debug = <1>;
};
};
#endif
2.3 引脚配置¶
使用QSPI时,引脚默认开启,不需要配置padmux。
3. 系统架构¶

图:SPI LCD 系统架构,显示从用户应用到LCD硬件的数据流和连接关系
4. 硬件连接示例¶
以下示例展示了 WL-28X0002-B-A20 屏幕与 Comake D2 开发板的实际连接关系:

图:WL-28X0002-B-A20 屏幕与 SSC035A-S01A-S 开发板的硬件连接示例
以下为 WL-28X0002-B-A20 屏幕 10 针 SPI 接口的引脚定义图:

图:WL-28X0002-B-A20 屏幕 10 针 SPI 接口引脚定义图
连接要点:
- 屏幕通过 10 针 FPC 接口连接到开发板
- SPI 信号(SCL、SDA、/CS)连接如图示例
- 控制信号(RS、RESET)通过 GPIO 引脚控制
- 电源和背光信号通过相应的电源网络供电
5. 初始化序列¶
驱动使用以下序列初始化 ST7789V(来自 fb_st7789v.c:init_display()):
- 硬件复位
- 初始化 tearing effect line(如果配置了的话)
- 退出睡眠模式 (0x11) - 120ms 延时
- 设置像素格式为 RGB565 (0x3A, 0x05)
-
设置 porch control (0xB2):
- HSD20_IPS 屏幕:0x05, 0x05, 0x00, 0x33, 0x33
- 其他屏幕:0x08, 0x08, 0x00, 0x22, 0x22
-
门控 (0xB7):
- HSD20_IPS 屏幕:0x75 (VGH=13.26V, VGL=-10.43V)
- 其他屏幕:0x35
-
使能 VDV 和 VRH 命令 (0xC2):0x01, 0xFF
-
设置 VRH (0xC3):
- HSD20_IPS 屏幕:0x13
- 其他屏幕:0x0B
-
设置 VDV (0xC4):0x20 (VDV=0V)
-
设置 VCOM (0xBB):
- HSD20_IPS 屏幕:0x22 (VCOM=0.9V)
- 其他屏幕:0x20
-
设置 VCOM offset (0xC5):0x20 (VCOM offset=0V)
-
电源控制 (0xD0):0xA4, 0xA1
- AVDD = 6.8V
- AVCL = -4.8V
- VDS = 2.3V
-
TE line 输出(如果配置了):0x35, 0x00(关闭)
- 打开显示 (0x29)
- 使能显示反转 (0x21) 对于 HSD20_IPS 屏幕
5.1 关键命令¶
| 命令 | 十六进制 | 描述 |
|---|---|---|
| 0x11 | SLPOUT | 退出睡眠模式 |
| 0x29 | DISPON | 打开显示 |
| 0x21 | INVON | 使能显示反转 |
| 0x2C | RAMWR | 内存写入 |
| 0x35 | TEEON | Tearing effect line 开 |
| 0x3A | COLMOD | 像素格式设置(16位 RGB565) |
| 0x36 | MADCTL | 内存访问控制(在 set_var() 中设置) |
| 0xB2 | PORCTRL | Porch 设置 |
| 0xB7 | GCTRL | 门控 |
| 0xBB | VCOMS | VCOM 设置 |
| 0xC2 | VDVVRHEN | 使能 VDV 和 VRH 命令 |
| 0xC3 | VRHS | VRH 设置 |
| 0xC4 | VDVS | VDV 设置 |
| 0xC5 | VCMOFSET | VCOM offset 设置 |
| 0xD0 | PWCTRL1 | 电源控制 1 |
| 0xE0 | PVGAMCTRL | 正电压 gamma 控制 |
| 0xE1 | NVGAMCTRL | 负电压 gamma 控制 |
6. 编译和加载¶
6.1 编译内核¶
# 进入内核目录
cd kernel
# 选择 defconfig
make iford_ssc029d_s01a_d2_full_defconfig
# 编译内核
make -j8
6.2 加载驱动模块¶
编进内核后,启动自动加载
6.3 验证驱动加载¶
# 检查帧缓冲设备
ls -l /dev/fb*
# 查看驱动信息
cat /sys/class/graphics/fb0/name
cat /sys/class/graphics/fb0/modes
7. 测试屏幕¶
sample code代码中包含 ST7789V LCD 的帧缓冲测试程序:
源代码:sdk/verify/sample_code/source/iford/disp/spi_demo/spi_demo.c
编译:
cd sdk/verify/sample_code/
make clean && make source/iford/disp/spi_demo
生成目标在./out路径下
在目标设备上运行:
# 运行测试程序
./prog_disp_spi_demo
测试程序将执行以下操作:
在SPI屏幕上循环显示红绿蓝彩条图案
程序正常运行后,SPI屏幕会循环显示彩条图案:
-
屏幕分为三等分,分别显示不同颜色
-
buffer 0:左侧红色、中间绿色、右侧蓝色
-
buffer 1:左侧蓝色、中间红色、右侧绿色
-
每3秒在两种图案间切换
8. 调试信息¶
8.1 检查内核日志¶
# 查看驱动初始化
dmesg | grep -i st7789v
# 查看 FBTFT 日志
dmesg | grep -i fbtft
8.2 常见问题¶
屏幕不显示:
- 检查设备树配置是否正确
- 验证 DC 和 RESET 引脚配置
- 确认 SPI 时钟频率(尝试 16MHz)
- 检查内核错误日志
颜色异常:
- 确认 BGR 模式配置
- 检查像素格式设置