Hi,
I have written these 3 functions to erase/read and write.
/////////////////////////////////////////////////////////////////////////////// SNV
const uint32_t f_addr = 0x000FF000; // Last page start address 255
// Create a pointer to that address
uint32_t * p_addr = (uint32_t *)f_addr; //cast f_addr to a pointer
uint32_t erase_SNV()
{
NRF_LOG_INFO("Memory Erased");
return sd_flash_page_erase(255);
}
uint32_t write_SNV(int address,uint8_t value)
{
uint32_t val;
val=value;
NRF_LOG_INFO("Data Write in Flash");
ret_code_t err_code;
err_code = sd_flash_write(p_addr+address, &val, sizeof(val));
APP_ERROR_CHECK(err_code);
return err_code;
}
uint32_t read_SNV(int address)
{
NRF_LOG_INFO("The Data read from flash is: %d", *(p_addr)+address);
return *(p_addr)+address;
}
When I write any value from address 1 it gives following wrong output(0 1 2 3).
write_SNV(1,11);
read_SNV(1);
write_SNV(2,12);
read_SNV(2);
write_SNV(3,13);
read_SNV(3);
// read_SNV(0);
read_SNV(1);
read_SNV(2);
read_SNV(3);

But When I start address from 0 it gives the right values.
write_SNV(0,10);
read_SNV(0);
write_SNV(1,11);
read_SNV(1);
write_SNV(2,12);
read_SNV(2);
write_SNV(3,13);
read_SNV(3);
read_SNV(0);
read_SNV(1);
read_SNV(2);
read_SNV(3);
How can I save values in rondom addresses?
Thanks!



