1
\$\begingroup\$

I am designing a PCB wich I need to talk with 13 IC's on a I2C bus. I am wondering how many pull up resistors should I put on the bus? The chips are MAX9611 and here is the current layout of the I2C board area (continues to right side):

enter image description here

As you can see R17 and R18 are current limiting resistors and R21 and R22 are pull up resistors (1 for SCL and one for SDA). The SCL trace goes over top layer and SDA goes in bottom layer).

I just saw some examples in TI I2C bus guide, and I am wondering if what I have already designed is wrong, because it seems for each device there is a local pull up resistor on SDA and SCL lines: enter image description here

I would really appreciate your suggestion, before I fail miserably with cost of a bad PCB layout!

\$\endgroup\$
15
\$\begingroup\$

Look closer...

There is only a single pair of pull-up resistors for each bus. Your diagram shows four separate I2C buses. The multiplexer and the repeater isolates the segments.

Thus, since you only have one bus, you only need two resistors: One for SCL and one for SDA.

\$\endgroup\$
2
\$\begingroup\$

One thing I think I am seeing is that all of your chips look like they have the same footprint which is making me think they are all the same chip. If they are the same chip then all of them need to have a unique address, otherwise all of them will try to respond to the same commands given. This is somewhat fine if they all need to behave at the same time, not so great if they need to act independently. If they have the same address though, if one of them breaks, is missing, didn't get a command, etc, then your code will be unaware of this.

As for pull-ups, pipe is absolutely correct, you only want one pair of pull-ups used per bus. The picture you posted shows four completely separate busses (micro to multiplexer, multiplexer to IO expanders and LED blinkers, Hub repeater to more IO expanders, and multiplexer to data converter, eeprom, etc).

Section 7.1 of the I2C standard (www.nxp.com/documents/user_manual/UM10204.pdf) shows how to size the pull-ups. Table 10 in section 6.1 specifies the rise times for the different speeds.

One trick I have learned for correctly sizing the pull-ups is specify a mid-range resistor (~5k) as the pull-up, then scope the waveforms on the prototype unit. The actual resistor required will be equal to CurrentResistor * (TargetRiseTime / MeasuredRiseTime). A resistor smaller than the number specified will give you the rise time to meet the specifications. If the resistor is smaller than the minimum calculated pull-up (from section 7.1) you may need to break your bus up into multiple segments using repeaters, multiplexers, or something else. There are two advantages to measuring and then calculating, the first is that I feel it is quicker than trying to calculate your bus capacitance especially since many factors can affect it, the second is that you actually get to see the waveform and it can raise a red flag if the signal looks bad.

\$\endgroup\$
  • \$\begingroup\$ Thanks. Yes I am aware of addressing, I have assigned different addresses (VCC, GND, Vcc/2 and Vcc*2/3) on pins 8 and 9 of the chips. \$\endgroup\$ – Sean87 Aug 24 '16 at 16:07
1
\$\begingroup\$

There are only pullups needed at the master. (I2C is not a fast bus, and does not use termination resistors, and is not impedance matched.)

BUT You must ensure that bus segments after the mux/switches remain pulled up when off. Depending on how you implement muxes, you may need pullups on the isolated bus segments. These can be high R, they are only to keep the lines high, not pull them up during operation, e.g. the master pullups could be 1k5, and the segment pullups 100k. You will see this in our bus switch board: http://www.i2cchip.com/pdfs/BusSwitch_MUX3.pdf

There is a second reason for segment pullups: One isolated segment is longer/high capacitance, and needs more current i.e. lower R. BTW, this case - one one segment, is a very good reason to use bus switches, as it isolates problems (eg noise) to the chip/s on that segment, while the rest of the system will be reliable.

see also: http://www.i2cchip.com/i2c_connector.html#Crosstalk

\$\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.