瑞芯微RK3568适配1.8英寸ST7735S SPI屏幕教程

原创 2025-11-03 17:12:00 rk3568

在工业 HMI、便携检测等场景中,“小屏大作”已成为刚需。传统方案往往存在性能不足或扩展复杂的问题,而CA888亚洲城集团 OK3568-C 开发板(搭载 RK3568 四核 A55 2.0GHz 处理器)凭借原生 3 路 SPI、84 路 GPIO 及开源 Linux 5.10 SDK,让“点亮一块 SPI 屏幕”如同“喝杯咖啡般轻松便捷”。本文以 1.8 英寸 ST7735S 彩屏为例,手把手带您从 0 到 1 完成适配,全程仅需 15 分钟。

1. 硬件准备
2. 引脚连接
3. 设备树配置
4. 驱动开发
5. 编译测试

一、OK3568-C 开发板亮点速览

处理器性能
RK3568 四核 Cortex-A55 架构,搭配 Mali-G52-2EE GPU,1TOPS NPU,主频高达 2.0GHz
支持 RGB、LVDS、MIPI DSI、HDMI、eDP,并可扩展软件 SPI/QSPI 屏幕
外设接口
3 路 SPI(最高速率 50MHz)、6 路 UART、2 路 CAN、2 路千兆以太网、PCIe 3.0
系统支持
Linux4.19/5.10、Android11、Ubuntu20.04/22.04、Debian11、OpenHarmony4.1等
可靠性认证
通过 CE/FCC/ROHS 认证,工业级宽温设计(-40℃~+85℃)

二、硬件基础信息

1、屏幕参数

  • 驱动芯片:ST7735S
  • 分辨率:128×160,支持 26 万色、65K 色(16-bit RGB565 格式)
  • 接口类型:4 线 SPI(包含 CS/DC/RES/SCL/SDA 引脚),背光 BL 独立控制
  • 工作电压:3.3V(VCC引脚,不可接5V)
  • 通信速率:最高支持 50MHz SPI 时钟
1.8英寸ST7735S屏幕接口示意图

图1:1.8英寸ST7735S RGB TFT LCD屏幕接口引脚定义

2、硬件连接方案

屏幕引脚与 OK3568 的连接关系需严格对应,确保 SPI 通信与 GPIO 控制正常,连接表如下:

屏幕引脚 连接目标(OK3568) 功能说明 注意事项
VCC 3.3V 电源 为屏幕提供工作电压 必须接3.3V,不可接5V,避免烧毁屏幕
GND GND 电源共地,确保电压稳定性 必须可靠接地,否则可能出现显示异常
BL 3.3V 电源 屏幕背光控制 软件未配置时直接接3.3V实现背光常亮
CS spi0_cs0 SPI0 片选0引脚 电平时选中当前SPI从设备
DC GPIO3_A2 数据/命令控制引脚 高电平传输数据,低电平传输命令
RES GPIO3_B3 屏幕复位引脚 上电后需拉低复位,复位完成后拉高
SCL spi0_clk SPI0 时钟引脚 提供SPI同步通信时钟,最高50MHz
SDA spi0_mosi SPI0 主发从收引脚 传输SPI命令与显示数据
重要操作提醒
  1. 接线前必须断开 OK3568 开发板电源,严禁带电接线!
  2. 接线完成后需反复核对引脚对应关系,确认无误后再上电
  3. VCC引脚务必接3.3V,接5V会直接烧毁ST7735S芯片
  4. 所有GND引脚需可靠连接,避免出现供电不稳导致的显示异常

三、设备树配置

设备树用于向内核描述 SPI0 与屏幕的硬件资源,需在 OK3568 设备树中添加以下配置:

&spi0 {
    pinctrl-names = "default", "high_speed";
    pinctrl-0 = <&spi0m1_cs0 &spi0m1_pins>;
    pinctrl-1 = <&spi0m1_cs0 &spi0m1_pins_hs>;
    status = "okay";

    spi@0 {
        compatible = "sitronix,st7735r";
        reg = <0>;
        dc-gpios =  <&gpio3 RK_PA2 GPIO_ACTIVE_HIGH>;
        reset-gpios = <&gpio3 RK_PB3 GPIO_ACTIVE_HIGH>;
        spi-max-frequency = <50000000>;
        rotation = <0>;
    };
}
配置关键说明
  • compatible:必须设置为 "sitronix,st7735r",与内核驱动的兼容性字段匹配,ST7735S兼容ST7735R驱动
  • dc-gpios/reset-gpios:RK_PA2对应硬件连接的GPIO3_A2,RK_PB3对应GPIO3_B3,需与实际接线一致
  • spi-max-frequency:设置为50000000(50MHz),不可超过ST7735S支持的最大速率
  • rotation:可根据实际需求设置旋转角度,支持0°、90°、180°、270°四个方向
  • bgr:若屏幕显示颜色异常(如红色变蓝色),可添加或删除该属性调整颜色格式

四、内核驱动配置与开发

需开启内核 Framebuffer 相关配置,并添加 ST7735S 驱动代码,实现屏幕初始化与显示控制。推荐使用内核自带的 FB_TFT 框架,无需从零开发驱动。

1、内核配置使能

通过make menuconfig进入内核配置界面,开启以下选项(路径:Device Drivers → Graphics support → Frame buffer Devices):

  • CONFIG_FB_TFT=y:使能 FB_TFT 框架(基础显示框架,必须开启)
  • CONFIG_FB_TFT_ST7735R=y:使能 ST7735R 驱动(兼容 ST7735S,必须开启)
  • CONFIG_DRM_TINYDRM=y:使能 TinyDRM 框架(可选,用于DRM显示架构)
  • CONFIG_TINYDRM_ST7735R=y:使能 TinyDRM 下的 ST7735R 驱动(可选)
配置注意事项
  • 配置完成后需保存配置文件(.config),避免下次编译丢失配置
  • 重新编译内核与设备树:make -j$(nproc) zImage dtbs modules(根据CPU核心数调整-j参数)
  • 编译完成后生成的内核镜像在arch/arm64/boot/zImage,设备树在arch/arm64/boot/dts/rockchip/目录下
  • 需将新编译的内核镜像、设备树文件烧录到开发板,确保配置生效

2、完整驱动代码(fb_st7735r.c)

以下是基于 Framebuffer 框架的 ST7735S 完整驱动代码,可直接放入内核源码目录drivers/video/fbdev/fbtft/下,或使用内核自带驱动(Linux 5.10 已内置该驱动):

// SPDX-License-Identifier: GPL-2.0+
/*
 * FB driver for the ST7735R LCD Controller
 *
 * Copyright (C) 2013 Noralf Tronnes
 */

#include
#include
#include
#include
驱动代码说明
  • 该驱动基于内核 FB_TFT 框架开发,无需修改内核核心代码,只需编译进内核即可
  • 默认支持 128×160 分辨率,16-bit RGB565 颜色格式,最高 50MHz SPI 速率
  • 包含完整的屏幕初始化命令序列,针对 ST7735S 进行了优化适配
  • 支持 0°/90°/180°/270° 屏幕旋转,可通过设备树 rotation 属性配置
  • 包含 Gamma 校准功能,可通过内核参数调整显示色彩效果
  • 自动处理 ST7735S 的像素偏移问题,确保显示区域准确

3、应用层测试程序(test2.c)

用于验证屏幕显示功能,通过操作 Framebuffer 设备填充指定颜色。

#include
#include
#include
#include
#include
#include
#include
#include
#include

int main(int argc, char *argv[]) {
    char *endptr;
    uint16_t color = 0xFFFF;  // Default color (white)
    long int num = strtol(argv[1], &endptr, 10);  // Number of rows to fill

    // Check if arguments are passed correctly
    if (argc < 3) {
        printf("Usage: %s \n", argv[0]);
        return 1;
    }

    // Parse color based on argv[2]
    if (strcmp(argv[2], "red") == 0) {
        color = 0xF800;  // Red: 11111 000000 00000
    } else if (strcmp(argv[2], "green") == 0) {
        color = 0x07E0;  // Green: 00000 111111 00000
    } else if (strcmp(argv[2], "blue") == 0) {
        color = 0x001F;  // Blue: 00000 000000 11111
    } else if (strcmp(argv[2], "white") == 0) {
        color = 0xFFFF;  // White: 111111 111111 11111
    } else if (strcmp(argv[2], "black") == 0) {
        color = 0x0000;  // Black: 00000 000000 00000
    } else {
        printf("Unknown color: %s. Defaulting to white.\n", argv[2]);
    }

    int fb = open("/dev/fb0", O_RDWR);
    if (fb == -1) {
        perror("Error opening framebuffer device");
        return 1;
    }

    // 获取屏幕的属性
    struct fb_var_screeninfo vinfo;
    if (ioctl(fb, FBIOGET_VSCREENINFO, &vinfo)) {
        perror("Error reading variable information");
        close(fb);
        return 1;
    }

    int width = vinfo.xres;
    int height = vinfo.yres;
    int bpp = vinfo.bits_per_pixel; // 每像素的字节数

    printf("Screen resolution: %dx%d\n", width, height);
    printf("Color depth: %d bpp\n", bpp);

    // 映射帧缓冲内存
    size_t framebuffer_size = width * height * 2;
    uint16_t *framebuffer = mmap(NULL, framebuffer_size, PROT_READ | PROT_WRITE, MAP_SHARED, fb, 0);
    if (framebuffer == MAP_FAILED) {
        perror("Error mapping framebuffer memory");
        close(fb);
        return 1;
    }

    // 填充背景颜色
    for (int y = 0; y < num; y++) {
        framebuffer[y] = color;
    }

    // 取消映射并关闭文件
    munmap(framebuffer, framebuffer_size);
    close(fb);

    return 0;
}

五、编译与烧录

完成设备树配置和驱动开发后,需要编译内核、设备树,并烧录到 OK3568 开发板中。

1、编译步骤

  1. 设置交叉编译工具链:
    export ARCH=arm64 export CROSS_COMPILE=aarch64-linux-gnu- export PATH=$PATH:/path/to/toolchain/bin
  2. 编译内核镜像:
    make -j$(nproc) zImage
  3. 编译设备树:
    make -j$(nproc) dtbs
  4. 编译内核模块(若驱动配置为模块):
    make -j$(nproc) modules
  5. 安装模块(可选):
    make modules_install INSTALL_MOD_PATH=./modules

2、烧录方法

推荐使用 TF 卡烧录或 USB 烧录工具(如 RKDevTool),以下以 TF 卡烧录为例:

  • 将编译生成的 zImage(内核镜像)拷贝到 TF 卡的 boot 分区
  • 将编译生成的设备树文件(如 ok3568.dtb)拷贝到 TF 卡的 boot 分区
  • 将开发板设置为 TF 卡启动模式,插入 TF 卡后上电
  • 系统启动后,内核会自动加载 ST7735S 驱动,识别屏幕设备
烧录注意事项
  • 烧录前请备份开发板原有系统,避免数据丢失
  • 确保交叉编译工具链版本与内核版本匹配(推荐使用 Linaro 2021.07 及以上版本)
  • 设备树文件名需与开发板启动脚本中指定的文件名一致
  • 若使用模块方式加载驱动,需在系统启动后执行insmod fb_st7735r.ko加载驱动

六、测试验证

系统启动后,可通过以下方法验证屏幕是否正常工作:

1、基础验证

  • 查看 Framebuffer 设备:ls /dev/fb*,若出现/dev/fb1(或其他fb设备号),说明驱动加载成功
  • 查看设备树匹配信息:dmesg | grep st7735,若输出 "st7735r spi0.0: registered" 等信息,说明设备树匹配成功
  • 查看 SPI 总线信息:dmesg | grep spi,确认 SPI0 总线已正常初始化

2、显示测试

使用以下命令测试屏幕显示功能:

  1. 填充纯色显示(红色):

    [root@ok3568:/]# /root/test2 10240 red //填充的像素总数

  2. 执行命令后,终端将显示:

    Screen resolution128x160

    Color depth16 bpp

  3. 屏幕将显示一半像素为红色,验证显示功能正常。

七、常见问题排查

问题1:屏幕无显示,背光不亮
  • 检查 VCC 引脚是否接 3.3V,GND 是否可靠接地
  • 检查 BL 引脚是否接 3.3V,或软件是否配置了背光控制
  • 检查 SPI0 总线是否正常初始化(dmesg | grep spi0)
  • 检查设备树中 spi0 的 status 是否设置为 "okay"
问题2:屏幕显示花屏、乱码
  • 检查 SPI 引脚接线是否正确(SCL、SDA、CS 引脚)
  • 降低 SPI 通信速率(将 spi-max-frequency 改为 10MHz 测试)
  • 检查 DC 引脚和 RES 引脚接线是否正确
  • 确认驱动中的像素偏移配置是否正确
问题3:显示颜色异常(如偏色、反色)
  • 检查设备树中是否添加了 bgr 属性(根据屏幕实际需求调整)
  • 调整 Gamma 校准参数,优化显示色彩
  • 确认像素格式配置是否为 RGB565(0x3A 命令参数为 0x05)
  • 检查电源电压是否稳定,是否存在纹波干扰
问题4:驱动加载失败
  • 检查设备树 compatible 属性是否为 "sitronix,st7735r"
  • 确认内核已开启 CONFIG_FB_TFT 和 CONFIG_FB_TFT_ST7735R 配置
  • 查看 dmesg 日志,分析驱动加载失败原因(dmesg | grep -i error)
  • 检查 GPIO 引脚是否被其他设备占用
排查技巧:遇到问题时,首先查看内核日志(dmesg),根据日志中的错误信息定位问题。重点关注 SPI 总线初始化、GPIO 配置、驱动匹配、命令执行等相关日志。

八、总结

本文详细介绍了 OK3568 开发板适配 1.8 英寸 ST7735S SPI 屏幕的完整流程,包括硬件连接、设备树配置、内核驱动开发、编译烧录和测试验证等环节。通过本文的教程,您可以快速实现 ST7735S 屏幕的点亮与显示控制。

关键要点总结:

  • 硬件连接需严格按照引脚对应关系,特别注意 VCC 接 3.3V,避免烧毁屏幕
  • 设备树配置需确保 compatible 属性、GPIO 引脚定义、SPI 速率等参数正确
  • 驱动基于 FB_TFT 框架开发,无需从零开发,可直接使用内核自带驱动或本文提供的优化版本
  • 测试验证时,先通过基础命令确认驱动加载和设备识别,再进行显示功能测试
  • 遇到问题时,善用 dmesg 日志定位问题,提高排查效率

通过本教程的适配方案,您可以在 OK3568 开发板上快速集成 ST7735S 屏幕,为工业控制、便携设备等场景提供低成本的显示解决方案。如需进一步扩展功能(如触摸控制、背光调节等),可在此基础上进行二次开发。

相关产品 >

  • FET3568-C核心板

    RK3568性能强而稳 国产芯|CA888亚洲城集团RK3568系列核心板,采用瑞芯微国产高性能AI处理器RK3568设计生产,RK3568兼具CPU、GPU、NPU、VPU于一身,RK3568 性能、性价比在同类产品中具有较高优势,RK3568处理器是一款定位中高端的通用型SoC, CA888亚洲城集团RK3568核心板主要面向工业互联网、HMI、NVR存储、车载中控、工业网关等领域。目前RK3568系列已经批量稳定出货

    了解详情
    FET3568-C核心板
  • OK3568-C开发板

    强而稳,国产芯,1Tops算力,多路高速接口|CA888亚洲城集团RK3568系列RK3568开发板基于国产工业级AI处理器RK3568四核64位Cortex-A55 处理器设计。RK3568作为国产化高性能处理器,瑞芯微RK3568芯片是一款定位中高端的通用型SoC,瑞芯微RK3568芯片是一款定位中高端的通用型SoC,NPU达到1Tops,CA888亚洲城集团RK3568系列核心板提供瑞芯微RK3568规格书_datasheet_数据手册_原理图等,


    了解详情
    OK3568-C开发板

推荐阅读 换一批 换一批