为什么驱动 RGB LCD 屏幕时出现偏移(显示画面整体漂移)?

为什么驱动 RGB LCD 屏幕时出现偏移(显示画面整体漂移)?¶
原因

PCLK 设置过高,PSRAM 带宽跟不上。

受写 flash 操作影响,期间 PSRAM 被禁用。

配置方面
降低此频率:

#define EXAMPLE_LCD_PIXEL_CLOCK_HZ  (12 * 1000 * 1000) /* (18 * 1000 * 1000) */

提高 PSRAM 和 flash 带宽,设置 flash 为 QIO 120 M,PSRAM 为 Octal 120 M。

开启 CONFIG_COMPILER_OPTIMIZATION_PERF。

降低 data_cache_line_size 到 32 Byte。

开启 CONFIG_SPIRAM_FETCH_INSTRUCTIONS 和 CONFIG_SPIRAM_RODATA。

开启 CONFIG_LCD_RGB_RESTART_IN_VSYNC,可能会导致闪花屏和降帧率,一般不推荐,可以尝试。

应用方面

长时间写 flash 时,比如连续执行 OTA、NVS 等写操作,可以尽量分段、分时进行。除此之外,也可以设置 RGB 为 Bounce Buffer 模式,详细讲解见 lcd 文档,此时需要使能 CONFIG_SPIRAM_FETCH_INSTRUCTIONS 和 CONFIG_SPIRAM_RODATA (不能使能 GDMA_ISR_IRAM_SAFE,否则会 Cache 报错)。

短时操作 flash 导致漂移的情况,如 wifi 连接等操作前后,可以在操作前调用 esp_lcd_rgb_panel_set_pclk() 降低 PCLK(如 6 MHz)并延时大约 20 ms(RGB 刷完一帧的时间),然后在操作结束后提高 PCLK 至原始水平,期间可能会造成短暂的闪白屏现象。

使能 esp_lcd_rgb_panel_config_t 中的 flags.refresh_on_demand,通过调用 esp_lcd_rgb_panel_refresh() 接口手动刷屏,在保证屏幕不闪白的情况下尽量降低刷屏频率。

如果无法避免,可以调用 esp_lcd_rgb_panel_restart() 接口重置 RGB 时序,防止永久性漂移。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值