This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TCA9555: TCA9555 I2C dead-lock recovery

Part Number: TCA9555
Other Parts Discussed in Thread: TCA9539

Hi,

I'm using four TCA9555 devices over a single I2C bus at 100KHz. They work as expected but in some cases (i.e. strong EMI applied on the board) the bus is blocked and cannot be recovered (except by switching the power supply On to Off). Since this device does not have a reset input, I wonder if it would be possible to restart the I2C bus to the IDLE state in some way using the SDA and SCL lines. Is this feasible?

regards,
gaston

  • Hello Gaston,

    "I wonder if it would be possible to restart the I2C bus to the IDLE state in some way using the SDA and SCL lines. Is this feasible?"

    The only method I know of is to send 18 clock pulses on SCL to try to reset the state machine though it could be possible it is in an unknown state and not respond to this.

    If this does not work, then the only way to reset the device would be to do a power cycle (turn off and back on).

    Thanks,

    -Bobby

  • Hello Bobby,

    Interesting... Where can I find some information about this 'resuscitation' method? Is it related to a specific functionality of the device or is it part of I2C specification?

    regards,
    gaston

  • Hello Gaston,

    "Where can I find some information about this 'resuscitation' method?"

    This is specified in I2C  standard though I mention 18 clock pulses to be sure the device releases the bus the standard states 9 clock pulses.

    Here is a snip-it on page 20 of the standard:

    "Is it related to a specific functionality of the device"

    -No as this should work with all I2C slaves. It is because the slave's state machine is no longer in alignment with the actual I2C clock. This could happen because of noise, hot plug event, parasitic inductance generating ringing on the line, or cross talk to the I2C clock line. The 9 clock pulses should reset the state machine of the slave so it can see a stop condition.

    I should mention as well that there are some devices out there with a feature called "stuck bus recovery" which will actually detect if the SDA line is latched low and will automatically generate 9 clock pulses to try to release the bus.

    Thanks,

    -Bobby

  • Bobby, thank you very much for your detailed explanation. In this particular case (controller for elevators) I can not assume any risk. Therefore I prefer to switch to a device with a reset line (i.e. TCA9539, that supports up to 4 slave address).

    regards,
    gaston