AnsweredAssumed Answered

I2C Slave Nack [ADuCM350]

Question asked by gimbal on Jun 3, 2018

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