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

nfr52832 TWI scanner doesn't work properly when softdevice is flashed into the chip

Hi,

I tried to use the exactly same code in the TWI scanner example for nrf52832, SDK15.3. Everything works fine when I flashed only the example code, which has no softdevice needed. It prints out the 22 chip addresses on my board on the RTT console. But when I tried to integrate the example code into my own project, I got only three, and the addresses printed on console are wrong ones. Here is the code, everything is the same:

void u_i2c_scanner(void) {
  ret_code_t err_code;
  uint8_t address;
  uint8_t sample_data;
  
  for (address = 1; address <= TWI_ADDRESSES; address++)
    {
        err_code = nrf_drv_twi_rx(&m_twi, address, &sample_data, sizeof(sample_data));
        if (err_code == NRF_SUCCESS)
        {
            //detected_device = true;
            NRF_LOG_INFO("TWI device detected at address 0x%x.", address);
        }
        NRF_LOG_FLUSH();
    }
}

And one thing that is different with the example code is the twi_init(). Instead of using NULL as the call_back function, I have my own one:

void twi_handler(nrf_drv_twi_evt_t const * p_event, void * p_context)
{
    switch (p_event->type)
    {
        case NRF_DRV_TWI_EVT_DONE:
            if (p_event->xfer_desc.type == NRF_DRV_TWI_XFER_RX)
            {
                //data_handler(m_sample_arr); //do nothing
            }
            m_xfer_done = true;
            break;
        default:
            break;
    }
}

void u_twi_init (void)
{
    ret_code_t err_code;

    const nrf_drv_twi_config_t twi_config = {
       .scl                = ARDUINO_SCL_PIN,
       .sda                = ARDUINO_SDA_PIN,
       .frequency          = NRF_TWI_FREQ_100K,
       .interrupt_priority = APP_IRQ_PRIORITY_HIGH,
       .clear_bus_init     = false
    };

    err_code = nrf_drv_twi_init(&m_twi, &twi_config, twi_handler, NULL);
    APP_ERROR_CHECK(err_code);

    nrf_drv_twi_enable(&m_twi);
}

Parents Reply Children
No Data
Related