RGB 接口屏幕相关问题总结

[English]

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

相关文档

RGB 接口屏幕开发详解

相关示例

RGB 16/24 线并行接口驱动示例

RGB 8 线并行接口驱动示例

屏幕漂移问题解决

出现屏幕漂移的效果图

出现屏幕漂移的效果图

  • 漂移根因: “漂移”本质上是 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 线。

  • 硬件参考: SCH_ESP32-S3-LCD-Ev-Board-MB_V1.5_20231009.pdf