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.

pca9557 interface

Other Parts Discussed in Thread: PCA9557, TCA9539, PCF8574

I am using the PCA9557 SMBus chip, and on reading the data sheet, it looks like every transfer requires 3 bytes instead of the normal 2. Is this correct, or do you just have to send a configuration byte at startup, and from then on it follows the SMBus convention of 2 bytes per transfer in both directions?

Bob Montgomery

  • Hi Bob,

    You are correct for PCA9557. I2C/SMBus slave address, register address (with R/W =0), and then again Slave address (with R/W=1) needs to be sent first in the I2C transaction to read a register.

    We have the capbility in the 16-bit IO expanders (like TCA9539) to read the two pair registers (e.g. 0 and 1, 2 and 3, etc.) together (auto-increment feature) .

    Thanks,

    Rajan

  • If I write a byte to a PCA9557, how do I know if it thought it was a config byte or output data byte? And how can I read the config byte? Unless I am missing something, this 'improvement' made the device very hard to understand and use, and does not seem to conform to the SMBus standard anymore. Is there an Ap Note on how to use it. My breadboard worked fine using PCF8574 chips, but they are in the SOIC-16 wide package - I need the narrow SOIC-16. Does TI make another SMBus chip without the config register (similar to the  PCF8574 I was using in the breadboard),  in the narrow SOIC-16 package?

  • Hello Bob,

    I replied to your other E2E thread. I would suggest taking a look at this application report, which outlines the newer I2C data format. www.ti.com/.../slva704.pdf

    I think starting at 3: I2C Data would be the applicable place to start. Since you are already familiar with I2C.
  • I have a board with one PCA9557 wired for address 1. I can now write a byte to tthe Output register, and get an ACK after each byte sent (0x32 ACK 0x01 ACK 0xFF ACK). I am having a problem with reading a byte from the Input regsister. I send 0x32 ACK 0x00 ACK 0x33 and don't get an ACK. Am I doing something wrong?

    Bob

  • Hi Bob,

    The problem that I'm seeing with your read command is that you need to indicate a stop/start or a reset after you've specified register 0x00. It looks like you've tried to initiate the read right after identifying the address without a stop/start which is the reason you would get a NACK.

    Thanks,
    Siby