Hi,
I'm using an nRF52810 on a custom board and I'm using softdevice s112_nrf52_7.2.0_softdevice.hex.
I want to write some information (just 4 bytes) to flash memory, because I want the data to survive a hard reset and power cycling.
I have free space in code memory, so I decided to do as seen in my code below.
Is there any problems in doing a flash write like this?
All comments are welcome. Thanks
#define DATA_ADDRESS ((NRF_FICR->CODESIZE * NRF_FICR->CODEPAGESIZE) - 0x04)
#define DATA_VALUE 0xDEADBEEF
void write_value(void)
{
uint32_t address;
uint32_t val;
uint32_t err_code;
// Write 4 bytes at the last page of code flash
address = DATA_ADDRESS;
val = DATA_VALUE;
err_code = sd_flash_write((uint32_t*)address, &val, 1);
if (err_code == NRF_SUCCESS)
{
// Success
}
}
void erase_value(void)
{
uint32_t page_number;
uint32_t err_code;
// Erase the last page of code flash
page_number = NRF_FICR->CODESIZE - 1;
err_code = sd_flash_page_erase(page_number);
if (err_code == NRF_SUCCESS)
{
// Success
}
}
bool test_value(void)
{
uint32_t address;
uint32_t val;
// Read the last word of the code space
address = DATA_ADDRESS;
val = *(uint32_t*)address;
return (val == DATA_VALUE);
}