cancel
Showing results for 
Search instead for 
Did you mean: 

memory mapping framebuffer in the bootloader causing a memory fault when switching to unpriveleged mode

PCevo.1
Associate III

Need to memory map the framebuffer in the bootloader, this is done using bspMpuConfig. when this is done the framebuffer can successfully be written but when transitioning into the next state the routine

 /* RCC access done to identify the wakeup sources, we can switch to unpriviledged */

 SFU_MPU_EnterUnprivilegedMode();

causes a memory fault. Below are the memory mapping params. Any thoughts?

 /* Setup Memory Mapped LCD in Write-through (framebuffer) */

  MPU_InitStruct.Enable = MPU_REGION_ENABLE;

  MPU_InitStruct.BaseAddress = 0x64000000;

  MPU_InitStruct.Size = MPU_REGION_SIZE_32MB;

  MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;

  MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;

  MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;

  MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;

  MPU_InitStruct.Number = MPU_REGION_NUMBER2;

  MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;

  MPU_InitStruct.SubRegionDisable = 0x00;

  MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_DISABLE;

  HAL_MPU_ConfigRegion(&MPU_InitStruct);

I have noticed that in app_sfu.h

SFU_MPU_PROTECT_ENABLE

is not defined, I have enabled this, I believe this allows memory mapping in the bootloader, but defining that did not have any impact. I also noticed this issue about lazy stacking, this also did not have any impact either.

https://developer.arm.com/documentation/dai0298/a/

1 REPLY 1
PCevo.1
Associate III

Memory mapping had to be enabled and the unprivileged memory mapping needed to be updated.

This document filled in a number of missing pieces

https://www.st.com/resource/en/application_note/an2606-stm32-microcontroller-system-memory-boot-mode-stmicroelectronics.pdf