cancel
Showing results for 
Search instead for 
Did you mean: 

LCD controller FIFO underrun

DPfei.16
Associate III

Hello,

i use a custom DSI display on the STM32F769 Discovery Board.

The display has 720x720 pixels and no framebuffer. Therefore I can't use the DSI adapted command mode but I have to use the DSI video mode.

I have the following problem:

When the pixel clock is too low (below 30 MHz) the display is flickering (as the frame rate is too low).

When the pixel clock is above 30 MHz there is no flickering any more but then I get fifo underrun erros when a button is pressed on the display. So the display look completely correct but as soon as I press a button (causing some drawing), I see glitches until the drawing is completed, after which the display look correct again.

This link (https://touchgfx.zendesk.com/hc/en-us/articles/205676691-Debugging-Pixel-Error-Issues) says that the problem occurs because TouchGFX is rendering to one frame buffer in SDRAM while the LCD controller is reading from the other frame buffer. Depending on bus arbitration, this may cause the LCD controller to be denied SDRAM access for a time, long enough for the LCD FIFO to become starved.

The µC is running on his maximum frequency of 216 MHz. I use the generated code from TouchGfx. I only changed the DSI mode from adapted command mode to video mode. I use double buffering.

Does this mean that the selected display is not suitable for the STM32F769 µC or are there some things to optimize?

BR

Daniel

23 REPLIES 23
Martin KJELDSEN
Chief III

It makes sense that you're only getting FIFO underruns when the application is actually doing something, because this is when your memory is strained by LTDC (reads) and DMA2D (writes).

One thing you could try to verify is to run full speed on pixel clock, but hal.lockDMAToFrontPorch(true); in your board configuration, so that the DMA won't start until the LTDC is out of active area.

720x720 pixels is slightly more than the 800x480 we're used to for the F769 DISCO Board. Maybe this is enough to starve the FIFO. But those displays have a framebuffer and we only run a single framebuffer in our application templates.

/Martin

Hi. How many layers and what pixel format you use for LTDC?

Martin KJELDSEN
Chief III

We only utilize a single layer in TouchGFX. The pixel format depends on your application configuration.

Either: LTDC_PIXEL_FORMAT_RGB565 or LTDC_PIXEL_FORMAT_RGB888 for the disco board.

DPfei.16
Associate III

Hi guys,

calling hal.lockDMAToFrontPorch(true) doesn't solve the problem. I still get fifo underruns and glitches on the display.

@oleksandr.karbivsky​ I use only 1 layer and the RGB888 pixel format.

BR

Daniel

Martin KJELDSEN
Chief III

Try reducing the pixel clock until it looks good again and compare the numbers (nonlockDMA vs lockDMA).

/Martin

DPfei.16
Associate III

@Martin KJELDSEN​ which numbers should I compare?

Try to use RGB565 pixel format. This is reduce load on SDRAM.

Perhaps give a full/effective presentation of your current configuration and clock settings for DSI and LTDC? This will avoid the "Guess What's Wrong" type games.

The specific display, with a cite for the data sheet, and your settings with respect to pixel clock, and horizontal and vertical settings/totals.

Tips, buy me a coffee, or three.. PayPal Venmo Up vote any posts that you find helpful, it shows what's working..

https://community.st.com/s/question/0D50X0000BG06tOSQR/dsi-clock-frequency

Tips, buy me a coffee, or three.. PayPal Venmo Up vote any posts that you find helpful, it shows what's working..