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 }, }, };
FAQ12 各芯片 LCDC 接口类型和支持的最大分辨率?¶
下面按“芯片系列 + 接口/屏类型”逐项说明。表中的分辨率是 Solution 中常见或已验证项目的参考值,不等同于芯片的绝对物理上限;最终能否使用还要看具体型号、封装、板级 pinmux、屏驱、色深、刷新率、Framebuffer/PSRAM 带宽以及是否全屏刷新。
1. 穿戴类小屏项目¶
芯片系列 |
接口/屏类型 |
典型已验证分辨率参考 |
说明 |
|---|---|---|---|
SF32LB55X |
DSI / QSPI / DBI |
390 x 450、410 x 494、466x466、454 x 454 |
常见于圆屏、方屏等中小尺寸屏,高帧率需要在 480 x 480 以内先评估。 |
SF32LB52X |
QSPI |
390 x 450、410 x 494、466x466 |
常见手表/小屏项目使用 QSPI,高帧率需要在 480 x 480 以内先评估。 |
SF32LB58X |
QSPI / DSI |
390 x 450、410 x 494、466x466 |
58x 也可以接 QSPI / MIPI 屏 |
2. 墨水屏项目¶
芯片系列 |
接口/屏类型 |
典型已验证分辨率参考 |
说明 |
|---|---|---|---|
SF32LB52X |
EPD 8BIT + EPD_DPI |
758 x 1032 |
525(NOR) 、 527(NOR) 和 567 可以做电子纸项目。分辨率可以更大,如1072×1448。 |
3. 大屏(如中控屏)项目¶
芯片系列 |
接口/屏类型 |
典型已验证分辨率参考 |
说明 |
|---|---|---|---|
SF32LB566 |
RGB / DPI |
800 x 480、1024 x 600,720 x 720 |
常用于 RGB / DPI 中大尺寸屏。 |
SF32LB58X |
RGB / DPI / DSI |
800 x 480、1024 x 600 |
58x 的 RGB / DPI 适合中大尺寸实时刷新屏。 |
理解这张表时注意下面几点:
横屏、竖屏和接口类型没有直接绑定关系。同一个 QSPI、DSI 或 RGB/DPI 接口都可能接横屏或竖屏,关键看面板规格、扫描方向、驱动初始化参数和软件坐标设计。
“最大分辨率”不能脱离刷新率讨论。QSPI/SPI 屏主要受送数带宽限制;RGB/DPI/DSI 屏主要受像素时钟、同步时序、Framebuffer/PSRAM 带宽和渲染耗时限制。
EPD 和 TFT 屏不能用同一个口径比较。EPD 可以有较高物理分辨率,但通常关注低刷新、局刷、灰阶模式、全刷耗时和缓存策略。
同一系列不同型号、封装或开发板的 LCDC 引脚引出可能不同,表格只能作为选型入口,最终以芯片数据手册、原理图、屏规格书、工程配置和实测结果为准。
对 QSPI/SPI 屏的送数时间计算可参考 帧率 / LCD 送数。
如果屏接口采用QSPI,且希望支持24bit,需要屏支持DDR模式。其中,采用DDR模式时,52x/56x QSPI的接口频率支持40MHz,57x QSPI的接口频率支持50MHz。