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.

TCA9535: Read from multiple device

Part Number:

Hello team,

I have a question about TCA9535 programming for read operation.

My customer would like to read port0 and port1 data from three TCA9535s like below.

  • deviceA port0, port1 --> deviceB port0, port1 --> deviceC port0, port1 --> deviceA port0, port1 --> deviceB port0, port1

 To do this, we have to proceed below sequence.

  • device A: Device Address(W) --> Register Address(Port0) --> Device Address(R) --> Data byte(Port0) --> Data byte(Port1)
  • device B: Device Address(W) --> Register Address(Port0) --> Device Address(R) --> Data byte(Port0) --> Data byte(Port1)
  • device C: Device Address(W) --> Register Address(Port0) --> Device Address(R) --> Data byte(Port0) --> Data byte(Port1)
  • device A: Device Address(W) --> Register Address(Port0) --> Device Address(R) --> Data byte(Port?) --> Data byte(Port?)
  • device B: Device Address(W) --> Register Address(Port0) --> Device Address(R) --> Data byte(Port?) --> Data byte(Port?)

In this sequence, do we need Device Address(W) --> Register Address(Port0) writes after the second cycle?

My customer would like to reduce the writes for fast reading, if possible.

Also datasheet says that "After a restart, the value of the register defined by the command byte matches the register being accessed when the restart occurred."

This means that if erase the writes in above example, data order what we read in second cycle will be Port1 then Port0, correct?

Best regards,

  • Taketo Sato said:

    Part Number: TCA9535

    Hello team,

    I have a question about TCA9535 programming for read operation.

    My customer would like to read port0 and port1 data from three TCA9535s like below.

    • deviceA port0, port1 --> deviceB port0, port1 --> deviceC port0, port1 --> deviceA port0, port1 --> deviceB port0, port1

     To do this, we have to proceed below sequence.

    • device A: Device Address(W) --> Register Address(Port0) --> Device Address(R) --> Data byte(Port0) --> Data byte(Port1)
    • device B: Device Address(W) --> Register Address(Port0) --> Device Address(R) --> Data byte(Port0) --> Data byte(Port1)
    • device C: Device Address(W) --> Register Address(Port0) --> Device Address(R) --> Data byte(Port0) --> Data byte(Port1)
    • device A: Device Address(W) --> Register Address(Port0) --> Device Address(R) --> Data byte(Port?) --> Data byte(Port?)
    • device B: Device Address(W) --> Register Address(Port0) --> Device Address(R) --> Data byte(Port?) --> Data byte(Port?)

    In this sequence, do we need Device Address(W) --> Register Address(Port0) writes after the second cycle?

    [Bobby] No, because you fulfilled the requirement of setting the internal pointer in the first transaction. You can just do the read transaction without the write.

    My customer would like to reduce the writes for fast reading, if possible.

    Also datasheet says that "After a restart, the value of the register defined by the command byte matches the register being accessed when the restart occurred."

    This means that if erase the writes in above example, data order what we read in second cycle will be Port1 then Port0, correct?

    [Bobby] Yes.

    Best regards,

  • Hello Bobby-san,

    Thank you for the answer.

    For optimizing programming, customer would like to implement below sequence, which set only internal pointer but not read data at 1st cycle.

    Is there any problem on below sequence?

    • cycle1
      • device A: Device Address(W) --> Register Address(Port0)

      • device B: Device Address(W) --> Register Address(Port0)

      • device C: Device Address(W) --> Register Address(Port0)
    • cycle2
      • device A: Device Address(R) --> Data byte(Port0) --> Data byte(Port1)
      • device B: Device Address(R) --> Data byte(Port0) --> Data byte(Port1)
      • device C: Device Address(R) --> Data byte(Port0) --> Data byte(Port1)
    • cycle3
      • device A: Device Address(R) --> Data byte(Port1) --> Data byte(Port0)
      • device B: Device Address(R) --> Data byte(Port1) --> Data byte(Port0)
      • device C: Device Address(R) --> Data byte(Port1) --> Data byte(Port0)

    Best regards,

  • This looks correct to me.

    Thanks,

    -Bobby