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.

I2 Pull up resistor calculation-Clarifications Required-SLVA689

Other Parts Discussed in Thread: PCA9306, TCA9406

Hi,

I was going through SLVA689 for understanding how to calculate I2C pull up values.

I can see an example in page 4 for pull up resistor calculation for fast mode.In this example, I can see that bus capacitance is taken as 200pF.

But according to table 1, for fast mode bus capacitance is 400pf. May I know why 200pF is taken in the application note.

Please clarify.

Regards

Hari

  • Hi Hari,

    The 400 pF value is the maximum supported by the standard, but in a given application there may be less. The values chosen in the example were just chosen to be similar to common application conditions so that they could be used to demonstrate how the minimum and maximum values can be calculated. Please let me know if this isn't clear.

    Regards,
    Max
  • Hi Max,
    Thank you very much.

    I am using an I2C level translator(3.3V to 1.3V)(PCA9306)
    When I am using a level shifter, f which value I need to take for Vcc for Calculating Rp(min) 3.3V or 1.8V?
    I will be only connecting one slave I2C device.May I know at that time what bus capacitance I can take,is 20pf is enough

    Regards
    Hari
  • Hi Hari,

    With a switch-based translator like PCA9306 there is no internal pull-down FET to buffer or re-drive the I2C signals, and so the device that is pulling the line low will need to sink current from the pull-up that it is connected to as well as the pull-up on the other side of the translator. This makes calculating minimum pull-up values less straightforward since you would need to consider not only the VOL/IOL of the I2C device but also the two supply voltages.

    The simplest way to go about this would be to compute the pull-down current that will flow into the I2C device at its maximum VOL and make sure it does not exceed the device's IOL specification. Said another way:

    IOL <= [(VCC1 - VOL_max) / R1] + [(VCC2 - VOL_max) / R2].

    (R1 is the pull-up resistance on one side to VCC1, while R2 is the pull-up resistance on the other side to VCC2.)

    Regards,
    Max
  • Hi Max,

    My I2C device maximum speed is 2Mhz at this frequency what will be the maximum bus capacitance I can take and also may I know
    what will be the value of rise time.

    Regards
    Hari
  • Hello Hari,

    If you want to operate your I2C bus at 2MHz then you will need to use the TCA9406 which have rise time accelerators.  That part is tested with a 15pF and qualified at that capacitive load.  If you have more than 15pF you might not be able to achieve the full speed of 2MHz.  What mode of operation are you using?  Are you using "High Speed" mode?  These modes of operation are outlined in the I2C standard UM10204.  The max rise times 10 to 100 pF is 40nS, per the I2C standard for "High Speed" mode of operation. 

    Mode people don't use faster than "Fast Mode Plus" which is 1 Mhz.  Do you need the that fast a data rate?  We have a good training video that might be useful to you if you are just getting started with I2C. 

    https://training.ti.com/i2c-technical-deep-dive-japan-2018

    Let me know if you have more questions.

    -Francis Houde

  • Hi Francis,
    May I know, I2C pull up calculation equation is not applicable after 1Mhz.
    Regards
    HARI
  • Hi Francis,

    I am getting some strange values when I am calculating for High speed and fast mode plus

    Please find my attached calculator I created in excel. Please check the commentI2C Calculator.xlsx box in the attached document.

    Regarding

    hari

  • Hello Hari, the Calculations for Rp(max) for fast mode are correct (~1.4k ohms) for 100 pF of capacitance, and Rp(min) is a bit off because you are using the Vol(max) as 30% of Vcc, which is not correct.  VIL is 30% of Vcc.  You need to use 0.4V for Vol(max) as stated in the standard.  Your equation was incorrect.  The diagram I gave you is correct, but you implemented incorrect.  If you correct the spreedsheet, which I did, that then you get 145 ohms for Rp(min).  These numbers are correct.

      

    Here is the spreadsheet.  Let me know if you have more questions.

    TI - I2C Calculator.xlsx

  • Hi Francis,
    Thank you very much for your time and concern.

    Let me tell you why I went to calculate the pull up resistor values.
    In my design initially I put 1K at that time I2C low level was not coming properly for 1.8V side.After this I changed 1K to 10K and it was working properly for 2.1Mhz also.My maximum speed is 2Mhz only.

    But for 1Mhz itslef calculated value of Rp min is less than 1K and Rp max is coming to 1.4K only,I am totally confused.


    Regards
    Hari
  • Hello Hari,

    Sorry for the delay. 

    Are you trying using the High Speed mode outlined in the standard?  You will have to check to see if your hardware (micro controller) supports this mode.  It means the pull down fet has to be strong enough (low enough FET resistance) to generate a low with that strong a pullup resistors.  Can you send me information about the micro you are using to generate the I2C commands and can you send me waveforms.  If your pull down fet is not low enough in resistance when on then it will not be able to generate a low enough VOL and it might not be below the slave's VIL. 

    I am guessing why it works with the higher pull up resistors.  Waveforms would be helpful in this case.  Can you send waveforms showing both sides of the Buffer and for SCL and SDA.   

     Why are you running at 2MHz, it is kind of a unusual data rage.  I would recommend using Fast Mode Plus at 1MHz unless you need more data throughput. 

    -Francis Houde