This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TCA9548A: do we need i2c buffer or switch?

Genius 3900 points
Part Number: TCA9548A
Other Parts Discussed in Thread: INA219, TCA9803

hi there,

We are designing I2C bus for system. MCU (STM32) is the mater,, slave devices as below.  All IC powered by 3.3V. Total I2C pcb trace length might be 80cm..

Since there is no address-conflict issue, seems we can just connect all slave devices on ONE I2C bus ( take two MCU's pins).  Still not sure how to determine if a switch(TCA9548A ) or I2C buffer should be used? 

Could you please give some advice?

[ Slave deivce] 

INA219, 2pcs, power monitoring

ADS7830IPWR, 4pcs, voltage monitoring

TCA9546APWR, 1pcs. managing two identical battery package.

LM95214CISD, 3pcs, temp sensor

Another question is, in application note slva689 , there are three pairs of pull-up resistors before and after the I2C switch and buffer .  But I think those resistors are parallel if the path 0 is enabled, so the first pair of resistors should be enough? Thanks!

 

  • seems I2C buffer can Seperate bus into sub-segments, but I2C  switch can't.

    www.ti.com/.../scpa054.pdf

  • An I²C bus is limited by the total capacitance. Add up the input capacitances of all devices and the trace capacitance (roughly 1 pF/cm). The I²C limit is 400 pF.

    For a bus with higher capacitance, you might need stronger pull-up resistors, and/or reduce the speed. (Check the waveforms with an oscilloscope; you have a problem if the rising edges are so slow that they do not reach VCC.) It might make sense to replace the pull-ups with the TCA9803 buffer, whose active current sources are faster than passive pull-up resistors.

    A switch can dynamically disconnect bus segments, making some devices invisible, in order to prevent address conflicts. With a buffer, all devices are still visible; it just separates the segments on the eletrical level to allow 400 pF on each side. In general, every bus segment needs its own pull-up resistors to prevent floating bus lines. (Some switches/buffers have integrated pull-ups.)

  • Hello,

    Since there is no address-conflict issue, seems we can just connect all slave devices on ONE I2C bus ( take two MCU's pins).  Still not sure how to determine if a switch(TCA9548A ) or I2C buffer should be used? 

    I support Clemens' answer here. Total bus capacitance for I2C is limited to 400pF. Make sure to add the input capacitance of all devices on the bus as well as trace capacitance using the estimate 1pF / cm. If you reach the limit of 400pF, then you will need some type of I2C buffer/repeater in order to re-drive the signal to keep within the specs of the I2C standard. 

    Another question is, in application note slva689 , there are three pairs of pull-up resistors before and after the I2C switch and buffer .  But I think those resistors are parallel if the path 0 is enabled, so the first pair of resistors should be enough? Thanks!

    Pull-up resistors on each side of a I2C switch or buffer is generally dependent on the device itself. Most I2C switches require pull-ups on both sides of the device in order to have proper separation between the sides during high-z and for proper level translating. 

    Some I2C buffers require pull-up resistors, some do not depending on the type of buffer. 

    General idea is that when the device, either switch or buffer, is idle, how do you ensure that each side of the device is pulled-up to VCC? To ensure this in design, pull-up resistors are added on both sides. 

    Regards,

    Tyler