ESP32-S3 RGB LCD peripheral: weird glitches
Posted: Tue Jun 07, 2022 1:29 pm
Hi,
I'm still working on a proof of concept with the ESP32-S3 to determine if the RGB LCD peripheral is suitable for our needs.
For the proof of concept, I'm now using the master branch of the ESP-IDF on a dev kit I got from AliExpress (which also includes some sample code).
When animations occur on the screen (especially if it's the entire screen that is being updated), we notice some "glitches" / "tearing".
After going through some of the documentation and the code provided, I noticed that LVGL was not configured to use Direct mode, which I think should be used for the LCD peripheral on the ESP32-S3, as well as the draw buffer for LVGL was only 1/4th of the screen (480x120, screen resolution is 480x480)
I've enabled Direct mode and switched to using a single buffer. This seems to improve the performance, but the glitches are not fully disappeared.
What I think is happening, is that the buffer gets updated while it is being "transferred" to the LCD panel.
I think I should "sync" updating the buffer with the on_frame_trans_done callback, but I noticed this was removed from the examples on the master branch.
Can it not be used for this, or why is it removed?
How would I go about syncing the update of the frame buffer to get rid of the "tearing"?
So far, our product development managers have not yet been convinced by the solution based on the ESP32-S3.
I'm trying to understand if this is just a software issue or if we really can't get it to work without tearing on this microcontroller.
If it can't be done, we'll probably have to go another route, using silicon from other vendors.
Kind regards,
Arno
I'm still working on a proof of concept with the ESP32-S3 to determine if the RGB LCD peripheral is suitable for our needs.
For the proof of concept, I'm now using the master branch of the ESP-IDF on a dev kit I got from AliExpress (which also includes some sample code).
When animations occur on the screen (especially if it's the entire screen that is being updated), we notice some "glitches" / "tearing".
After going through some of the documentation and the code provided, I noticed that LVGL was not configured to use Direct mode, which I think should be used for the LCD peripheral on the ESP32-S3, as well as the draw buffer for LVGL was only 1/4th of the screen (480x120, screen resolution is 480x480)
I've enabled Direct mode and switched to using a single buffer. This seems to improve the performance, but the glitches are not fully disappeared.
What I think is happening, is that the buffer gets updated while it is being "transferred" to the LCD panel.
I think I should "sync" updating the buffer with the on_frame_trans_done callback, but I noticed this was removed from the examples on the master branch.
Can it not be used for this, or why is it removed?
How would I go about syncing the update of the frame buffer to get rid of the "tearing"?
So far, our product development managers have not yet been convinced by the solution based on the ESP32-S3.
I'm trying to understand if this is just a software issue or if we really can't get it to work without tearing on this microcontroller.
If it can't be done, we'll probably have to go another route, using silicon from other vendors.
Kind regards,
Arno