T5 对接 SPI 替换屏

更新时间:2025-04-15 09:34:10下载pdf

T5 添加 SPI 替换屏幕,需要通过添加 SPI 驱动适配。本文以 GC9A01 SPI 驱动为例说明如何添加驱动。

增加 SPI GC9A01 驱动文件

关于驱动初始化,您可以从屏幕厂家提供的资料中获取。

增加驱动初始化指令表

  • 路径:vendor/T5/t5_os/components/bk_peripheral/src/lcd/spi

    • 在该目录下创建一个 lcd_spi_gc9a01.c 文件。
    • 指令格式:命令 + {数据} + 长度

    当长度为 0xFF 时,即表示延时,数据表示延时的毫秒数。

    #include <common/bk_include.h>
    #include <driver/lcd_types.h>
    static const lcd_qspi_init_cmd_t gc9a01_init_cmds[] =
    {
        // 初始化指令 0x11,无数据
        {0x11, {0x00}, 0},
        
        // 初始化指令 0x66,10 个数据
        {0x66, {0x3C, 0x00, 0xCD, 0x67, 0x45, 0x45, 0x10, 0x00, 0x00, 0x00}, 10},
    
        // 初始化指令 0x29,无数据
        {0x29, {0x00}, 0},     // Display on
        // 长度 0xFF 表示延时,数据 0x78 表示 120ms{0x00, {0x78}, 0xFF}, // sleep
    
        ... //按以上格式初始化驱动的指令
    }
    
    // 时钟,按需修改
    static const lcd_spi_t lcd_spi_gc9a01_config =
    {
    .clk = LCD_QSPI_48M
    .init_cmd = gc9a01_init_cmds,.device_init_cmd_len = sizeof(gc9a01_init_cmds) / sizeof
    (lcd_qspi_init_cmd_t),
    };
    
    const lcd_device_t lcd_device_gc9a01 =
    {
        .id = LCD_DEVICE_GC9A01,
        .name ="gc9a01",    // 上层查找的驱动名字
        .type = LCD_TYPE_SPI,.ppi = PIXEL_240 << 16 | PIXEL_240, // 屏幕分辨率,可以直接数字
        .spi = &lcd_spi_gc9a01_config,
        .init = NULL,
        .lcd_off = NULL,
    };
    

    .id = LCD_DEVICE_GC9A01 中,LCD_DEVICE_GC9A01 是自定义的 lcd_device_id_t 枚举成员。

  • 路径:vendor/T5/t5_os/bk_idk/include/driver/lcd_types.h

    .ppi = PIXEL_240 << 16 | PIXEL_240中,PIXEL_240 是自定义的宏,也可以直接写数字。

  • 路径:vendor/T5/t5_os/bk_idk/include/driver/media_types.h

    config.cmake 中加入驱动文件,如下图所示:

    T5 对接 SPI 替换屏

注册屏幕驱动

路径:vendor/T5/t5_os/components/bk_peripheral/include/lcd_panel_devices.h

T5 对接 SPI 替换屏

路径:vendor/T5/t5_os/components/bk_peripheral/src/lcd/lcd_panel_devices.c

T5 对接 SPI 替换屏

修改 SPI LCD 其他引脚

路径:vendor/T5/t5_os/components/display_service/src/lcd_spi_display_service.c

SPIO 的引脚:

#define SPIO_LL_CSN_PIN           GPIO_15
#define SPIO_LL_SCK_PIN           GPIO_14
#define SPIO_LL_MOSI_PIN          GPIO_16
#define SPIO_LL_MISO_PIN          GPIO_17

SPI & QSPI 选择:

#define LCD_SPI_REFRESH_WITH_QSPI 0 //spi改0 qspi改1

其他引脚控制:

#define LCD_SPI_RESET_PIN           GPIO_28
#define LCD_SPI_BACKLIGHT_PIN       GPIO_26
#define LCD_SPI_RS_PIN              GPIO_9