I am designing a system that can be expressed on an abstract schematic like this:

enter image description here

There is a main MCU that acts as I2C master and some slaves. Some of them are on the same PCB, but some are connected with cables on other PCB's. In case of Slave7 and Slave8, there is a "serial" connection: A long cable goes to the PCB4 from PCB1 and then from PCB4 to PCB5.

I am working in standard mode (100 kHz). Speed is not the case in here but reliability. This circuit seems to me to have a lot of capacitance because of many connected devices and long cables (from 1m to 2m). I am thinking of using I2C buffers, such as PCA9515A.

I consider few options:

Do not use buffers at all, maybe at this speed it is good enough with low resistance pull-ups?

Use only 1 buffer to divide the bus on 2 sides: On the 1st side: Master, Slave1, Slave2, Slave3 and Slave4. on the other: Slave5, 6, 7, 8.

Use many buffers (each PCB would have one). PCB4 would have 2, as it is "bridging" the bus to PCB5.

What do you think would be necessary? I understand that this is a function of bus capacitance and cables lengths, but I am looking for a scalable generic approach here. I would appreciate all help.

Sides notes: All devices are 3V3 logic, so no gain on making the signals amplitude higher. I was also wondering on converting the SDA bus signals to differential pair with dedicate IC's, but that seems to much, the cables are not that long.


You should use a buffer anytime the bus capacitance will be over 400pF. If you are just barely getting to that then you can make the decision to use stronger pull-ups instead of a buffer.

In general, if you're going off-board to a cable, you should have a buffer there. If you ever wanted to have longer cables you'd be glad there was a buffer to support that. For more information on that, see this question.

  • \$\begingroup\$ I am thinking this way too. But for example, would you use 3 buffers on PCB1 since its separating to 3 different boards or would 1 for all of them be enough? \$\endgroup\$ – Łukasz Przeniosło Feb 10 '18 at 18:52
  • 1
    \$\begingroup\$ @Bremen One buffer per off-boarding connection. If you're daisy chaining the slave boards then you'd have just the one buffer at each connector point. \$\endgroup\$ – Samuel Feb 10 '18 at 18:58
  • \$\begingroup\$ That seems the most reasonable, but its a lot of buffers... 8 to be exact. \$\endgroup\$ – Łukasz Przeniosło Feb 10 '18 at 19:17
  • 3
    \$\begingroup\$ @Bremen Well, I2C isn't designed to be a board to board communication protocol. So if you're going to use it that way, it's not supposed to be clean and easy. \$\endgroup\$ – Samuel Feb 10 '18 at 19:18

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.