2026-01-16 10:13 AM
Problem description:
We are seeing a hard I2C bus lockup involving an ISM330 IMU and an IIS2MDC magnetometer on the same bus.
The failure mode is that SDA is driven low permanently, and the bus cannot be recovered by standard I2C recovery procedures (9–20 SCL pulses with SDA released).
This occurs both immediately after MCU firmware is flashed and during nominal runtime, seemingly at random.
Once the condition occurs, a full MCU reset does not recover the bus. On a bench setup we confirmed by probing that SDA is physically held low.
Hardware configuration:
MCU: STM32 acting as I2C master
Devices on bus:
These are the only slaves on the bus.
Standard I2C pull-ups are used, with no level shifting.
I've done additional testing to try to find the problematic device by removing devices and reconfiguring connections (auxiliary I2C), see results below.
Observed behavior by configuration:
During failure, probing shows both main SDA and SDx (when using auxiliary I2C) are held low
In the direct-connection case, forced SCL clocking (9–20 pulses) does not release SDA.
In the auxiliary I2C case, forced clocking sometimes recovers the bus, but the fault still occurs.
Key observation:
Questions for ST engineering:
2026-01-16 10:52 AM
Look at the SDA/SCL on a logic analyzer and see what happens when SDA gets stuck low.
CS lines are driven high?
SCL line remains free when SDA is stuck low?