This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

mesh assert by flashing

Hellou, I am developing apllication , which is modification of light switch - client model. 

I have problem by writing data to internal flash. When I write data to internal flash before function mesh_core_setup(), everything work fine. But when i need data in after inincialization mesh network i receive MESH_ASSERT error. By writing to internal flash, i disable mesh network, but MESH ALLERT is received. 

I use this 2 functions:

void set_flash_struct(uint32_t start_address, uint32_t stop_address, nrf_fstorage_evt_handler_t event)
{
m_fs.start_addr = start_address;
m_fs.end_addr = stop_address;
m_fs.evt_handler = event;
}

void flash_write_sd(volatile uint32_t address, volatile uint8_t* array, volatile uint32_t wr_size)
{
uint32_t err_ret = 0;
nrf_fstorage_api_t * p_fs_api;

static bool succes = false;
extern volatile bool memory_change;
#define W_DEBUG 1

err_ret = nrf_mesh_disable();
SEGGER_RTT_printf(DEBUG_WINDOW,"\nFLASH_WRITE_SD():NRF_MESH_DISABLE:%d\n",err_ret);
#ifdef SOFTDEVICE_PRESENT
p_fs_api = &nrf_fstorage_sd;
#endif
err_ret = 0;
/* m_fs.start_addr = STORAGE_START_ADDRESS;
m_fs.end_addr = STORAGE_STOP_ADDRESS;
m_fs.evt_handler = fstorage_evt_handler;*/
// while(nrf_fstorage_is_busy(&m_fs)==true);
err_ret = nrf_fstorage_init(&m_fs,p_fs_api,NULL);
#if(W_DEBUG)
if(err_ret != NRF_SUCCESS)
{
SEGGER_RTT_printf(DEBUG_WINDOW, "\n FLASH_WRITE_SD() - ERR_INIT");
// return false;
}
#endif
err_ret = 0;
while(nrf_fstorage_is_busy(&m_fs)==true);
// err_ret = nrf_fstorage_erase(&m_fs,m_fs.start_addr,1,NULL);
err_ret = nrf_fstorage_erase(&m_fs,m_fs.start_addr,1,NULL);
#if(W_DEBUG)
if(err_ret != NRF_SUCCESS)
{
SEGGER_RTT_printf(DEBUG_WINDOW, "\n FLASH_WRITE_SD() - ERR_ERASE");
//return false;
}
#endif
while(nrf_fstorage_is_busy(&m_fs)==true);
err_ret = nrf_fstorage_write(&m_fs,m_fs.start_addr,array,wr_size,NULL);
#if(W_DEBUG)
if(err_ret != NRF_SUCCESS)
{
SEGGER_RTT_printf(DEBUG_WINDOW, "\n FLASH_WRITE_SD() - ERR_WRITE");
// return false;
}
#endif
err_ret = 0;
// while(nrf_fstorage_is_busy(&m_fs)==true);
memory_change = false;
nrf_fstorage_uninit(&m_fs,NULL);
nrf_mesh_enable();
#if(W_DEBUG)
SEGGER_RTT_printf(DEBUG_WINDOW, "\n FLASH_WRITE_SD() - SUCCESS");
#endif
// return true;

}

Function set_flash_struct() set address range for operation with flash , and  flash_write_sd() write data to flash. Function are work good before inicialization mesh network, but after inicialization mesh network its not work properly. Mesh is disable by operation with flash storage.  This is also can see on attached picture, see attached file .

Related