Electronic – Why does I²C only have pull-up resistors (interview question)

i2cmicrocontrollerpullup

The interviewer wanted to know why pull-up resistors are used on SDA and SCL when the opposite logic can also be implemented. Is there an explanation for why pull-up resistor usage is the chosen design?

Best Answer

To expand on Jon's answer a little:

Yes, it is all to do with which MOSFETs you want to use.

N-channel MOSFETs are much better for switching logic than P-channel because:

  • They generally have a much lower on resistance (\$R_{DSON}\$)
  • They switch on and off faster

So for an open-drain configuration (which is what I2C is) it's much cheaper and easier to create it using an "idle high" arrangement with N-channel MOSFETs rather than "idle low" with P-channel MOSFETs.

A third option would be "idle low" using N-channel MOSFETs, but for that you require a high voltage gate driver to raise the gate voltage far enough above the source voltage for the MOSFET to switch on. Not practical for small communications buses, but this arrangement is actually used quite commonly in H-bridges for motor driving where you want to have the same (or similar) response between the high side and low side of the H-bridge. Using P-channel and N-channel pairs in an H-bridge typically means you have to incorporate a dead zone between switching the P-channel off and switching the N-channel on since it takes so much longer, and that reduces your power efficiency.

But for small communications buses like I2C where you need high speed, low cost, and simplicity of use, the "idle high" with N-channel MOSFETs and pull-up resistors is by far the most cost effective.