ST Reps: Need help understanding if this is normal or misconfigured or hardware issue...
Hey all -
I really need one of the ST guys to weigh in on this question... I have been struggling with graphic performance on things that I THOUGHT should be simple and easy for a high power F746 core and TouchGFX, but I'm starting to wonder if my expectations weren't realistic.
Reference: I first got serious about the expected power of the platform with the F469 Discovery board and the TouchGFX demo app where they had the set date wheels spin to a random date. The animation was smooth and the scroll wheels were pretty cool. If a simple demo app could do that with a high-resolution 480x800 pixel display, what could I make it do?!? Unfortunately, the ToughGFX is obscured from us so I really can't easily tell if I have unrealistic expectations or if I have some other issue with configuration or hardware. I don't really have the time to reverse engineer the assembly code as I'm using TouchGFX because it's supposed to SAVE me development time.
So, I've implemented a few features (well a number of them but a few are giving me consternation). The two features are this:
1. An alpha fade-in of a logo using the scaleable widget app with bilinear interpolation.
2. Scroll wheels to set date and time... 5 wheel total on one screen.
The question I really need answered by the ST personnel here is this: Does my data look reasonable for a correctly configured system or should my performance really be higher and I have a problem to find. I've already spent days and I don't want to waste more if it seems like my system is performing as it should be.
1. I setup a startup screen using a scaleable image with bilinear interpolation (gave best visual quality). Alpha fade in over 1000ms... hold for 3000ms, then fade out over 100ms. Using the TouchGFXGPIO.cpp and the RENDER_TIME setting for an I/O pin, the render time is 165ms per frame. If I disable ChromeART, that goes to 170ms per frame. This results in an unusable feature.
2. To be "cool", I am using the "animatetoItem" function with a 60 frame (ideally 1s) setting. This results in render time of about 170ms per frame. Also undesireable.
HARDWARE DETAILS and further testing:
Custom board
LCD is 480x800 pixels RGB565 interface using LTDC, 27.4MHz dot clock
STM32F746 running at 200MHz
Frame buffer in external DRAM running at 100MHZ (HCLK/2)
STM32CubeIDE v1.6.0
STM32Cube v1.16.1
TouchGFX v4.15.0
ChromeART enabled/ DMA2D
1. Fading in image using changing alpha with the scaleable image widget. Native image is 400x106 scaling to 700x185 using bilinear interpolation. Render time per frame is 165ms w/ChromeART and 170ms with it disabled. It appears from probing the SDRAM that render time per pixel might be 400-500ns/pixel if accessed randomly 1 pixel at a time.
As a test, I used a fixed image widget and the render time is 4ms per frame (well within the VSYNC). If this scaling was the only limitation, I would have written it off and moved on. But because of example #2 which is an actual feature I'd like to use, I'm in a quandry.
2. I've using 5 scroll wheel widgets on the screen at once. Three of them are 74x355 pixels and two are 180 x 355. If I use the "animatetoItem" function on entering the screen, the frame rate is around 170ms per frame which results in very jerky animation. Again, if that was the only symptom, I would have probably just moved on.
HOWEVER, if I use my finger to scroll the smaller, 74x355 wheel it takes roughly 40ms to render the frame and it takes roughly 100ms to render the frame for the 180x355 wheel. All tests were with ChromeART on. I didn't turn it off for this test. It appears to take roughly 500ns per pixel most of the time but some are shorter and some are longer. This results in a sluggish and non-responsive UI.
SO- The real question is this... does it look like I have some sort of issue or do those times make sense given what I'm trying to do? I've probed the SDRAM bus and it definitely looks like lockDMAToFrontPorch is false for best performance. I can see a lot of SDRAM activity in the dead time of LCD refresh compared to static screen just refreshing the screen.
Thank you in advance for your prompt response!
Keith
