TWI bus freeze after several thousand tx/rx cycles

I'm periodically polling a TWI sensor with a blocking call, as in

ret_code_t err_code;
m_xfer_done = false;

err_code = nrf_drv_twi_tx(&i2c, address, subAddress, 1, true);
while (m_xfer_done == false) {};
if (err_code == NRF_SUCCESS) {
        m_xfer_done = false;
        err_code = nrf_drv_twi_rx(&i2c, address, dest, count);
        while (m_xfer_done == false) {};

This works fine about 3000 times, and then comes to grinding halt. I'm reading 8 bytes per nrf_drv_twi_rx. My first guess is running out of memory, but why? I'm just sampling the bus and updating the values of a static unit8_t dest[8].

  • What does the APP_ERROR_CHECK() tell you? Does it ever end up in there with an error code, or is it stuck in the while loop waiting for the m_xfer_done flag?

  • I have no idea why this helps, but all problems vanish when I enable the softdevice. It's weird, since I'm not actually using the softdevice, but all I've done is


    and now things are rock-solid. 28,000 data collection and FLASH-write cycles and still going strong....