Weird situation - STM32F429 + DMA2D + SDRAM, dedicated display controller LTCD

Real context - STM32429 + LTCD + DMA2D + SDRAM.

NO SPI, NO I2C to lcd, I mean, no controller for the LCD.

Only the LTCD will have this function.


History or story. Let’s get to the facts.

After a long time away from the graphics, I find myself interacting with lib lvgl again.
Fact is, when I had this contact it was between version 5.x and or 6.x, and now in 7.61 everything has changed.
Exploring the directories I came across “lvgl / src / lv_gpu / lv_gpu_stm32_dma2d.c‘ e ’.h”.
In lv_conf.h I have “#define LV_USE_GPU_STM32_DMA2D 1”

In the example “lv_port_stm32f429_disco” in “tft.c” in the function “void tft_init (void)”, there are these settings:

#if TFT_EXT_FB! = 0
SDRAM_Init ();
LCD_Config ();
DMA_Config ();
disp_drv.buffer = & buf;
disp_drv.flush_cb = tft_flush;
disp_drv.monitor_cb = monitor_cb;
lv_disp_drv_register (& disp_drv);

Here comes the question where and how to use it:

To use the GPU the following callbacks can be used:
lv_gpu_stm32_dma2d_fill fill an area in memory with colors.
lv_gpu_stm32_dma2d_blend blend two memory buffers using opacity.
dma2d_wait if any GPU function return while the GPU is still working LVGL will use this function when required the be sure GPU rendereing is ready.

Since they are linked in “#define LV_USE_GPU_STM32_DMA2D 1” and /lvgl/src/lv_gpu/lv_gpu_stm32_dma2d.c, as written above?

And how to use:

/ * Example for 3) * /
static lv_disp_buf_t draw_buf_dsc_3;
static lv_color_t draw_buf_3_1 [LV_HOR_RES_MAX * LV_VER_RES_MAX]; / * A screen sized buffer * /
static lv_color_t draw_buf_3_1 [LV_HOR_RES_MAX * LV_VER_RES_MAX]; / * An other screen sized buffer * /
lv_disp_buf_init (& draw_buf_dsc_3, draw_buf_3_1, draw_buf_3_2, LV_HOR_RES_MAX * LV_VER_RES_MAX); / * Initialize the display buffer * /

LTDC start and configure with 02 layers. ? Or!
I assign layer 01 address - 0xDxxxxxxx
I assign address of layer 02 - 0xDx2xxxxx


Start and setup EXT_SDRAM? Or!

DMA2D — internal in lvgl?
How to use?

The reason for these questions, they come from an email conversation with , who is one of the countless contributors to nuttx.

So, as soon as I can understand on a bare-metal level, I will try to reproduce at the NUTTX level, even because there in the “nuttx” a lot has changed too.
Example, lvgl was ported approximately between 2016-2017 to nuttx, I don’t really remember.
Furthermore, approximately between 2018-2019 the framebuffer was also expanded with the help of MARCO!msg/nuttx/ASeHEiwKjjA/tyc034VaBAAJ, comprising DMA2D, Overlay and much more…

However, at the moment, I need to understand how to interact with stm32f429 and lvgl in the most direct way possible.

The question is:
Could someone provide an example code STM32429 + LTCD + DMA2D + SDRAM in bare metal style?

The hits and misses will also be described here, as they become a source of what “not to do” and “what to do”

If the maintainers can set a minimum example, it will be of great help.

Thank you very much in advance
Ilb - Bravo_Romeu / Romeu_Juliet

Online translation

Sorry for the errors above, because before it was on github, now it is much more evolved, so you have to make mistakes and follow.
As this library is evolving, I look forward to Window Managers.