MSPM0G3507: MSPM0G3507: I2C1 Controller (callback mode) ISR stops firing after bus fault, reset the i2c controller, but failed

Part Number: MSPM0G3507

I have an MSPM0G3507 with I2C0 as Target (responding to an upstream master at 0x50) and I2C1 as Controller (reading an NSA2300 sensor at 0x6D and a downstream MCU at 0x50 on a separate physical bus). Both I2C instances run at 100kHz.

When the I2C1 bus experiences a fault (e.g., slave holds SCL low, or a hot-plug glitch), my error recovery performs:

I2C_close(i2cHandle);
i2cClearBus();          // GPIO bit-bang: 9 SCL pulses + STOP condition
i2cHandle = I2C_open(CONFIG_I2C_0, &i2cParams);
I2C_setClockTimeout(i2cHandle, ...);

After this sequence, I2C_open() returns a non-NULL handle (success), and I2C_transfer() returns true (transfer queued). But the transfer callback never fires. The ISR (I2C1_IRQHandler) appears to stop triggering entirely. Every subsequent transfer times out the same way — I2C_transfer() returns true, but the callback never runs, even for transactions where the slave ACKs its address.

hdd_i2c_payload_manager.c ti_msp_dl_config.c i2c_controller.c ti_drivers_config.c 

 

image.png