FDS module not working for me

Hi,

        I am developing against a custom board built around the NRF52840. I am trying to store and retrieve values from flash using the fds module. I am not seeing any errors either in the function calls or in the fds event handler. The only thing I seem to be able to do is to iterate over all records and to delete them. I have the following test code extracted from my code base:

/** @enum record_handles
*** @brief list of handles for flash stored records
*/
enum record_handles {
   CONF_BEGIN = 0x100,      ///< valid ids start at 0x0001 so the next item will be valid
   CONF_MOVEMENT_THRES,      ///< movement threshold handle @see sample.c
   CONF_TIME_THRES,          ///< movement time threshold @see sample.c
   CONF_IDLE_TIMEOUT,        ///< activity timeout @see standby.c   
   CONF_BAR_THRES,           ///< average value when off bar
   CONF_BAR_RANGE,           ///< variation for off bar value
   CONF_BAR_ENABLED,         ///< switch on and off bar
   CONF_SAMPLE_MODE,         ///< 1, 3 or 5 tof sensors in use
   CONF_SENSOR_ID,           ///< handle for the sensor id
   CONF_LAST,                ///< max for last is 0xC000, peer manager uses this and above
};

/** @enum default values for records
*** @brief constants or default values used in configuration
*/
enum record_defaults {
   CONF_BEGIN_DEF = 0x0,
   CONF_MOVEMENT_THRES_DEF = 30,          ///< (mm) movement threshold @see sample.c
   CONF_TIME_THRES_DEF = 10,              ///< (sec) movement time threshold @see sample.c
   CONF_IDLE_TIMEOUT_DEF = 600,           ///< (sec) activity timeout @see standby.c   
   CONF_BAR_THRES_DEF = 260,              ///< average value when off bar- off bar: 252-268
   CONF_BAR_RANGE_DEF = 12,               ///< variation for off bar value
   CONF_BAR_ENABLED_DEF = true,           ///< switch on and off bar
   CONF_SAMPLE_MODE_DEF = 1,              ///< 1, 3 or 5 tof sensors in use
   CONF_SENSOR_ID_DEF = 0x37313030,       ///< value for the sensor id
};


#define CONF_FILEHANDLE 0xF010            ///< conf file handle - range 0x0000 to 0xbfff

bool conf_is_started2 = false;
bool conf_write_done2 = false;

/** @brief configuration storage event handler
*** @param[in] the fds event structure
*/
void on_FDS_event(fds_evt_t const *p_evt) {
NRF_LOG_INFO("fds event: %d %d\r\n", p_evt->id, (p_evt->result));
    switch (p_evt->id) {
        case FDS_EVT_INIT:
            if (p_evt->result == FDS_SUCCESS) {
                conf_is_started2 = true;
            }
            break;
        case FDS_EVT_WRITE: 
            conf_write_done2 = true;
NRF_LOG_INFO("EVT_WRITE: %d", p_evt->result);
            if (p_evt->result != FDS_SUCCESS) {
               NRF_LOG_INFO("conf evt: failed write 0x%x", p_evt->result);
            }
            break;
        case FDS_EVT_UPDATE:
            if (p_evt->result != FDS_SUCCESS) {
               NRF_LOG_INFO("conf evt: failed update 0x%x", p_evt->result);
            }
            break;
        case FDS_EVT_DEL_RECORD:
            if (p_evt->result != FDS_SUCCESS) {
               NRF_LOG_INFO("conf evt: failed del rec 0x%x", p_evt->result);
            }
            break;
        case FDS_EVT_DEL_FILE:
            if (p_evt->result != FDS_SUCCESS) {
               NRF_LOG_INFO("conf evt: failed del file 0x%x", p_evt->result);
            }
            break;
        case FDS_EVT_GC:
            if (p_evt->result != FDS_SUCCESS) {
               NRF_LOG_INFO("conf evt: failed GC 0x%x", p_evt->result);
            }
            break;
        default:
            break;
    }
}

void conf_2dump(void) {
fds_record_desc_t desc;
fds_find_token_t  tok;
NRF_LOG_INFO("DUMPING...");
    memset(&tok, 0x00, sizeof(fds_find_token_t));
    memset(&desc, 0x00, sizeof(fds_record_desc_t ));
    while(fds_record_iterate(&desc, &tok) != FDS_ERR_NOT_FOUND) {
          NRF_LOG_INFO("Exists record: %d", desc.record_id);
    }
NRF_LOG_INFO("DUMPED.");

}

int main(void) {   
    memset(NRF_SECTION_START_ADDR(rtt), 0, NRF_SECTION_LENGTH(rtt));
    log_init();
fds_record_desc_t desc;
fds_find_token_t  tok;
fds_stat_t stat;
fds_record_t record;
ret_code_t err_code;
const uint32_t record_def_values[9] = {CONF_BEGIN_DEF, 
                                       CONF_MOVEMENT_THRES_DEF, 
                                       CONF_TIME_THRES_DEF,
                                       CONF_IDLE_TIMEOUT_DEF,
                                       CONF_BAR_THRES,
                                       CONF_BAR_RANGE,
                                       CONF_BAR_ENABLED,
                                       CONF_SAMPLE_MODE_DEF,
                                       CONF_SENSOR_ID_DEF};
    // register a handler
    err_code = fds_register(on_FDS_event);
    if (err_code != FDS_SUCCESS) {
       NRF_LOG_INFO("conf init: failed to register event handler0x%x", err_code);
       return err_code;
    }

    // init the fds api
    err_code = fds_init();
    if (err_code != FDS_SUCCESS) {
       NRF_LOG_INFO("conf init: failed to init the api 0x%x", err_code);
       return err_code;
    }
    while (!conf_is_started2)
           ;
    fds_stat(&stat);
    memset(&tok, 0x00, sizeof(fds_find_token_t));
    memset(&desc, 0x00, sizeof(fds_record_desc_t ));
    conf_2dump();
    while(fds_record_iterate(&desc, &tok) != FDS_ERR_NOT_FOUND) {
          NRF_LOG_INFO("Exists record: %d", desc.record_id);
          fds_record_delete(&desc);
          
    }
    conf_2dump();
    for (int i = CONF_BEGIN + 1; i < CONF_LAST; i++) {
        memset(&desc, 0x00, sizeof(fds_record_desc_t ));
        record.file_id = CONF_FILEHANDLE;
        record.key = i;
        record.data.p_data =  &record_def_values[i - CONF_BEGIN];;
        record.data.length_words = 1;  //32bit width words
        conf_write_done2 = false;
        err_code = fds_record_write(&desc, &record);
        while(!conf_write_done2)                     
                ;
    }
    conf_2dump();
}

a typical run produces:

<info> app: fds event: 0 0

<info> app: DUMPING...
<info> app: Exists record: 9
<info> app: Exists record: 10
<info> app: Exists record: 11
<info> app: Exists record: 12
<info> app: Exists record: 13
<info> app: Exists record: 14
<info> app: Exists record: 15
<info> app: Exists record: 16
<info> app: DUMPED.
<info> app: Exists record: 9
<info> app: fds event: 3 0

<info> app: Exists record: 10
<info> app: fds event: 3 0

<info> app: Exists record: 11
<info> app: fds event: 3 0

<info> app: Exists record: 12
<info> app: fds event: 3 0

<info> app: Exists record: 13
<info> app: fds event: 3 0

<info> app: Exists record: 14
<info> app: fds event: 1 0

<info> app: EVT_WRITE: 0
<info> app: fds event: 1 0

<info> app: EVT_WRITE: 0
<info> app: fds event: 1 0

<info> app: EVT_WRITE: 0
<info> app: fds event: 1 0

<info> app: EVT_WRITE: 0
<info> app: DUMPING...
<info> app: Exists record: 17
<info> app: Exists record: 18
<info> app: Exists record: 19
<info> app: Exists record: 20
<info> app: Exists record: 21
<info> app: Exists record: 22
<info> app: Exists record: 23
<info> app: Exists record: 24
<info> app: DUMPED.

I am developing against SDK 15.0 using SES

Many thanks in advance

Paul