LIS2DW12 stops responding on I2C until power cycle — recovery options
Hi
Setup: LIS2DW12 in I2C mode, with CS and SA0 tied to VDD_IO and RES (pin 7) to GND. VDD and VDD_IO are always on. An ST25DV shares the bus. With the original 100 kΩ pull-ups we measured t_HIGH(SCL) = 3.2 µs, below the 4.0 µs minimum, and edges of about 2.2 µs.
The firmware sets SOFT_RESET by read-modify-write on CTRL2 on every sleep cycle, then sets BDU by read-modify-write.
Symptom: after some time the sensor stops acknowledging at any address. The ST25DV on the same bus still works. MCU reset and 9 SCL clocks + STOP do not help.
Bus already fixed: we replaced the external pull-ups with 10 kΩ, as in Figure 4, and adjusted the I2C timing register. t_HIGH is now about 7 µs and f(SCL) is about 67 kHz, within Table 7.
Questions:
1. Apart from I2C_DISABLE = 1, what can make the sensor stop responding on I2C until power is removed? Could the previous out-of-spec timing have caused a wrong register write?
2. Is a read-modify-write of CTRL2 right after SOFT_RESET safe? Is there a minimum wait time after it?
3. If only VDD is removed (VDD_IO kept), are all registers, including I2C_DISABLE, reset? What minimum off-time is needed?
4. What supply current should we expect in this locked state? Can it exceed the datasheet values?
5. What design do you recommend for recovery in a battery product: VDD on a GPIO, or another option?
BR
Gilberto
