I’m having some issues with SMBus communication between the bq20Z45 and my Linear LTC4100 charger. When I connect the battery to my charger eval card, I observed a fair number of bq20z45-mastered transactions targeting the charger which were no-acked. However, using an external master the same transactions were ACKed 100% of the time. This issue is far worse when the battery is connected to the charger on my storage controller
I believe the issue is associated with some odd behavior by the fuel gauge after a START is issued. It looks like the bq20z45 briefly releases SDA roughly co-incident with the falling edge of clock following START. It then commences it’s address phase (first bit happens to be a ‘0’) and pulls SDA back low. However this glitch is very close to falling SCL and This is a hold time violation for SMBus (300ns hold time requirement), Interestingly, I2C has a 0 hold time requirement for this. Making the problem even worse, the LTC4100 charger includes rise time acceleration circuitry which detects the rising SDA and yanks it high quickly.