cancel
Showing results for 
Search instead for 
Did you mean: 

TouchGFX GUI intermittent artifacts

heveskar
Senior

Hello,

 

we are using Riverdi displays but this may be a generic problem. We are using RVT70HSSNWN00 and RVT101HVSNWN00 and there is an intermittent problem.

We used project generated from the TouchGFX example to develop a graphical application. Sometimes after the display is started, there are artifacts (picture tearing) shown when the display is redrawing. Only thing that fixes this is device reset. It occurs approximately every 40-50th device startup. I am attaching a video showing the problem and how it should look correctly. In the video, I am controlling the display from a joystick, first the top right button is pressed and then the screen is changed (the exact steps are irrelevant, every redraw causes picture tearing).

I also attach .ioc file used for the project.

I have seen this document and from that it seems that this may be from Cortex-M7 speculative accesses, so I tried to set MPU regions accordingly but with no help. I think that some double buffer misconfiguration could be causing this but it seems to me that in that case it  would happen always, not every few tens of resets, no?

Any input on how to fix this would be appreciated.

 

TouchGFX version: 4.23.0

Example project 3.1.1 for 7” display, 3.1.0 for 10.1” one (latest available version from the designer)

STM32CubeIDE: version 1.15.0 with gcc 12 (version 1.14.0 with gcc 10 had the same problem)

1 ACCEPTED SOLUTION

Accepted Solutions
heveskar
Senior

Hello @Osman SOYKURT,

it turned out that the problem wasn't gone yet, it still sometimes happened. Fortunately now we think we finally fixed it, there was a wrong order of initialization – in main, MX_FMC_Init() must be called before MX_DSIHOST_DSI_Init().

heveskar_0-1715771743444.png

When LTDC error interrupt is enabled, during initialization after every start, LTDC error handler is called and Transfer Error flag is set. When the black screen problem happens, error interrupt is called second time in FMC initialization and LTDC FIFO underrun flag is set. After the reorder neither happens.

Regards,

View solution in original post

5 REPLIES 5
Osman SOYKURT
ST Employee

Hello @heveskar ,

Your issue has similarities with the one reported on here, did you see this thread?

Osman SOYKURT
ST Software Developer | TouchGFX

Thanks, I have tried setting MPU so that buffers (in the external memory) are not cached (it is in the .ioc I posted), not sure if I have done it correctly, but with no help. Riverdi suggested updating to current TouchGFX and project template and decreasing FMC clock by 10 MHz. I am working on that and I will report the result.

BTW this thread also seems relevant but there is no solution.

Hello @heveskar ,

What's the status of your project? Did you succeed in resolving it with Riverdi's suggestions?

Osman SOYKURT
ST Software Developer | TouchGFX
heveskar
Senior

Hello @Osman SOYKURT ,

Not using DCache in the application did not help. Updating to newer template and decreasing FMC clock also did not help. We tried removing the assets from external flash so that QSPI is not used (as per another Riverdi suggestion) which did not help.

However, do not know exactly when, but the problem with flickering suddenly changed: sometimes the display did not show anything at all (just black screen) even though application and all the tasks are running normally. The original problem with flickering had disappeared.

Today I tried not using DCache in our bootloader we are using (everytime before the application was started, bootloader enabled DCache and ICache only to disable it again before jumping to application). This seems to have  solved this issue with black screen.

P.S. we also disabled access to unused FMC regions as per this thread just to be on a safe side

Please leave me a few days to confirm that the issue is really gone, then I will close this thread.

Thanks

heveskar
Senior

Hello @Osman SOYKURT,

it turned out that the problem wasn't gone yet, it still sometimes happened. Fortunately now we think we finally fixed it, there was a wrong order of initialization – in main, MX_FMC_Init() must be called before MX_DSIHOST_DSI_Init().

heveskar_0-1715771743444.png

When LTDC error interrupt is enabled, during initialization after every start, LTDC error handler is called and Transfer Error flag is set. When the black screen problem happens, error interrupt is called second time in FMC initialization and LTDC FIFO underrun flag is set. After the reorder neither happens.

Regards,