Hi,
I am trying to store data to flash with the support of FDS module while using Mesh. I'm currently using NRF52832 with NRF5 SDK 15.0 and Mesh 4.0.
I have tested flash_fds example from NRF5 SDK and everything looks good.
But when I integrate this example to lightswitch example in Mesh 4.0, I can't even init the module.
Please follow the code below for more details:
Initialize fds module before initializing mesh
static void initialize(void) { __LOG_INIT(LOG_SRC_APP | LOG_SRC_ACCESS | LOG_SRC_BEARER, LOG_LEVEL_INFO, LOG_CALLBACK_DEFAULT); __LOG(LOG_SRC_APP, LOG_LEVEL_INFO, "----- TouchPods V2.0 started -----\n"); ERROR_CHECK(app_timer_init()); #if BUTTON_BOARD // ERROR_CHECK(hal_buttons_init(button_event_handler)); #endif ble_stack_init(); bsp_fds_init(); #if MESH_FEATURE_GATT_ENABLED gap_params_init(); conn_params_init(); #endif mesh_init(); }
Initialize fds function
void bsp_fds_init(void) { ret_code_t rc; //NRF_LOG_INFO("FDS example started.") /* Register first to receive an event when initialization is complete. */ (void) fds_register(fds_evt_handler); rc = fds_init (); APP_ERROR_CHECK(rc); /* Wait for fds to initialize. */ wait_for_fds_ready(); rc = fds_stat(&stat); APP_ERROR_CHECK(rc); //NRF_LOG_INFO("Initializing fds..."); rc = fds_record_find(CONFIG_FILE, CONFIG_REC_KEY, &desc, &tok); if (rc == NRF_SUCCESS) { /* A config file is in flash. Let's update it. */ fds_flash_record_t config = {0}; /* Open the record and read its contents. */ rc = fds_record_open(&desc, &config); APP_ERROR_CHECK(rc); /* Copy the configuration from flash into m_dummy_cfg. */ memcpy(&m_dummy_cfg, config.p_data, sizeof(configuration_t)); // NRF_LOG_INFO("Config file found, updating boot count to %d.", m_dummy_cfg.boot_count); /* Update boot count. */ m_dummy_cfg.boot_count++; /* Close the record when done reading. */ rc = fds_record_close(&desc); APP_ERROR_CHECK(rc); /* Write the updated record to flash. */ rc = fds_record_update(&desc, &m_dummy_record); if ((rc != NRF_SUCCESS) && (rc == FDS_ERR_NO_SPACE_IN_FLASH)) { // NRF_LOG_INFO("No space in flash, delete some records to update the config file."); } else { APP_ERROR_CHECK(rc); } } else { /* System config not found; write a new one. */ // NRF_LOG_INFO("Writing config file..."); rc = fds_record_write(&desc, &m_dummy_record); if ((rc != NRF_SUCCESS) && (rc == FDS_ERR_NO_SPACE_IN_FLASH)) { // NRF_LOG_INFO("No space in flash, delete some records to update the config file."); } else { APP_ERROR_CHECK(rc); } } }
Build config
FLASH_PH_START=0x0 FLASH_PH_SIZE=0x78000 RAM_PH_START=0x20000000 RAM_PH_SIZE=0xf000 FLASH_START=0x26000 RAM_START=0x20002df0
Even when I try to initialize fds module after mesh setup, everything is stopped at wait_for_fds_ready() function in bsp_fds_init().
Thank you!