Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Pull up res in I2C

  1. Aug 28, 2012 #1
    In any signal line that's oscillating, how does the pull up resistor value affect the signal frequency.
    According to I2C specs, The pullup res and the device capacitance limit the rise time of the signal, thus limiting the max frequency.
    But when I simulated, I didn't see any change in frequency when I varied the value of R.
    In the circuit attached, V1 is the oscillating source(1MHz), R is tied to V2(3.3V)

    Attached Files:

    • rp.pdf
      File size:
      5.9 KB
  2. jcsd
  3. Aug 28, 2012 #2
    V1 is just a mathematical function that produces a waveform at a specified amplitude and frequency. It has no internal capacitance nor can it be affected by external components.

    Try creating a real oscillator using a transistor and see what happens.
  4. Aug 28, 2012 #3
    Why is the cap to ground? I think the parasitic capacitance should be in series with the pullup. You'll need to charge this capacitance through the pullup and that's what's going to slow you down.
    Last edited: Aug 28, 2012
  5. Aug 28, 2012 #4


    User Avatar

    Staff: Mentor

    You need to give your voltage source, V1, a realistic output impedance. If the source is an open-collector arrangement, then its output impedance should be represented as a very high value for output going HI.
  6. Aug 28, 2012 #5
    The cap to ground represents the IC input capacitance.
  7. Aug 28, 2012 #6
    I can add series resistance and some parallel capacitance for V1. If I add series resistance, then the series res and parallel cap of 10pf will act as low pass filter.
    But I am interested in seeing how the pullup res and 10pf cap degrade the signal.
  8. Aug 29, 2012 #7
    Your V1 is just a mathematical function that outputs a specific waveform at a specific amplitude and frequency. Adding external components will not affect its frequency. You need to create an oscillator in place of V1.
  9. Aug 29, 2012 #8
    OP, you are not using a load, and like Skeptic2 said, you are not using a realistic output driver either. Its an open collector, so that means, when the output should be high, your pin should be floating (to be pulled up by the resistor). Instead, you are driving the high output directly with a voltage source in your simulation. The voltage source can source/sink infinite current since it exists only as an ideal mathematical model. That ideal voltage source has no problem removing and adding charge to the capacitor, which results in that pull up resistor basically being ignored.

    Try using a diode in series, between your voltage signal source and your RC circuit, to imitate the open-collector behavior (cathode at the + side of your voltage source, anode at the RC). Using an NPN open collector would be even more accurate, especially when you are trying to discharge the capacitor with a low output. Just using a high value resistor in series will not give you accurate results, although more realistic than what you were simulating originally.

    Also, as a side comment, I think generally I2C is recommended to use 1k pull-ups, and probably never much higher than 22k. It depends on the current sinking abilities of your chip and how many devices you have on the bus. Why are you using a 470k pull up?
    Last edited: Aug 29, 2012
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook