T5 对接 RGB 替换屏

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

T5 添加 RGB 替换屏幕,需要通过 LCD(Liquid Crystal Display,液晶显示屏)驱动适配和 TP(Touch Panel,触摸屏)驱动适配。

本文为您介绍如何添加 LCD 驱动和 TP 驱动。其中,添加 LCD 驱动有两种方式:TDD 驱动方式和通过 RGB 接口。

LCD 适配:TDD 驱动方式

TDD,即 Tuya Device Driver,是涂鸦为开发者提供的用于将设备注册到抽象层的接口。根据涂鸦驱动组件开发规范,驱动层 的组件/文件/函数都以 tdd 为前缀。

首先,修改 tuya_gui_start 接口,如下图所示(请注意红色框中的 GPIO 配置)。

T5 对接 RGB 替换屏

如果没有使用 TP 或者上面 LCD 配置的 IO,赋值 TUYA_GPIO_NUM_MAX 即可。

然后修改驱动,示例如下图。具体介绍请参考本章节下文中的介绍。

T5 对接 RGB 替换屏

第一步:添加驱动文件

首先,在 tdd_lcd_driver/src/rgb/ 目录中创建驱动文件,如 lcd_st7701s_t50p181cq.c,然后完成以下操作:

  1. 添加驱动声明。结构如下:

    T5 对接 RGB 替换屏
    typedef struct
    {
        char *name;
        TUYA_LCD_TYPE_E type;
        TKL_DISP_PIXEL_FMT_E fmt;   /* output data format */
        union {
            const TY_RGB_CFG_T *rgb;
            const TY_SPI_CFG_T *spi;
        };
    
        struct lcd_init_s *lcd_init_sequence;
    } TUYA_LCD_DEVICE_T;
    

    参数说明

    参数 描述
    .name 用于应用层索引驱动
    .type 表示驱动类型
    .fmt 用于表示输出到屏幕的 RGB 格式类型
    .rgb 存储屏幕时钟及同步信息参数
    .lcd_init_sequence 屏幕初始化序列
  2. 填充屏幕时钟及屏幕参数。数据结构如下:

    T5 对接 RGB 替换屏
    typedef struct
    {
        LCD_CLK_T clk;                         /**< config lcd clk */
        DATA_ACTIVE_EDGE_E active_edge;
    
        UINT16_T hsync_back_porch;            /**< rang 0~0x3FF (0~1023), should refer lcd device spec*/
        UINT16_T hsync_front_porch;           /**< rang 0~0x3FF (0~1023), should refer lcd device spec*/
        UINT16_T vsync_back_porch;            /**< rang 0~0xFF (0~255), should refer lcd device spec*/
        UINT16_T vsync_front_porch;           /**< rang 0~0xFF (0~255), should refer lcd device spec*/
        UINT8_T  hsync_pulse_width;           /**< rang 0~0x3F (0~7), should refer lcd device spec*/
        UINT8_T  vsync_pulse_width;           /**< rang 0~0x3F (0~7), should refer lcd device spec*/
    } TY_RGB_CFG_T;
    

    参数说明

    • .clk:屏幕像素时钟。
    • 其它参数:与行同步、帧同步参数相同。
  3. 屏幕初始化序列。数据结构如下:

    struct lcd_reset_seq {
        UINT16_T gpio_level;
        UINT16_T delay_time;
    };
    
    struct lcd_reg_set {
        UINT8_T r;
        UINT8_T len;
        UINT8_T v[16];
    };
    
    struct lcd_init_s {
        LCD_SPI_CONFIG_TYPE type;
        union {
            UINT32_T delay_time;
            struct lcd_reg_set reg;
            struct lcd_reset_seq reset[3];
        };
    };
    

    参数说明

    • .type:表示当前结构体元素类型,枚举值为:

      typedef enum  {
          SPI_LCD_RESET = 0,
          SPI_CONFIG_REG,
          SPI_DELAY,
          SPI_ITEM_END
      } LCD_SPI_CONFIG_TYPE;
      
    • Union 联合为具体参数,以下图为例说明:
      T5 对接 RGB 替换屏

      参考下表中说明,并以此为例类推、依次配置寄存器:

      字段 说明
      第一行
      {.type = 0, .reset = {{1, 10}, {1, 120}, {1, 60}}}
      即 reset 指令
      • {1,10):GPIO 拉高 10 ms
      • {0,120}:GPIO 拉低 120 ms
      • {1,60}:GPIO拉高 60 ms
      第二行 {.type = 1, .reg = {.r = 0XFF, .len = 5, .v = {0x77, 0x01, 0x00, 0x00, 0x13}}} 即配置寄存器值
      • 配置寄存器:0xff
      • 数据长度:5 字节
      • 数据内容:0x77, 0x01, 0x00, 0x00, 0x13
      第三行 {.type = 1, .reg = {.r = 0XEF, .len = 1, .v = {0x08}}} 即配置寄存器值
      • 配置寄存器:0xef
      • 数据长度:1 字节
      • 数据内容:0x08
      • 序列最后一行必须是配置结束标志字段:{.type = SPI_ITEM_END},
      • 寄存器配置多个数据时,依次按先后顺序写入。

第二步:驱动文件声明

  1. lcd_common.h 中添加声明,如下图:

    T5 对接 RGB 替换屏

  2. lcd_common.c 中添加引用,如下图:

    T5 对接 RGB 替换屏

第三步:应用查询获取

通过 name 查询,示例如下:

T5 对接 RGB 替换屏

LCD 适配:通过 RGB 接口方式

第一步:准备 Tuya Wind IDE

下载并安装 Tuya Wind IDE。更多详情,请参考 Tuya Wind IDE

第二步:添加驱动文件

以下说明均基于工程根目录的路径。

  1. 添加源文件。在 vendor/T5/t5_os/components/bk_peripheral/src/lcd/rgb/ 目录中,放入屏幕驱动文件,下面以 lcd__gc9503_boe.c 为例。
    驱动文件需要填充 两个结构体一个函数实现

    • 帧时钟/同步相关结构体:修改结构中的 rgb 域。具体参数需要与屏厂沟通获取,参考如下:

      T5 对接 RGB 替换屏

    • 驱动 LCD 描述结构体:修改结构中的 init 域,参考示例如下:

      T5 对接 RGB 替换屏

    • 屏幕初始化函数

  2. 添加驱动描述,让 BK 驱动框架可以索引到您的驱动程序。

    1. vendor/T5/t5_os/components/bk_peripheral/src/lcd/lcd_panel_devices.c 文件中,添加 驱动 LCD 描述结构体 中的驱动结构体,参考如下:

      T5 对接 RGB 替换屏

    2. vendor/T5/t5_os/components/bk_peripheral/include/lcd_panel_devices.h 文件中添加声明,参考如下:

      T5 对接 RGB 替换屏

  3. 添加驱动源文件到编译框架。修改 vendor/T5/t5_os/components/bk_peripheral/src/lcd/rgb/config.cmake,把驱动文件添加到 CMakeLists.txt 中,如下图所示:

    T5 对接 RGB 替换屏

第三步:LCD/TP 初始化

设置 GPIO

示例代码如下图所示:

T5 对接 RGB 替换屏

设置分辨率及屏幕名称

示例代码如下图所示:

T5 对接 RGB 替换屏

T5 对接 RGB 替换屏

TP 适配

第一步:添加 TP 驱动

添加 TP 驱动程序到⽬录 vendor/T5/t5_os/components/bk_peripheral/src/tp/tp_gt1151.c

第二步:TP 挂载

  1. 添加新增 TP 类型枚举到 T5/t5_os/bk_idk/include/driver/tp_types.h,如下图所示:

    T5 对接 RGB 替换屏

  2. 添加新增 TP 驱动索引到 vendor/T5/t5_os/components/bk_peripheral/include/tp_sensor_devices.h,如下图所示:

    T5 对接 RGB 替换屏

  3. 添加新增 TP 到 TP list:vendor/T5/t5_os/components/bk_peripheral/src/tp/tp_sensor_devices.c,如下图所示:

    T5 对接 RGB 替换屏

  4. 添加新增 TP Kconfig 项到 vendor\T5\t5_os\components\bk_peripheral\src\tp\Kconfig,如下图所示:

    T5 对接 RGB 替换屏

第三步:添加宏控

在使用 Project 的 CPU1 的 config ⽂件中,添加宏控:vendor\T5\t5_os\projects\tuya_app\config\bk7258_cp1\config

T5 对接 RGB 替换屏

第四步: 调试新增 TP

  1. 调试 I2C 通信,⼀般能正确读取到 TP 的 chip_id 即可,可参照 cst816d_detect 函数
    处理 。

  2. TP 坐标的读取通过 tp_process_task 来定时读取,可以打开如下图所示的 Log 检测 TP 数据读取情况。

    T5 对接 RGB 替换屏

  3. 关于 TP 读取到的数据解析和转换处理,请参照 cst816d_read_point 函数,将 I2C 读取到的裸数据根据 TP 原⼚提供的参考资料进⾏解析和转换。⼀般关注的 IU 是坐标值、动作类型等,最后将完整 TP 数据赋值到 tp_data_t *read_data 中即可。