AnsweredAssumed Answered

I2C Slave Nack [ADuCM350]

Question asked by gimbal on Jun 3, 2018
Latest reply on Jun 24, 2018 by mark.ramos

I'm trying to establish communication between the ADuCM350 and another ARM Cortex M3 part that I have used many times and am familiar with. The ADuCM350 is the slave in my setup. I can use the other micro to write to the ADuCM but when I try to read from it the ADuCM NACKs the address. I'm using the following calls:

 

adi_I2C_SlaveTransmit(hDevice, (slaveID >> 1), pTxData, 10 )

adi_I2C_SlaveReceive(hDevice, (slaveID >> 1), rxBuff, 100, false )

 

Also, the only interrupt event I ever see is the STOP event. No Rx / Tx complete or other events. Is there a better example available than the limited loopback test that shows how to setup the I2C peripheral or some documentation on the API?

 

 

void i2c_initialize ( void )
{
/* Initialize I2C driver */
if (ADI_I2C_SUCCESS != adi_I2C_SlaveInit(ADI_I2C_DEVID_0, &hDevice)) {
FAIL("FAIL: adi_I2C_MasterInit");
}

/* setup a callback */
if (ADI_I2C_SUCCESS != adi_I2C_RegisterCallback(hDevice, i2c_handler, hDevice)) {
FAIL("FAIL: adi_I2C_MasterInit");
}

/* disable blocking mode... i.e., poll for completion */
if (ADI_I2C_SUCCESS != adi_I2C_SetBlockingMode(hDevice, false)) {
FAIL("FAIL: adi_I2C_SetBlockingMode");
}

/* Wait for message */
i2c_read_next();
}

Attachments

Outcomes