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.

Unexpect output state of PCA9557

Other Parts Discussed in Thread: PCA9557

Hi all,

We encountered an unexpected behavior with PCA9557.

An I2C write command was issued by our controller followed by an I2C Write/Read command to do the validation.

Sometimes, we got a validation failure case (compare the value between write and write/read).

For example:

Step 1. Issue a write command to set the output register to 0xef

Step 2. Write/Read the output register to check the value. Sometimes we would not get 0xef but 0x01.

Does TI side have any errata on this I/O Expander?

  • The I²C protocol does not have any error checking.

    Please show an oscilloscope trace of the failed writes and read.

  • Hi Evan,

    From a device perspective, our PCA devices do have an issue with bad power ups in the case where a bad ramp or power up from non GND occurs, the device can randomly assign values to all internal registers after power up. My guess is you had a bad power up and the polarity registers got flipped. When you see a case where you read 0x01h, can you also read the polarity registers and see what they are set to?

    -Bobby

  • Reasonable. But, it's hard to do that in my case because the machine is on our customer's side.

  • The failure case is in the runtime and the polarity registers will be initialized while controller FW boots up only.
    If I have a bad power-up situation in this case, I don't think the polarity registers will be set to the correct value (because I only do it when FW booted up).
    That means I should always read 0x01 at that time. And I believe the I/O Expander output state is changed to 0x01 indeed because the downstream devices are power cycled (I use PCA9557 as a power control pin, which is connected to a Gate of MOSFET). I will list this one in my checklist also.

  • If the FW is initializing all of the registers after power up then I suspect this isn't why you're seeing incorrect data being read/written. 

    We may want to start looking at scopeshots to see if the data is properly being sent and ACK'd when you send 0xef. 

    -Bobby