Hello everybody,
I used SDK14.2 S132
I defined fds_write and read function like that;
static ret_code_t kls_fds_write(uint32_t file_id, uint32_t record_key , uint8_t write_data[], uint16_t length) { fds_record_t record; fds_record_desc_t record_desc; // Set up record. record.file_id = file_id; record.key = record_key; record.data.p_data = &write_data; record.data.length_words = length; ret_code_t rc; rc = fds_record_write(&record_desc, &record); if (rc != FDS_SUCCESS) { /* Handle error. */ NRF_LOG_INFO("FDS Write Handle error."); return rc; } NRF_LOG_INFO("Writing Record ID = %d \r\n",record_desc.record_id); return NRF_SUCCESS; } static ret_code_t kls_fds_read(uint32_t file_id, uint32_t record_key , uint8_t read_data[]) { fds_flash_record_t flash_record; fds_record_desc_t record_desc; fds_find_token_t ftok; /* It is required to zero the token before first use. */ memset(&ftok, 0x00, sizeof(fds_find_token_t)); uint32_t *data; uint32_t err_code; NRF_LOG_INFO("Start searching... \r\n"); // Loop until all records with the given key and file ID have been found. while (fds_record_find(file_id, record_key, &record_desc, &ftok) == FDS_SUCCESS) { err_code = fds_record_open(&record_desc, &flash_record); if ( err_code != FDS_SUCCESS) { return err_code; } NRF_LOG_INFO("Found Record ID = %d\r\n",record_desc.record_id); NRF_LOG_INFO("Data = "); data = (uint32_t *) flash_record.p_data; for (uint8_t i=0;i<flash_record.p_header->length_words;i++) { NRF_LOG_INFO("0x%8x ",data[i]); read_data[i] = data[i] ; } 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; } } return NRF_SUCCESS; }
Also, I wrote a function to register particular data;
static void save_data( uint8_t *p_data) { NRF_LOG_INFO("save_data"); uint8_t source_data_0[10] ; // assign source datas ******************************** for (uint32_t i = 0; i < 10; i++) { source_data_0[i] = p_data[i]; } while (flag_write_fds == false); kls_fds_write(FILE_ID, RECORD_KEY ,source_data_0, 10); NRF_LOG_RAW_HEXDUMP_INFO(source_data_0, 10); allow_advertisement = false; }
Then I used save_data like this;
save_data(nus_data_array);
Then I read data via fds_read
while (flag_write_fds == 0);
kls_fds_read(FILE_ID_SSN, RECORD_KEY_SSN, dest_data_0);
NRF_LOG_INFO("dest_data_0 : ");
NRF_LOG_HEXDUMP_INFO(dest_data_0, 10);
As a result;
0> <info> app: save_data
0> <info> app: Writing Record ID = 1
0>
0> 41 30 31 31 30 30 30 34|A0110004
0> 30 00 |0.
This is exactly what I want it to be. There is no problem, But when I want to read save_data array;
Result is;
0> <info> app: Start searching...
0> <info> app: Found Record ID = 1
0>
0> <info> app: Data =
0> <info> app: 0x20005CC8
0> <info> app: 0x 9731
0> <info> app: 0x20005CC8
0> <info> app: 0x20005CE8
0> <info> app: 0x 971B
0> <info> app: 0x 29
0> <info> app: 0x 0
0> <info> app: 0x200027B0
0> <info> app: 0x 2
0> <info> app: 0x 12A3
0> <info> app:
0>
0> <info> app: dest_data_0 :
0> <info> app: C8 31 C8 E8 1B 29 00 B0|È1Èè.).°
0> <info> app: 02 A3 |.£
It's a meaningless result.
Q1- Is the problem reading data or writing data or all of them?
Q2- What do I need to do to correctly write and read the data?