Access framebuffer in new memory section

Description

So I’ve been able to get LVGL running and displaying several of the examples utilizing my custom hardware setup but I began facing an memory overflow issue once I increased the resolution to more accurately fit my screen. I was able to resolve this by creating a new memory section as suggested by a user in a different thread and successfully loaded the framebuffer into the new memory section but now when I try and reference it nothing changes. I know the image is being loaded into the section as when I set it during the LTDC_INIT() function the image displays as expected but any attempt to update the frame buffer array and rewrite it does not work.

I know the update pixel function works when its not in said memory section as I was able to use it to white out the image pixel by pixel on boot.

What MCU/Processor/Board and compiler are you using?

STM32H7 Alientech board utilizing a 1020 x 600 ARGB8888 LTCD display

What LVGL version are you using?

Most recent

What do you want to achieve?

Update the frame buffer located in a different section of memory.

What have you tried so far?

Different addresses, images and rendering methods .

Code to reproduce

void put_px(uint16_t Xpos, uint16_t Ypos, uint32_t RGB_Code)
{
  /* Write data value to all SDRAM memory */
	image_data_American_Wasteland[Ypos * LayerWidth + Xpos] = RGB_Code;
	pLayerCfg.FBStartAdress =  (uint32_t)&image_data_American_Wasteland;
	HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg, 0);

}

MEMORY
{
  DTCMRAM    (xrw)    : ORIGIN = 0x20000000,    LENGTH = 128K
  ITCMRAM    (xrw)    : ORIGIN = 0x00000000,    LENGTH = 64K
  RAM_D1     (xrw)    : ORIGIN = 0x24000000,    LENGTH = 512k
  RAM_D3     (xrw)    : ORIGIN = 0x38000000,    LENGTH = 64K
  FLASH      (rx)     : ORIGIN = 0x8000000,     LENGTH = 2048K
  BUFFER     (xrw)    : ORIGIN = 0xC0000000,    LENGTH = 640k
}

Screenshot and/or video


When the frameBuffer is stored in the default location.

When the frameBuffer is stored in .buffer

The most likely thing is that you need to invalidate the cache prior to transfer (if using DMA) and/or flushing. There are a number of posts relating to this.

Thanks I’ll have a look.