Pololu Robotics & Electronics
My account Comments or questions? About Pololu Contact Ordering information Distributors

I2C Differential Extender - Multiple I2C devices on common bus



Regarding product: https://www.pololu.com/product/2159

I am using a master Arduino and two slave I2C sensors. The project requires the Arduino to be in the middle with one I2C slave sensor to be 5 metres north of the Arduino, and the other I2C slave sensor to be 5 metres south of the Arduino. Is it possible to wire this product so that both slaves and the Arduino are on a common differential bus - I believe this is called ‘Multi-drop’ layout?

The diagram in the product data sheet seems to suggest that one I2C sensor needs to be connected to the Arduino, and the second I2C sensor needs to be connected to the first I2C sensor.

Please clarify, many thanks.



It sounds like you are referring to this image. In order to connect both of your I2C devices like you want, you can just use a single master device + extender and connect the same eight differential signals to both your northern and southern slave sensors (i.e. duplicate the master-slave extender connections in that picture, re-using the same master).



Thanks for the fast reply,

I’m concerned that the breakout board extender drivers have totem pole driven outputs, and so with two slaves on the differential bus, if one of them outputs high while another is outputting low, it will essentially create a short circuit.

Are you assuming that the circuit in question is able to control which slaves can speak at any one time, I guess effectively disabling the other that isn’t speaking, as to prevent the above scenario from taking place?



I am sorry; I was thinking about this incorrectly for my last reply. It looks like you are correct. In the setup I proposed, two slave extenders could try to drive in different directions, which could damage the hardware. It looks like if you want to use this I2C extender, you would either have to use three total extenders and connect your two slave I2C sensors like the diagram shows (which sounds like it might not be ideal in your system with each slave at opposite ends of your setup), or you might use a total of four extenders to form two pairs of a master and slave, with both masters receiving the Arduino’s SCL and SDA lines.



To clarify I understood you correctly, you mean as per the following diagram?
Are you sure I can use the single I2C port on the Arduino for connection to both I2C extender boards as shown in the centre of the diagram?

In addition, is this breakout board capable of 400kHz clock speed? I understand this will also depend on bus capacitance etc, just wanted to confirm it is not strictly defined as being only able to be used with 100kHz bus speed.


Yes, that is the layout I was describing. Connecting a single I2C port on the Arduino to both extenders should be fine because the extenders are using standard I2C on that side, which is open drain.

I am not sure what you mean by “breakout board”. If you mean the I2C extender, its datasheet mentions that the extender was tested at 100kHz (at 150ft) but does not really elaborate on how or if it can communicate any faster. If 400kHz operation is important to you, let me know and we can look into setting up a quick test to see if it works.

Also, it’s not explicitly labeled in your diagram, but be sure that there are common grounds between each I2C extender and the Arduino or sensor it is connected to.



Thanks Jon

I would be very interested in knowing if 400kHz is possible, if that’s not too much trouble to test.

Also I will be using common grounds, thanks.


P.S. Breakout board was referring to the I2C extender.


We tested it with one of our IMUs at 400kHz with about 20 feet of Cat 6 and it seemed to work fine.



Awesome, thanks!


I believe the configuration that I provided a diagram for above may not work after all.

See ‘Remark’ on page 5: http://www.nxp.com/documents/data_sheet/PCA9600.pdf


Yeah, it does look like that Remark clearly states that the configuration you posted above is not supported. Unfortunately, we do not have any additional ideas.

However, I suspect that your configuration might still work, since your system just needs to send and receive from a master to its slaves, and not exchange information between slaves. It doesn’t sound like using the PCA9600 in that way would damage it, though we cannot be sure.