This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MSPM0G3507: I2C Bus Busy

Part Number: MSPM0G3507

Tool/software:

Hello i am Currently using the MSPM0 G3507 .The i2c driver is indicating that the i2c bus is busy, but the register window shows that it is idle. Additionally, the physical status of the SDA and SCL lines are also idle. However, the API call continues to return a busy status when we free run. The i2c baud rate is 400kbs, and using the Controller transfer function which sends the start and stop automatically. In the image i2cBusBusy the gpio toggle is supposed tob waiting for the data to be completely transferred but the condition fails. Using the busy bit from the MSR register if the i2c is bus or not. The code snipet is attached below. Introducing a small delay of 10us before the while ((DL_I2C_getControllerStatus(I2C0_INST) &
DL_I2C_CONTROLLER_STATUS_BUSY_BUS) solves the issue. But need to understand why exactly this is happening.

  • Hi,

    The BUS BUSY refer to I2C bus busy, and the bit changes based on the START and STOP conditions, and will be set if the START condition is detected in I2C Bus. And from the image, the I2C START has occur when you check I2C status.

  • I also have observed a measurable delay between starting a transaction and the bus becoming BUSY. I ended up instead waiting for a DONE event (RIS:RXDONE/TXDONE) along with checking for MSR:IDLE prior to the next transaction.

    [Edit: RXDONE/RXDONE don't seem to happen in case of a NACK so I also check for MSR:ERR.]