SF32LB52 Nano 52J + CO5300:官方 RT-Thread LVGL v9 demo 持续黑屏并最终 draw_core timeout

环境

  • 芯片/板级配置:SF32LB52JUD6,SCons board 为 sf32lb52-nano_52j
  • 屏幕驱动:SDK 自带 CO5300,QADSPI
  • SDK:SiFli-SDK v2.4.6,build ce200146(Git commit ce20014)
  • 示例:SDK 官方 example/multimedia/lvgl/lvgl_v9_demos
  • RT-Thread + littlevgl2rtt + LVGL v9
  • 下载/日志串口:COM11,1 Mbps

本次测试未修改官方 LVGL demo、CO5300 驱动或 LCDC 驱动源码。

复现步骤

cd example/multimedia/lvgl/lvgl_v9_demos/project
scons --board=sf32lb52-nano_52j -j8
build_sf32lb52-nano_52j_hcpu/uart_download.bat

通过 UART 下载到板卡后复位。工程配置启用了:

LVGL_V9=1
LV_USE_DEMO_WIDGETS=1
LV_USE_DEMO_BENCHMARK=1
BSP_USING_EPIC=1
BSP_USING_LCDC=1
LCD_USING_TFT_CO5300=1
LCD_CO5300_VSYNC_ENABLE=1
BSP_LCDC_USING_QADSPI=1
LCD_HOR_RES_MAX=390
LCD_VER_RES_MAX=450

现象

  1. 屏幕始终为黑屏,看不到 widgets/benchmark 内容。
  2. LCD 初始化和 LVGL 线程看起来都成功,串口显示 CO5300 ID 为 0x331100,LCD 状态进入 ON。
  3. sysmon 持续显示 60 FPS,render 约 4 ms、flush 约 10 ms,说明 LVGL 仍在持续渲染和提交刷新,但面板没有可见像素。
  4. 运行一段时间后,官方 LCD 驱动报 draw_core timeout 并在 draw_core:1823 断言。

同一块硬件使用 RT-Thread 官方 CO5300/LCDC 驱动做不经过 LVGL 的 5 色块循环刷新,可以正确显示红、绿、蓝、白、黑,因此屏幕供电、复位、QADSPI 基本通信和直接像素写入路径是正常的。问题只在切换到官方 LVGL v9 demo 后出现。

关键日志

SiFli Corporation build on Sep 11 2026, 2.4.6 build ce200146
[2349] I/drv.epic main: drv_gpu opened.
[2512] I/drv.lcd main: [NONE] -> [OPENING]
CO5300_ReadID 0x331100
[11171] I/drv.lcd lcd_task: Found lcd co5300 id:331100h
[11210] I/drv.lcd lcd_task: [OPENING] -> [INITIALIZED]
[11645] I/LVGL main: [littlevgl2rtt] Welcome to the littlevgl2rtt lib.
[12654] I/drv.lcd lcd_task: display on
[12669] I/drv.lcd lcd_task: [INITIALIZED] -> [ON]
sysmon: 60 FPS (refr_cnt: 19 | redraw_cnt: 19), refr 15ms (render 4ms | flush 10ms), CPU 93
...
[129952] E/drv.lcd lcd_task: draw_core timeout
[129974] E/drv.lcd lcd_task: Error, Clear p_drv_ops 120f5938, sem_v=0
[130002] E/drv.lcd lcd_task: irq_en=0
[130017] E/drv.lcd lcd_task: LCDC1_irq_en=1, active=0, pending=0
[130042] E/drv.lcd lcd_task: hlcdc errcode=0, lock=0, state=2
[130065] E/drv.lcd lcd_task: LCDC STATUS=1,TE=3
[130084] E/drv.lcd lcd_task: HAL dbg cnt b7, b7, b6
[130104] E/drv.lcd lcd_task: DRV dbg cnt b7, b6, b6
[130123] E/drv.lcd lcd_task: LCDC CANVAS TL=0,BR=1c10185,SETTING=a0141,IRQ=0
[130153] E/drv.lcd lcd_task: LCDC LAYER0 CFG=14618ff0,TL=0,BR=1c10185,SRC=60000000,DEC=0
[131398] I/drv.lcd lcd_task: [ON] -> [TIMEOUT]
[131416] E/drv.lcd lcd_task: lcd_timeout_error draw_core, 1822
Assertion failed at function:draw_core, line number:1823 ,(0)

其中 HAL/DRV 的提交与完成计数相差 1,IRQ=0,看起来最后一次 LCDC 刷新没有收到完成事件。

想请教的问题

  1. 对 sf32lb52-nano_52j + CO5300,官方推荐的可直接运行 LVGL v9 demo 的 board/config 是哪一个?
  2. 当前官方 board 配置中的 LCD_HOR_RES_MAX=390、LCD_VER_RES_MAX=450 是否适用于该 CO5300 屏?我们的屏幕像素规格是 410×502,这个分辨率差异是否会导致当前黑屏或 LCDC EOF 丢失?
  3. LCD_CO5300_VSYNC_ENABLE、TE 极性/延时、QADSPI 频率或 framebuffer 地址是否还需要针对该屏调整?
  4. 对上述 LCDC STATUS=1, TE=3, IRQ=0 和完成计数差 1,官方是否有已知修复或建议补丁?

如果需要,我可以继续提供完整 .config、main.map 和完整串口日志。

使用 SiFli-SDK v2.4.6,build ce200146(Git commit ce20014)并未复现v9_demo无法显示情况

你的屏幕数据是410×502与默认使用的屏幕驱动使用的规格390*450不同,会影响发给屏幕ic的指令,可能会造成黑屏

回复问题:
1:sf32lb52-nano_52j + CO5300使用的是SiFli-SDK/customer/boards/sf32lb52-nano_52j
2:如果屏幕只有大小区分,只需要修改SiFli-SDK/customer/boards/Kconfig_lcd中的 config LCD_HOR_RES_MAX/LCD_VER_RES_MAX的LCD_USING_TFT_CO5300的default值即可
3:如果ic一样不需要调整
4:需要你提供project/build_xxx文件夹,一份rt_driver,一份v9_demo的,我再加以分析看看是否有更多信息