Electronic – 2C lines use open drain driver instead of tri-state drivers

i2copen-collectoropen-draintri-state

My understanding is that I2C lines use pull-up resistors to passively pull up the bus to logic high because the drivers used on the bus are active drivers, namely open collector/open-drain. Since open collector/open-drain drivers can drive the line low but not high, the issue of bus contention is mitigated.

My question is however, why does the I2C protocol use these drivers as opposed to tri-state drivers? If you have multiple tri-state output drivers connected to the same bus, as long as the enable signals for the tri-states are mutually exclusive, shouldn't we be able to take care of bus contention and also achieve faster rise times in comparison to open-collector/open-drain topologies?

Best Answer

...as long as the enable signals for the tri-states are mutually exclusive...

The trick is how to do this without adding another wire, or multiple wires to tell each peripheral when it is allowed to drive the bus.

The main advantage of I2C is that it only uses two wires, and two pins on each chip connected to the bus.

If you're willing to trade pins for speed, consider using SPI, which can generally achieve higher speed than I2C, but needs 3 or 4 pins per device.