Hi,
I am using nrf52832AA, SDK15.0, SD s131.
In some cases, an NRF_DRV_TWI_EVT_ADDRESS_NACK event occurs during I2C communication with the IQS263 sensor.
It would be nice if I could not get a NACK, but I do not know the exact cause yet.
How do I respond when I receive a NACK?
void IQS263_reg_read(uint8_t reg, uint8_t* rx, uint8_t len){
ret_code_t err_code;
uint8_t myTX[1] = {reg};
m_xfer_done = false;
err_code = nrf_drv_twi_tx(&CDC_twi_master, CDC_ADDRESS, myTX, 1, true);
APP_ERROR_CHECK(err_code);
while (m_xfer_done == false);
err_code = nrf_drv_twi_rx(&CDC_twi_master, CDC_ADDRESS, rx, len);
APP_ERROR_CHECK(err_code);
nrf_delay_ms(1); // If not, it receives a NACK.
}
The above code works fine. (I do not know if it does not work without 1ms delay)
However, when receiving a NACK, while (m_xfer_done == false) does not exit.
What should I do when I receive a NACK?
Do I have to send it back to do while?
The event handler is as follows.
void CDC_handler(nrf_drv_twi_evt_t const * p_event, void * p_context)
{
switch (p_event->type)
{
case NRF_DRV_TWI_EVT_DONE:
m_xfer_done = true;
break;
case NRF_DRV_TWI_EVT_ADDRESS_NACK:
break;
case NRF_DRV_TWI_EVT_DATA_NACK:
break;
default:
break;
}
}
Thank you in advance.
Have a nice day.