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
