I2C Communication Open drain benefits vs Push pull

Thread Starter


Joined Oct 26, 2017
I am reading this TI I2C App Note for understanding the I2C operation and need to understand how Multi master I2C will operate.
I was not able to understand this para in the app note, "Since no device may force a high on a line, this means that the bus will never run into a communication issue where one device may try to transmit a high, and another transmits a low, causing a short (power rail to ground). I 2C requires that if a master in a multi-master environment transmits a high, but see's that the line is low (another device is pulling it down), to halt communications because another device is using the bus. Push-pull interfaces do not allow for this type of freedom, which is a benefit of I 2C. "
This is the first para of Section 1.1 Open-Drain for Bidirectional Communication
I have some doubts :
  1. I don't understand how they are saying Open drain is better than push pull config? Can someone give an example? And when they say two devices start communicate at the same time, how is this possible? Two devices can't communicate at the same time, right? And are the two devices slaves? or masters?
  2. Please provide an example how push pull is dangerous when compared to Open drain in I2C?


Joined Sep 16, 2012
This sounds like homework so I’ll answer questions by asking some.

What would a happen if one driver is driving a node high and while another is driving the same node low?
If you load a register with data to send on an I2C bus but the bus is already being accessed with some other data what should your device do? Assuming you are not replying to a command, what mode are you in (Master or slave). What mode is the other device in that has data on the bus? Master or Slave?


Joined Sep 20, 2005
It is multimaster, so there is a number of masters and anyone can start transmitting at any time. This means two transmitters can start transmitting at the same time. So with open collector one or both can pull the line down, and they don´t collide. But when one transmits zero an the other transmits one, then the one that transimts zero pulls the line down, and the one transmitting one will see that the line state is not one, so he knows there is a collision and will wait until the line is free and try again.