RGB 接口屏幕相关问题总结
本文档主要总结了 RGB 接口屏幕开发过程中常见的问题,并给出了相应的解决方法。
相关文档
相关示例
屏幕漂移问题解决

出现屏幕漂移的效果图
漂移根因: “漂移”本质上是 GDMA 在传输中断流(FIFO under-run)以后,LCD 控制器从错误地址继续取像素,从而把后续行当成前几行显示,整幅图像产生逐行位移。是 GDMA → LCD FIFO 下溢 + FIFO 指针错位 的宏观表现。
解决方法:
BounceBuffer ≥ 20 行(也不宜过大,以免影响其他中断执行),保证 ISR refill 有足够 VBlank 时间窗
esp_lcd_rgb_panel_config_t panel_config = { .data_width = EXAMPLE_DATA_BUS_WIDTH, .dma_burst_size = 64, .num_fbs = EXAMPLE_LCD_NUM_FB, .bounce_buffer_size_px = 20 * EXAMPLE_LCD_H_RES, .clk_src = LCD_CLK_SRC_DEFAULT, .disp_gpio_num = EXAMPLE_PIN_NUM_DISP_EN, .pclk_gpio_num = EXAMPLE_PIN_NUM_PCLK, .vsync_gpio_num = EXAMPLE_PIN_NUM_VSYNC, .hsync_gpio_num = EXAMPLE_PIN_NUM_HSYNC, .de_gpio_num = EXAMPLE_PIN_NUM_DE, .data_gpio_nums = { ... }, .timings = { .pclk_hz = EXAMPLE_LCD_PIXEL_CLOCK_HZ, .h_res = EXAMPLE_LCD_H_RES, .v_res = EXAMPLE_LCD_V_RES, .hsync_back_porch = EXAMPLE_LCD_HBP, .hsync_front_porch = EXAMPLE_LCD_HFP, .hsync_pulse_width = EXAMPLE_LCD_HSYNC, .vsync_back_porch = EXAMPLE_LCD_VBP, .vsync_front_porch = EXAMPLE_LCD_VFP, .vsync_pulse_width = EXAMPLE_LCD_VSYNC, .flags = { .pclk_active_neg = true, }, }, .flags.fb_in_psram = true, // allocate frame buffer in PSRAM };
打开 XIP 配置,降低长时阻塞,提高中断实时性,从而减少 RGB FIFO 下溢和漂移。
Support for external PSRAM ---> PSRAM config ---> [*] Enable Executable in place from (XiP) from PSRAM feature (READ HELP) - LVGL 使用 Direct Mode 或者降低刷新率,尽可能减少 PSRAM 带宽使用
[*] Avoid tearing effect Select Avoid Tearing Mode (Mode3: LCD double-buffer & LVGL direct-mode) ---> Select rotation (Rotation 0) --->
GPIO 不足
RGB 接口会占用大量 GPIO,如果出现 IO 不够的情况,可考虑使用 GPIO 扩展芯片来扩展 SPI 线,或者可以考虑数据线复用于 SPI 线。