主要参考资料:
乐鑫ESP-IDF官方手册SPI Flash and External SPI RAM Configuration: https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.0/esp32s3/api-guides/flash_psram_config.html
目录
- 驱动和端口优化
- RAM与PSRAM
- FLASH SPI与PSRAM SPI
- LVGL优化
- 修改显示间隔
驱动和端口优化
下面是一张图像文件/图像C array从读取到显示的整个底层路径,有了一个路径,我们就可以依次对每个环节进行优化。
RAM与PSRAM
从上图中可以看到,选择RAM还是PSRAM是两条不同的通道。(当然,RAM后可以接CPU,但是有DMA干嘛不用。另外DMA是只有RAM可以使用,在heap_caps_malloc()中设置MALLOC_CAP_DMA)。
ESP32中RAM的问题就是容量太小,留给data用的只有320K,对于大屏会有明显刷屏感。
PSRAM可以通过分配大内存,以空间换时间。但是对于大屏,第一张图的加载速度会较慢。
FLASH SPI与PSRAM SPI
首先了解一些术语,可以看到,SPI是通过Data Rate 和Line mode来控制传输速率。
乐鑫ESP-IDF官方手册SPI Flash and External SPI RAM Configuration章节,继续往下翻,可以看到最高支持Flash mode 80Mhz DDR 与PSRAM mode 80M DDR。
在menuconfig下Serial Flasher confg 和 Component Config/ESP32S3-Specific可以分别设置。
LVGL优化
修改显示间隔
在lv_config.h中,这个参数表示每次刷新屏幕后的间隔时间,以30ms为例,最高能达到30帧的刷新率。
/*Default display refresh period. LVG will redraw changed areas with this period time*/
#define LV_DISP_DEF_REFR_PERIOD 30 /*[ms]*/