I2C Termination resistors

Hello all!
I am learning about the I2C protocol right now. A while ago, I watched a video where the dude said that the SCL and SDA lines going from the Master to the Slave need to have some sort of "Termination resistors".
I cant find the video and need some advice on what these Termination resistors are and if I really need them for every I2C project I run.

  1. I had success communicating between a UNO and a NANO using the I2C protocol without using the termination resistors. Did I just get lucky? The slave did what it was supposed to do as intended.
  2. Is the general resistor setup in the pic below good enough to satisfy the I2C termination resistor requirment?
  3. What value resistors need to be used , if they are needed?

The pic of my intended setup with the Termination resistors is below.

Thank you all for your replies!

BTW, a few weeks ago, I said in one of my previous posts that I will give a small donation to a kids hospital for all the replies that you guys gave. Here is the receipt for that. Thanks again.

Most Arduinos have pullups on board. Many modules also have pullups which may have to be cut off for not overloading the bus.

Ty for the reply. So I am assuming that when I have a project where I am using just the ATMega chip, then I need to build my own Termination ressitor setup, correct?


They are called pull up resistors, termination resistors are something else.

Pull up resistors hold SCA and SCL high, the chips then pull them low as needed to send the data.

If you send an electrical signal down a long cable then when it reaches the end it must be correctly terminated otherwise it gets reflected back to where it came from. Termination resistors make sure this doesn't happen. Try this if you are interested: get a length of rope, say 15 to 30m, tie one end to a tree. Get the other end and stretch it tight. Flick the end you are holding once. You should get a wave traveling down the rope until it gets to the end tied to the tree. The energy in the wave has to go somewhere and, as the tree is rigid, it can't go into the tree. The only place it can go is back into the rope, so you will see the wave reflected and come back to you. The same happens in a cable with electrical waves.

Which ones would they be? That would be unusual! :face_with_raised_eyebrow:

The I²C slave modules almost always have pull-up resistors included - using too many together can be a problem as the value of the paralleled pullups can sometimes become too low, generally not for the Arduino but for the slaves themselves to control.


  1. Does it mean that every wire on this planet which carries a signal needs to have a termination resistor?
  2. Doesnt the signal reach the other side, do its job and end up on the GND on the other side?

Oops, you are right. If SCL/SDA also can be used as analog inputs then pullups do not make sense on the controller boards.

In practice only high speed connections (twisted pair...) require termination. On other cables the poor RF characteristics result in slow signal rise time at the other end and neglectable reflection amplitudes.

Doesn't the signal reach the other side, do its job and end up on the GND on the other side?

Usually it has to end up as heat, or, if it is the signal being fed into a transmitting aerial then it needs to end up as electromagnetic radiation moving away from the aerial.

Search for transmission line theory and see what comes up.

Not correct.
Internal pull up of the SDA and SCL pins is enabled with the wire.begin() command.
The internal pull up is weak, but ok for short I2C wiring.

Boards like the Uno/Nano only rely on internal pull up, but the Mega has physical 10k resistors.

Indeed it does, but not "Most Arduinos". :sunglasses:

That is one, but does any other?

No experience with the DUE, but I see 1k5 resistors on SCL0 and SDA0 on the diagram.

Well I have no experience with the Due either, nor am I likely to as i cannot see a use for it.

As DrDiettrich points out, you only have pullups on SCL and SDA if they are specifically reserved for I²C and not used as general purpose I/O.

The original Ethernet (10-Base-5 and also 10-base-2) required 50ohm termination resistors at the ends of the co-ax used. It does not apply solely to twisted pair.

Ty guys for the replies. So if I do need to use these resistors, what value should I pick?

I've lost track of all the replies but try without, if they are already built in to one of the devices then it will probably work ok. If it doesn't work add the resistors, for most purposes anything between about 1k Ohms and 4k Ohms for each resistor should be okay.

3.3K to 4.7K for 5V systems.
2.2K to 3.3K for 3.3V systems.

Mega2560 has pullups on the board.

Due has them

--- bill

If the Uno and Nano are right next to each other, then you don't need any pull up resistors.
The internal pin pull up on both, that's enabled with wire.begin(), should be enough.

If the processors are further apart, then external pull up (resistors) are required.
The value depends on distance, type of wire, and I2C protocol (100kHz or FastMode+ 400kHz).
So what distance are we talking about.