Hello,
I am use nRF52832 chip in my project.
i am write data in flash by crating record id. For write record in flash I use below code,
ret_code_t fds_write(uint16_t FILE_ID, uint16_t REC_KEY, uint8_t indication)
{
ret_code_t err_code;
uint8_t i = 0;
fds_record_t record;
fds_flash_record_t flash_record;
fds_record_desc_t record_desc;
fds_find_token_t ftok ={0};//Important, make sure you zero init the ftok token
err_code = fds_record_find(FILE_ID, REC_KEY, &record_desc, &ftok);
if (err_code == FDS_SUCCESS)
{
// fds_test_find_and_delete(FILE_ID, REC_KEY);
err_code = fds_record_open(&record_desc, &flash_record);
if ( err_code != FDS_SUCCESS)
{
return err_code;
}
memcpy(&m_res_cfg, flash_record.p_data, sizeof(res_configuration_t));
m_res_cfg.adc_max = reg_adc_max_value;
m_res_cfg.adc_min = reg_adc_min_value;
NRF_LOG_INFO("\r\n");
// Access the record through the flash_record structure.
// Close the record when done.
err_code = fds_record_close(&record_desc);
if (err_code != FDS_SUCCESS)
{
return err_code;
}
err_code = fds_record_update(&record_desc, &rec_res);
APP_ERROR_CHECK(err_code);
NRF_LOG_INFO("SETTINGS WRITE");NRF_LOG_FLUSH();
}
else
{
ret_code_t ret = fds_record_write(&record_desc, &rec_res);
if (ret != FDS_SUCCESS)
{
return ret;
}
NRF_LOG_INFO("Writing Record ID = %d \r\n",record_desc.record_id);
}
return NRF_SUCCESS;
}
For read flash I use below code,
ret_code_t fds_read(uint16_t FILE_ID, uint16_t REC_KEY, uint8_t indication)
{
ret_code_t err_code;
uint8_t i = 0;
fds_flash_record_t flash_record;
fds_record_desc_t record_desc ={0};
fds_find_token_t ftok ={0};//Important, make sure you zero init the ftok token
NRF_LOG_INFO("Start searching... \r\n");
// NRF_LOG_INFO("File ID = %d Rec key = %d\r\n",FILE_ID,REC_KEY);
// Loop until all records with the given key and file ID have been found.
if(fds_record_find(FILE_ID, REC_KEY, &record_desc, &ftok) == FDS_SUCCESS)
{
err_code = fds_record_open(&record_desc, &flash_record);
if ( err_code != FDS_SUCCESS)
{
return err_code;
}
memcpy(&m_res_cfg, flash_record.p_data, sizeof(res_configuration_t));
reg_adc_max_value = m_res_cfg.adc_max;
reg_adc_min_value = m_res_cfg.adc_min;
NRF_LOG_INFO("\r\n");
// Access the record through the flash_record structure.
// Close the record when done.
err_code = fds_record_close(&record_desc);
if (err_code != FDS_SUCCESS)
{
return err_code;
}
}
else
{
reg_adc_max_value = m_res_cfg.adc_max;
reg_adc_min_value = m_res_cfg.adc_min;
ret_code_t ret = fds_record_write(&record_desc, &rec_res);
if (ret != FDS_SUCCESS)
{
return ret;
}
}
return NRF_SUCCESS;
}
For erase record I use below code,
ret_code_t fds_test_find_and_delete (uint16_t FILE_ID, uint16_t RES_KEY)
{
fds_record_desc_t record_desc;
fds_find_token_t ftok;
ftok.page=0;
ftok.p_addr=NULL;
// Loop and find records with same ID and rec key and mark them as deleted.
while (fds_record_find(FILE_ID, RES_KEY, &record_desc, &ftok) == FDS_SUCCESS)
{
fds_record_delete(&record_desc);
NRF_LOG_INFO("Deleted record ID: %d \r\n",record_desc.record_id);
}
// call the garbage collector to empty them, don't need to do this all the time, this is just for demonstration
ret_code_t ret = fds_gc();
if (ret != FDS_SUCCESS)
{
return ret;
}
return NRF_SUCCESS;
}
My problem is when I erase specific record for that I use FILE_ID and RES_KEY which is same use in flash write function. but usinf erase function I can not able to erase specific record but erase full flash.
So how can i erase specific record?
Give me suggestion for that as soon as possible.
Thanks & regards,
Urvisha Andani