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.

PCA9306: violating the 0.6V minimum between VREF1 and VREF2 may cause I2C bus hangup.

Other Parts Discussed in Thread: PCA9306

Hi,

We are encountering an issue on the I2C bus of our product that has a PCA9306 I2C voltage level translator.  Very rarely, the bus is hung with the data line being driven low indefinitely.

Our setup is such that one of our slave devices runs at 2.8V, while the rest of the bus (master and the rest of the slaves) are at 3.3V.  The hangup usually occurs between the master and a slave that is not connected via the PCA9306.  The master is a TI DM369 DaVinci processor.

I realize that this is outside the range of this part to translate under the 0.6V limit, but could you speculate what might be the consequence of running this part with a 0.5V drop instead?  Could it change the timing of the bus for transactions between the master and other slaves (those not connected via the voltage translator).  Or would the consequence strictly be incorrect voltage levels?

Thanks for your help.

Andre

  • Hello Andre,

    THanks for your question.

    Let me repeat back what I understood from your post to make sure we're on the same page:
    1) You have a master and slave that are on the 3.3V i2C bus. You also have a slave on a 2.8V bus which you connect to the 3.3V i2c bus via the PCA9306.
    2) At some transactions, during an I2C communication between a master and a slave on the 3.3V bus (not with 2.8V slave), but bus gets locked low indefinitely.
    3) You have VREF1 pin connected to 2.8V line. You have VREF2 pin and EN pin shorted together, and then that node is pulled up to 3.3V through a 200k pull-up resistor.


    If the above is true, then I don't think the PCA9306 is to blame here, unless you can confirm that it is the 2.8V slave which latches the bus low.

    While you are violating the VREF2 >= VREF1 + 0.6V requirement, this will only result in incorrect translation voltages. Since your voltages are pretty close to 3.3V, I actually think that you should experience no real issue with this configuration, but you may see that your VOL is not quite as low as it could be.

    The PCA9306 has no internal circuitry to pull the bus low, so the PCA9306 actually cannot pull the bus low. It merely acts as a switch which requires a slave on one side to sink the total of all the bus currents to transmit a 0 to both sides.


    Some things to look for:
    1) Make sure that your total resistance on both sides is not too low. Remember that any device that transmits a 0 on the 3.3V bus, must also sink the current of the 2.8V bus (and the other way around too). So if your pull-up resistor value is too low, you will get very high currents flowing through the slave devices, which can cause damage or unexpected behavior. For a normal sized bus, I would recommend 4k7 pull-ups on a 3.3V line (as well as the 2.8V). If your bus length is short, you can even go higher to 10k.

    2) When the bus latches low, try shorting the EN pin of the PCA9306 to ground, and see if this solves the issue. If it does, this will be a result of the 2.8V slave

    3) If shorting EN to ground doesn't solve issue, then the issue lies on the 3.3V bus, and will likely continue, even if the PCA9306 is disconnected.

    Could you provide any schematics or a scope shot of the transaction prior to bus latchup (including bus latchup). An I2C scope shot is worth a thousand words when debugging I2C problems.