1
\$\begingroup\$

I have read that we have to pull-up the SDA and SCK lines because the lines are open drain/open collector. But I don't understand why can't we use pull-down?

Secondly why the value of resistance changes for different speed of operation (I think its related to weak/strong pull-up, but I don't know what weak/stong pull-up mean) ?

\$\endgroup\$
  • \$\begingroup\$ 2. Im pretty sure it's impedance matching. Higher frequency means higher impedance. Which requires higher resistance to match appropriately \$\endgroup\$ – Makoto Nov 22 '17 at 9:30
  • 2
    \$\begingroup\$ @Makoto No, it mainly has to do with bus capacitance and the faster rise times needed for higher frequency. \$\endgroup\$ – Manu3l0us Nov 22 '17 at 9:47
  • \$\begingroup\$ Oh ok that makes sense. clearly not my area :P \$\endgroup\$ – Makoto Nov 22 '17 at 9:50
2
\$\begingroup\$

I2C is an open collector. What that means is that it uses a npn transistor to pull the line from open (off), to ground (on). A pull up is used to allow variation on the voltage that the bus works at. The resistance of your pull ups change at different speeds and bus size and wire distance because you are relying on the capacitance of the bus and the value of the resistor to change the state of the bus. It's an RC network and timing changes as the frequency changes. If your resistor is too weak, it cannot change the signal fast enough at the higher i2c speeds. If it's too strong, then the same happens and you cannot put all the devices on the bus you want.

The reason that pull downs are not used is because a ground referenced signal is easier than a VCC referenced signal, if you want to be able to use arbitrary voltages on the bus independent of VCC. A high side driver PNP transistor needs a base voltage close to the collector voltage, which makes it more difficult compared to the low side NPN driver.

| improve this answer | |
\$\endgroup\$
0
\$\begingroup\$
  1. Because when the transistor in the output stage is connected to GND with its Emitter/Base. To achieve different voltage levels at the output between the conducting and non-conducting state of the transistor, you need to connect a resistor to the supply voltage to complete the circuit, i.e. a pull-up. With a resistor to ground, i.e. a pull-down, you wouldn't get any voltage difference on the output between the two states, because there is no current flowing through the resistor due to the lack of voltage difference between GND and GND.
  2. For higher speeds, you need a smaller resistor so more current can flow and charge the capacitance of the bus lines faster. If the resistance of the pull-up is too high, the rise time of you signal will be too high
| improve this answer | |
\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.