更新时间:2025-04-15 06:09:06下载pdf
T5 添加 RGB 替换屏幕,需要通过 LCD(Liquid Crystal Display,液晶显示屏)驱动适配和 TP(Touch Panel,触摸屏)驱动适配。
本文为您介绍如何添加 LCD 驱动和 TP 驱动。其中,添加 LCD 驱动有两种方式:TDD 驱动方式和通过 RGB 接口。
TDD,即 Tuya Device Driver,是涂鸦为开发者提供的用于将设备注册到抽象层的接口。根据涂鸦驱动组件开发规范,驱动层 的组件/文件/函数都以 tdd
为前缀。
首先,修改 tuya_gui_start
接口,如下图所示(请注意红色框中的 GPIO 配置)。
如果没有使用 TP 或者上面 LCD 配置的 IO,赋值 TUYA_GPIO_NUM_MAX
即可。
然后修改驱动,示例如下图。具体介绍请参考本章节下文中的介绍。
首先,在 tdd_lcd_driver/src/rgb/
目录中创建驱动文件,如 lcd_st7701s_t50p181cq.c
,然后完成以下操作:
添加驱动声明。结构如下:
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 |
屏幕初始化序列 |
填充屏幕时钟及屏幕参数。数据结构如下:
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
:屏幕像素时钟。屏幕初始化序列。数据结构如下:
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 联合为具体参数,以下图为例说明:
参考下表中说明,并以此为例类推、依次配置寄存器:
字段 | 说明 |
---|---|
第一行{.type = 0, .reset = {{1, 10}, {1, 120}, {1, 60}}} |
即 reset 指令
|
第二行 {.type = 1, .reg = {.r = 0XFF, .len = 5, .v = {0x77, 0x01, 0x00, 0x00, 0x13}}} |
即配置寄存器值
|
第三行 {.type = 1, .reg = {.r = 0XEF, .len = 1, .v = {0x08}}} |
即配置寄存器值
|
{.type = SPI_ITEM_END},
在 lcd_common.h
中添加声明,如下图:
在 lcd_common.c
中添加引用,如下图:
通过 name
查询,示例如下:
下载并安装 Tuya Wind IDE。更多详情,请参考 Tuya Wind IDE。
以下说明均基于工程根目录的路径。
添加源文件。在 vendor/T5/t5_os/components/bk_peripheral/src/lcd/rgb/
目录中,放入屏幕驱动文件,下面以 lcd__gc9503_boe.c
为例。
驱动文件需要填充 两个结构体,一个函数实现:
添加驱动描述,让 BK 驱动框架可以索引到您的驱动程序。
在 vendor/T5/t5_os/components/bk_peripheral/src/lcd/lcd_panel_devices.c
文件中,添加 驱动 LCD 描述结构体 中的驱动结构体,参考如下:
在 vendor/T5/t5_os/components/bk_peripheral/include/lcd_panel_devices.h
文件中添加声明,参考如下:
添加驱动源文件到编译框架。修改 vendor/T5/t5_os/components/bk_peripheral/src/lcd/rgb/config.cmake
,把驱动文件添加到 CMakeLists.txt
中,如下图所示:
设置 GPIO
示例代码如下图所示:
设置分辨率及屏幕名称
示例代码如下图所示:
添加 TP 驱动程序到⽬录 vendor/T5/t5_os/components/bk_peripheral/src/tp/tp_gt1151.c
。
添加新增 TP 类型枚举到 T5/t5_os/bk_idk/include/driver/tp_types.h
,如下图所示:
添加新增 TP 驱动索引到 vendor/T5/t5_os/components/bk_peripheral/include/tp_sensor_devices.h
,如下图所示:
添加新增 TP 到 TP list:vendor/T5/t5_os/components/bk_peripheral/src/tp/tp_sensor_devices.c
,如下图所示:
添加新增 TP Kconfig
项到 vendor\T5\t5_os\components\bk_peripheral\src\tp\Kconfig
,如下图所示:
在使用 Project
的 CPU1 的 config
⽂件中,添加宏控:vendor\T5\t5_os\projects\tuya_app\config\bk7258_cp1\config
。
调试 I2C 通信,⼀般能正确读取到 TP 的 chip_id
即可,可参照 cst816d_detect
函数
处理 。
TP 坐标的读取通过 tp_process_task
来定时读取,可以打开如下图所示的 Log 检测 TP 数据读取情况。
关于 TP 读取到的数据解析和转换处理,请参照 cst816d_read_point
函数,将 I2C 读取到的裸数据根据 TP 原⼚提供的参考资料进⾏解析和转换。⼀般关注的 IU 是坐标值、动作类型等,最后将完整 TP 数据赋值到 tp_data_t *read_data
中即可。
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈