LCD_CAM + GDMA external RAM bottleneck (ESP32-S3)

macksal
Posts: 1
Joined: Mon Apr 24, 2023 2:24 am

LCD_CAM + GDMA external RAM bottleneck (ESP32-S3)

Postby macksal » Mon Apr 24, 2023 2:32 am

Hi all, I am experiencing some issues with higher pixel clock rates (40MHz+) with the LCD_CAM module on ESP32-S3. I am using the GDMA controller to copy a frame of around 5M pixels from LCD_CAM into external PSRAM memory (octal SPI, 80MHz). Sometimes, a small number of pixels will sometimes be "missed" in one horizontal line meaning that the rest of the frame is out of sync by a few pixels. The 'length' property on the inlink descriptor for that line is also set by the hardware to a lower value corresponding with the number of pixels missed. For example, I have 2560 bytes per row, and each inlink descriptor has size: 2560. Most inlinks will also have length: 2560, but the failing line will have something like length: 2558.

I am unsure whether (i) the LCD_CAM peripheral is failing to sample some pixels or (ii) the GDMA controller is failing to write them to external RAM.

I have a few questions that will help me determine where the bottleneck is:
a) Is the GDMA controller's available bandwidth to external ram affected by any other non-PSRAM memory accesses made by the CPU? I have already excluded the CPU from accessing external RAM/DCache but unsure if other accesses can lead to contention in the MMU. Perhaps execution from flash is a problem?

b) How can I determine whether the GDMA/PSRAM bus or the LCD_CAM peripheral is the bottleneck? Does the GDMA have any way to notify software that writes to external memory have failed or an Rx channel FIFO has overflowed?

Thanks in advance for anyone who can help here!

Who is online

Users browsing this forum: No registered users and 101 guests