Please note that E2E has undergone a major upgrade. Before logging in, please clear ALL your browser's cache and cookies.

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.

TCA9509: Usage on pins configured as either I2C or SPI

Part Number: TCA9509
Other Parts Discussed in Thread: TCA9517A, TCA9617B

In our microcontroller-based design, we have a requirement where two of its pins must sometimes function as an I2C interface (SCL, SDA), and sometimes as part of a SPI interface (SCK, MOSI).  The application will control whether the I2C or SPI peripheral is muxed onto the pins and switch back and forth between the two as it runs.  Some other specs:

  • Need to level-shift voltage from microcontroller +3.3V up to external device +5.0V.
  • I2C repeater function (may need to drive I2C over a cable).
  • Low data rate, less than 100 kbit/sec

Would TCA9509 be appropriate to use between microcontroller and external device in this case?  Anything to be careful about while using TCA9509 and operating in SPI mode?



  • The TCA9509 can handle any signals that are electrically the same as I²C signals. Can the pins in SPI mode be configured as open drain?

  • Thank you for the response Clemens.  In SPI mode, the microcontroller is the master and the pins would be push-pull.

    [microcontroller +3.3V]  <----->  [ A    TCA9509    B ]  <----->  [ext device +5.0V]

    I guess the real core of my question is whether or not TCA9509 could also function as a uni-directional buffer (A --> B) with its A-inputs being driven by push-pull outputs.

  • 1) If you use a push pull signal on side A, you could end up getting the bus stuck low periodically (I've seen someone try to drive an MDIO signal using one of our buffers and ended up getting signal integrity errors since the buffer could not support the speed)

    2) If the ESD cells on the SDA/SCL line are edge rate triggered by design then if you have a fast rising due to the pull up driver then you could accidentally trigger the ESD cell.

    "I guess the real core of my question is whether or not TCA9509 could also function as a uni-directional buffer (A --> B) with its A-inputs being driven by push-pull outputs."

    Some static offset buffers have an unwrapping artifact due to their design, my gut feeling here is that this device is the same and will end up seeing bus contention if you try to pull the signal up while A side is still unwrapping (waiting for B side to go above a certain threshold before releasing).


  • Section 5 of the datasheet says that

    the A-side uses a current sensing mechanism to detect the input or output LOW signal which prevents bus lock-up.

    If the A-side is pulled up not by the internal current source but by the SPI master, then that current-sensing mechanism might not work.

    Other I²C level shifters like the TCA9517A or TCA9617B do not have internal current sources and have the voltage-offset drivers on the B side.

  • Thanks, I had concerns about using TCA9509 in the manner I described.  So would TCA9517A be better for what I am trying to do?

    I would have the microcontroller I2C/SPI master connected to the B-side because the microcontroller input VIL threshold is greater than the voltage-offset driver output of about +0.5V.  The microcontroller is also able to drive output VOL of less than the VILC value of +0.45V.

    Then on A-side, I just need to make sure the "external device" is able to drive a logic-low voltage of 0.3*(VCCA) or less to transmit data from A-->B.

    I have read a suggestion in another E2E post that having the A-side pull-up faster than the B-side (Rpu on A-side is less than Rpu on B-side) could help avoid artifacts due to unwrapping.  Is this correct?

    [microcontroller +3.3V]  <----->  [ B    TCA9517A    A ]  <----->  [ext device +5.0V]

  • The TCA9517A does not allow VCCA > VCCB.

  • I do not see any specification in the TCA9517A datasheet that says VCCA cannot be greater than VCCB.  Did I miss something somewhere?

    I also asked about this in a separate E2E post and got a conflicting answer.

  • It says so on the web site: TCA9517A

    But I notice that "VCCA < VCCB" was removed in revision C of the datasheet, so I guess the web site is wrong.