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.

PCA9543A: Pull-Up Resistance according to standard or fast

Part Number: PCA9543A

Hi,

I designed a circuit using two I2C switches (PCA9543A). They are used on the same I2C line.

I know that the resistance of the pull-up resistor should be different according to I2C speed (standard or fast).

Our circuit is shown below.

I2C Master -- pull-up 10k -- PCA9543A -- pull-up 10k -- PCA9543A -- pull-up 10k -- I2C Slave

So here's a question. 

On page 19 of the PCA9543A datasheet, you can see that in standard mode the resistance is about 10Kohm and the capacitance is about 100pf.

In my design, if the master or slave drives the I2C line low, three 10k ohm resistors connected in parallel would be as 3.3K ohm. This is different from the resistance according to the i2c speed shown in the datasheet.

When using multiple switches (multiple pull-up on same I2C line) like my design, how do I adjust the resistance according to the speed?

Thanks.

 

  • Seung-Gon,

    Your pull-up resistor range is determined by several factors: VCC, VOL(max), IOL, rise time tr, and bus capacitance Cbus. 

    I have attached an application note describing how to calculate pull-up resistance:

    https://www.ti.com/lit/an/slva689/slva689.pdf?ts=1634581444947

    Sometimes when you have multiple I2C switches, these calculations can become difficult to do by hand. Each PCA9543A comes with a certain Rds_on when the switch is on, which will effect your Vol. I have attached a video link that walks through I2C translators. 

    https://www.youtube.com/watch?v=_Rxt1LLvtf4

    Although your application is based on I2C switches, this video helps to explain how to think about calculating pull-up resistance with many devices on the bus. 

    If you are looking for a way to change resistance on the bus, I would think a switch/mux solution would be best. Imagine having a 4:1 mux that can select between 4 different resistive values to change the value of the pull-up via logic. That would be one way to change pull-up resistance as you change I2C speeds. 

    Please let me know if you have anymore questions,

    Regards,

    Tyler

  • Hi Tyler,

    Thank you for your quick reply.

    I have one more question.

    I have read the application report you recommended. I found out how to calculate the maximum pull-up resistor value and minimum pull-up resistor value for standard or fast I2C speed when using multiple switches and translators.

    If I calculate Rp(max) and Rp(min) like the application report, is it a parallel calculation of all pull-up resistors on the whole i2c line (from master to slave) as below? Or is it a pull-up resistor value for point to point (from master to switch or from switch to slave)?

    I2C Master -- pull-up -- PCA9543A(switch) -- pull-up -- I2C Slave

    Thanks,

  • Hi Seung-Gon,

    The calculation is based off the total bus parallel resistance. When the I2C switch is ON, the bus will see both pull-up resistors on each side. For example if each pull-up is 1kohm, you will effectively see 1kohm || 1kohm = 500ohm. Of course, when the switch is high impedance, the I2C Master/Controller or the I2C slave/target will only see the single pull-up on the bus. 

    If you are having trouble calculating the pull up resistance with multiple branches, I suggest using a simulating tool to do so: TI-TINA, PSPICE, LTSPICE, etc. 

    Regards,

    Tyler