Need 60+ Fps on QSPI 500x500 display

,

Seeking Advice: Achieving 60+ FPS on a 500x500 QSPI Display – Microcontroller and Optimization Tips?

Hello everyone,

I’m planning a project that involves using a QSPI display with a resolution of around 500x500 pixels, and my goal is to achieve a smooth frame rate of 60 FPS or higher.

I’ve previously worked with the ESP32-S3 and developed interfaces for 480x272 displays. However, I’ve noticed that when the UI becomes even moderately complex, the ESP32-S3 struggles to maintain performance — rarely reaching 30 FPS, even on simple screens. This makes me wonder if I’m missing some configuration tweaks or if the chip is simply not suited for higher frame rates in such cases.

That brings me to two main questions:

  1. Are there any recommended microcontrollers capable of reliably driving a 500x500 QSPI display at 60+ FPS?
  2. What techniques or best practices should I follow to optimize rendering performance on embedded systems like these?

Any insights, hardware suggestions, or pointers to resources would be greatly appreciated.

Thanks in advance!

Basic school match 500x500x16x60 is bps for QSPI . Internal bus too require read this from memory and construct data before send.

OK so think about the bandwidth needed to transfer 500 x 500 x 24 * 60…

quad SPI in 1/2 duplex mode at maximum speed on say an ESP32 S3 is going to be 80mhz * 4 lanes. That means you are able to transfer 80,000,000 * 4 bits per second.

Just one frame at 500 x 500 resolution is going to be 6,000,000 bits. and you want to do at least 60 of those a second. You are looking at 360,000,000 bits that need to be sent. If we divide that by 4 which will tell us how many bits need to be sent per lane you end up with 90,000,000. Which is 90mhz. So it’s impossible to achieve. You also have to keep in mind that there is overhead that will reduce the speed in which it is able to send. If the frame buffers are located in SPIRAM the maximum speed you will be able to transfer at is going to be 1/2 the speed that the SPIRAM is running at if the SPIRAM is using a quad SPI. This is because of reading and writing to that memory at the same time. One buffer being transmitted while the other is being written to by LVGL.

The P4 would be able to fair better than the S3 but even then you would still never get to 60FPS. using quad SPI. It cannot be done as you can see by the numbers above. You cannot ram more data down the SPI then it is able to handle. You are better off using a P4 with an MIPI DSI display. That you would be able to get to that kind of a frame rate because the DSI bus is able to transfer at something like 1.2 gHz per lane (2 lanes).

You can squeeze some more performance if you have LVGL running on one core of the ESP32 and on the other core you have the driver that is passing the data to the display. The reason why you get better performance this way is becasue the interrupts that take place to send the next transaction will happen on a different core than LVGL is running on so LVGL will not get interrupted while it is rendering.

you can also trim down the amount of data being sent if you use RGB565 and then you might get really close to the 60FPS. You will probably fall short a couple frames of that target but it will be close.