LCD¶
FAQ1 怎么添加一份自己的屏模组(LCD + TP)¶
在
SDK\customer\peripherals路径下复制一份 LCD 驱动。修改复制的驱动文件与
SConscript,适配寄存器、数据接口、CLK 速率、RGB 格式。修改
SDK\customer\peripherals\Kconfig,添加新驱动宏。修改
SDK\customer\boards\Kconfig_lcd,添加新屏模组配置。确认
bsp_pinmux.c和bsp_lcd_tp.c的引脚配置。确认
menuconfig → Built-in LCD module driver已选择你添加的驱动。
请参见屏幕模组调试
FAQ2 上电屏幕是黑的如何排查¶
关键引脚检测:
VCC:主供电
背光引脚:背光供电
LCD_RST:复位引脚
排查方法:
检查
bsp_pinmux.c和bsp_lcd_tp.c的引脚配置。使用 finsh 命令检查软件配置的引脚状态:
pin status 1 # 检查 PA01 脚异常状态:
PIN 1, FUNC=15, VAL=0, ANA_IN, GPIO_MODE_INPUT正常状态:
PIN 1, FUNC=0, VAL=1, DIG_IO, GPIO_MODE_OUTPUT关键差异:
FUNC=0(GPIO 模式)VAL=1(输出高电平)DIG_IO(数字 IO 模式)GPIO_MODE_OUTPUT(输出模式)
使用逻辑分析仪抓取具体上电波形,分析上电时序。
FAQ3 LCD调试常见问题¶
LCD 屏幕右侧绿条纹
LCD 显示花屏
TFT 屏开机或唤醒时第一帧花屏
初始化读写都正常但不亮屏问题
如何从 Framebuffer 导出来看图像是否正常?
LCD 驱动中常见的 Assert 死机
静电放电(ESD)测试时 LCD 花屏和定屏问题
开关机动画或者充电图像显示扭曲问题
屏 QSPI 读不到屏 ID 的问题
屏 QSPI 动态调整读写寄存器 CLK 速率
请参见LCD常见问题
FAQ4 如何导出送屏buf中的数据并恢复成图像¶
从
hcpu.map文件中查询送屏缓冲区的地址,对应为buf2_1;若项目配置双缓冲区,同步查询buf2_2。
从 dump 文件中拷贝
buf2_1/buf2_2对应的二进制文件(psram.bin或hcpu_ram.bin),dump 导出方法参见死机分析。将拷贝的 bin 文件放入
sdk/tools/bin2bmp目录,参照该目录下 readme 文档内的指令,执行生成图像即可。
FAQ5 如何排查屏显画面倾斜扭曲问题¶
如上图,该现象为像素对齐异常导致,需参考对应 LCD 硬件规格书,确认标准的像素对齐要求。
根据规格书要求,核对 LCD 注册接口中
pixel_align对齐参数配置是否符合要求:LCD_DRIVER_EXPORT(name, id, init_cfg, dev_ops, ic_max_hor_res, ic_max_ver_res, pixel_align)
FAQ6 如何配置合适的TE周期¶
TE 周期的配置标准、计算方法及适配规则,参见:帧率/ LCD TE 周期
FAQ7 如何配置屏显画面旋转角度(90°/180°/270°)¶
1. 芯片原生支持能力¶
56x、58x 系列 LCDC 控制器:支持垂直镜像、水平镜像;
52x 系列 LCDC 控制器:仅支持垂直镜像。
2. 配置方法¶
优先确认 LCD 硬件是否原生支持镜像,若支持则直接基于对应芯片系列配置,控制指令如下:
rt_device_control(lcd_device, RTGRAPHIC_CTRL_ROTATE_180, NULL)⚠️注意:旋转 180° 等价于水平镜像+垂直镜像。
若 LCD 不支持旋转,或芯片镜像方案无法满足需求,可通过 GPU 实现送屏缓冲区旋转,调用以下接口设置旋转角度即可:
/** * @brief 设置屏显画面旋转角度 * @param rotate: 旋转角度枚举值,支持90°/180°/270°旋转配置 * @return rt_err_t: 配置成功返回RT_EOK,失败返回对应错误码 */ rt_err_t drv_epic_set_rotation(drv_epic_rotate_t rotate)
⚠️注意:该方案会占用 GPU 资源,可能导致图像渲染耗时增加,当前仅支持 90°、180°、270° 固定角度旋转。
⚠️注意:如果旋转180后出现撕裂,这是由于渲染的顺序没有适配导致,需要另外打补丁修复该问题
FAQ8 如何计算理论帧率¶
详细的理论帧率推导公式、计算示例、性能评估标准,参见:帧率/LCD送数
FAQ9 如何在应用层设置不休眠¶
可在应用层直接调用以下接口实现屏幕不休眠功能,接口调用简单无依赖:
/**
* @brief 应用层屏幕休眠锁使能/关闭 (设置不休眠/恢复休眠)
* @param enable false:禁止休眠(屏幕常亮) true:恢复自动休眠
*/
void app_screen_lock_enable(bool enable);
FAQ10 如何重置休眠时间¶
当需要刷新屏幕休眠计时(比如触摸操作、按键响应、数据更新时),调用以下接口重置休眠时间,重新开始倒计时:
/**
* @brief 手动触发显示屏的活跃状态 (刷新屏幕休眠计时/重置休眠倒计时)
* @param disp 显示屏设备句柄指针,传 NULL 则使用默认显示屏
*/
void lv_disp_trig_activity(lv_disp_t * disp);
FAQ11 屏驱如何配置DDR模式送数¶
先确认 LCD 屏模组是否支持 DDR 模式,是否需要在初始化时配置特殊寄存器 —— 向屏幕原厂确认或查阅数据手册。
配置 DDR 模式,软件需做如下修改:
LCD 驱动需要在添加对应屏模组
/sdk/customer/boards/Kconfig时加上BSP_LCDC_USING_DDR_QADSPI宏。确认
bsp_pinmux.c里有BSP_LCDC_USING_DDR_QADSPI,需要修改 LCD 相关 IO 口的驱动电流。LCD 驱动代码需要配置
LCDC_INTF_SPI_DCX_DDR_4DATA模式,修改 LCD 时钟频率(DDR 模式 LCD 时钟最大支持 40MHz),添加SPI_LCD_FLAG_DDR_DUMMY_CLOCK配置。static const LCDC_InitTypeDef lcdc_int_cfg_spi = { .lcd_itf = LCDC_INTF_SPI_DCX_DDR_4DATA, // 修改为DDR四线模式 .freq = 40000000, // 修改LCD时钟为40MHz #if LV_COLOR_DEPTH == 16 .color_mode = LCDC_PIXEL_FORMAT_RGB565, #else .color_mode = LCDC_PIXEL_FORMAT_RGB888, #endif .cfg = { .spi = { .dummy_clock = 1, // 0: QAD-SPI/SPI3 1: SPI4 #ifdef LCD_FT2308_VSYNC_ENABLE .syn_mode = HAL_LCDC_SYNC_VER, #else .syn_mode = HAL_LCDC_SYNC_DISABLE, #endif .vsyn_polarity = 1, .vsyn_delay_us = 0, .hsyn_num = 0, #ifdef LCDC_SUPPORT_DDR_QSPI .flags = SPI_LCD_FLAG_DDR_DUMMY_CLOCK, // 添加SPI_LCD_FLAG_DDR_DUMMY_CLOCK配置 #endif }, }, };