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.

[FAQ] Can I2C IO expanders be used in an open drain configuration?

Guru 59470 points
Other Parts Discussed in Thread: TCA6507

TI's I2C IO expander portfolio is made up of mostly Push-Pull CMOS output structures. Questions about using these devices as open drain instead of push pull has occasionally popped up, so can TI's IO expanders be configured to work for open drain applications?

  • Yes. The only devices which cannot support this kind of application are our PCF series IO expanders.

    This can be accomplished by:

    1)  writing to the device's output register and setting the ports/bits of interest to a logic low.

    2) write to the device's configuration register to set the device as either an output (which would drive the port's bit LOW) or as an input (this will disable the pull up and pull down FET).

    Now things to keep in mind:

    1) Some IO expanders have internal weak pull ups (~100k) while others  do not. Those that do will always bias the output to the pull up voltage. Those that don't will be floating if the output is not referenced with a pull up or pull down. This means that the input stage of the IO expander (made up of a gate tied to a CMOS structure) could float to a value causing shoot through current and higher consumption current. be mindful of this in applications which require low supply current.

    2) An Alternative approach to this would be to use an LED driver such as TCA6507. (7 bits MAX and more complicated programming involved)

    3) Do not accidentally set the device's output register to HIGH and set the configuration register to be an output as this will drive the output HIGH and potentially cause contention if the output pin is tied to a low impedance logic LOW.

  • An application note has been released to describe this procedure in more detail. 

    "How to Configure an I2C Push-Pull IO Expander to Operate as Open-Drain?"