STM32U5G9 – 90° rotated display without a second framebuffer (LTDC / GFXMMU / GPU2D)
Hi,
We’re using an STM32U5G9 with a MIPI DSI panel (driven by the LTDC through the DSI host). The panel is 800×600 and scans in landscape, but it’s mounted rotated, so the user sees a 600×800 portrait image. The panel controller can’t swap its scan direction; the manufacturer confirmed that only X/Y flips are supported.
Current pipeline: JPEG frames arrive over the network. The hardware JPEG codec decodes them in bands of about 32 lines, and DMA2D converts each band (YCbCr → RGB888) straight into a single framebuffer that the LTDC scans. There’s no double buffering, because of RAM: the framebuffer alone is about 1.4 MB. Today the server sends frames already rotated to panel orientation.
Goal: a framebuffer in the logical (portrait, 600×800) orientation. We could then implement scrolling by remapping lines with the GFXMMU (a ring buffer), and only decode the newly exposed lines.
Questions:
- Can the LTDC or the GFXMMU present a 90°-rotated view of a framebuffer to the panel, without any intermediate buffer? As we read the GFXMMU, each LUT entry maps a virtual line to one contiguous run of physical blocks, so it can’t transpose. Is that correct?
- Can the GPU2D (NeoChrom) rotate on the fly between memory and the LTDC, i.e. without writing the rotated image to a separate panel-oriented framebuffer? Or is the GPU2D strictly memory-to-memory, so that rotation always needs a destination buffer?
- If a destination buffer is required, what’s the recommended architecture for minimal RAM? Specifically:
- Is it supported (and is there an example) for the GPU2D to rotate into a small strip buffer just ahead of the LTDC scan, paced by the LTDC line interrupt?
- Can GFXMMU LUT entries alias the same physical lines, so that a strip buffer of e.g. 64 lines appears to the LTDC as a full 600-line framebuffer?
- What’s the expected GPU2D throughput for a 90° rotated blit of a full 800×600 frame, in RGB565 and in RGB888, from internal SRAM? Is that realistic at 60 fps?
- Can libnemagfx be used standalone (bare metal or FreeRTOS, without TouchGFX)? Where is it distributed, and under what license? We already use LVGL, which has a NemaGFX draw unit.
- Can the JPEG codec or DMA2D produce rotated output in any mode? For example, is a DMA2D transfer with 1-pixel-wide lines (pixels per line = 1, number of lines = 600, output offset = pitch − 1) a supported way to transpose a row into a column?
Thanks!
