Hey, there.
I'm trying to use the NVMC to give me some persistent memory. I call init first, reads seem to work fine, but writes just don't seem to work.
So to the best of my knowledge, I have 512k of flash, so it goes from 0 to 0x80000. My image stops far below, so I thought I'd use the last 8k as my own playground.
Inside the project file, I found this setting:
linker_section_placement_macros=" ... FLASH_START=0x26000;FLASH_SIZE=0x5A000
so I reduced it to
linker_section_placement_macros=" ... FLASH_START=0x26000;FLASH_SIZE=0x58000
hoping that this would mean the image wouldn't interfere with my memory.
I use SDK15.0.0. The subroutine I'm going into is
void nrf_nvmc_write_words(uint32_t address, const uint32_t * src, uint32_t num_words)
{
uint32_t i;
// Enable write.
NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Wen;
__ISB();
__DSB();
for (i = 0; i < num_words; i++)
{
((uint32_t*)address)[i] = src[i];
wait_for_flash_ready();
}
NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Ren;
__ISB();
__DSB();
}
in nrf_nvmc.c.
address here is 0x7E000, src is 0x20007ff7c which looks right, and num_words is 1.
From single stepping it looks as if it crashes on the __ISB() call.
What am I missing here?
Regards,
Dan