AnsweredAssumed Answered

ADV7441A I2C transaction hangs

Question asked by DougRogers on Nov 6, 2011
Latest reply on Nov 8, 2011 by DaveD

We use an ADV7441A on an existing board. It has served us very well, but on rare occasions over the last six months we have run into a problem with the I2C bus becoming unusable. The only remedy is to cycle power on the entire unit since our ADV7441A reset line is tied to power-on reset.


There are two other I2C slave devices on the bus. One is never used (M24C32 EEPROM) and the other (CDCE949 clock chip) is used only during the boot sequence. Since we are constantly performing I2C transactions with the ADV7441A (we redetect input signals when idle), I suspect that there is some sort of problem that arises with the ADV7441A.


The I2C master is TI's I2C controller as found in its DM6467 part; see SPRUER0B.pdf if you're into that kind of thing. That document warns that even a software reset of the device during a transaction "can cause the I2C bus to hang". I have seen this happen, but only in development boxes where we occasionally reset the DM6467 by hand. Normally this sort of reset does not happen. Our customers use the on/off switch.


But I have seen this happen well after boot-up, so I am fairly confident that it is a transaction with the ADV7441A that is to blame, but the problem may lie with either the master or the slave.


We have an FPGA that can monitor the signals on the bus by treating the two lines as GPIOs. I can see that SDA is being driven low. This prevents the TI I2C controller from beginning a transaction. So clearly there's a slave device that is attempting to ACK or send a data bit. Recently we added the ability to control SDA and SCL from the FPGA and I have been able to unhang the bus by clocking out the stuck bit then forcing a STOP command before tristating the GPIOs again.


This solution still has its flaws, but it adds to my confidence that the problem is with the ADV7441A. It may be that we are doing something incorrectly. I will say this... we are doing a LOT of I2C transactions. We reset the ADV7441A often (which it does not do gracefully - it doesn't even finish its I2C transaction), but the next transaction will succeed. And then we reload our EDID. It's too bad that the chip doesn't have a "reset everything but EDID" like it does for HDCP keys.


Are there any known issues with the ADV7441A and I2C? Is there a minimum time that we should wait after resetting it?