Skip to main content
Adomin
Associate II
March 1, 2022
Solved

Reading from flash causes hardfault

  • March 1, 2022
  • 3 replies
  • 2626 views

I'm working with the STM32wb55ceu MCU which states that it has 512K of flash memory starting from address 0x08000000.

However, I realized that if I compile and run the follow program, it will hard fault when attempting to read the value from flash (line 3)

void main ()
{
 uint8_t i = *(uint8_t *)0x0806f18c;
 (void)i;
 while (1);
}

To my understanding, the flash should end at 0x08080000. and I have confirmed that my flash memory size is 512K by using the st-info utility.

Is there some sort of memory protection I need to disable?

This topic has been closed for replies.
Best answer by TDK

0x0806f18c is near the end of the flash.

You're probably reading FLASH that is reserved for the second core (CPU2) handling the wireless functions.

From the datasheet:

0693W00000Kb3QuQAJ.png

3 replies

Tesla DeLorean
Guru
March 1, 2022

If you dump the faulting address in the Hard Fault handler, what does it report?

Unwritten FLASH may fail ECC checks

Tips, Buy me a coffee, or three.. PayPal VenmoUp vote any posts that you find helpful, it shows what's working..
Adomin
AdominAuthor
Associate II
March 1, 2022

Looks like BusFault Status Register contains 0x82 which means BFARVALID is set and PRECISERR

if this is what you were asking

TDK
TDKBest answer
Super User
March 2, 2022

0x0806f18c is near the end of the flash.

You're probably reading FLASH that is reserved for the second core (CPU2) handling the wireless functions.

From the datasheet:

0693W00000Kb3QuQAJ.png

"If you feel a post has answered your question, please click ""Accept as Solution""."
Adomin
AdominAuthor
Associate II
March 2, 2022

Makes sense. I missed that in the data sheet. Thank you.

TDK
Super User
March 2, 2022

Read out FLASH_SFR to verify what's reserved for CPU2.

"If you feel a post has answered your question, please click ""Accept as Solution""."