I²C-Pull-up-Widerstände
- Rmin
- 967 Ω
- Rmax
- 3,54 kΩ
- Vorschlag (E12)
- 2,2 kΩ
- Anstiegszeit damit
- 186 ns
- Strom bei Low
- 1,32 mA
Nach NXP UM10204 (Rev. 7, Abschnitt 7.1): Rmin = (VDD − VOL,max) / IOL mit VOL,max = 0,4 V bei IOL = 3 mA, Rmax = tr / (0,8473 · Cb); 0,8473 = ln(0,7/0,3) ist die Zeit von 30 % auf 70 % in Zeitkonstanten. Der Vorschlag ist der größte E12-Wert bis 75 % von Rmax – Reserve für Toleranzen und eine zu knapp geschätzte Buskapazität. Cb schätzt du aus Pin-Kapazitäten (je Gerät etwa 5–10 pF) plus Leitung (grob 50–100 pF je Meter). Die steilste Flanke gehört zu Rmin, die flachste zu Rmax. Grenzen im Fast-mode: tr ≤ 300 ns, Cb ≤ 400 pF.
Auf einem I²C-Bus treibt kein Teilnehmer die Leitungen aktiv auf High. Jeder kann SDA und SCL nur nach Masse ziehen, man spricht von Open-Drain-Ausgängen. Zurück auf High holen die Leitungen zwei Pull-up-Widerstände. Sind sie zu groß, steigt die Spannung zu langsam an und der Bus verpasst die Taktflanken. Sind sie zu klein, schafft es ein Teilnehmer nicht mehr, die Leitung tief genug herunterzuziehen. Der Rechner nennt dir den erlaubten Bereich und schlägt einen Normwert vor. Wie Logikpegel und Schwellen zusammenhängen, erklärt der Artikel Logikfamilien.
So rechnet der Rechner
Beide Grenzen stammen aus der I²C-Spezifikation von NXP, UM10204 (Revision 7 von 2021, Abschnitt 7.1).
Untere Grenze: Ein Ausgang muss bei Low mindestens den Strom IOL aufnehmen und darf dabei höchstens VOL = 0,4 V erreichen. Für Standard-mode (100 kHz) und Fast-mode (400 kHz) sind das 3 mA, für Fast-mode Plus (1 MHz) 20 mA. Daraus folgt
Unter 2 V Versorgung lässt die Spezifikation VOL = 0,2 · VDD bei 2 mA zu; der Rechner nimmt dann diese Werte.
Obere Grenze: Der Pull-up lädt die Kapazität der Leitung Cb wie in einem RC-Glied. Die Anstiegszeit tr zählt von 30 % bis 70 % der Versorgung, und dafür braucht die Ladekurve ln(0,7 / 0,3) ≈ 0,8473 Zeitkonstanten:
Erlaubt sind höchstens 1000 ns im Standard-mode, 300 ns im Fast-mode und 120 ns in Fast-mode Plus. Die Buskapazität darf 400 pF betragen, in Fast-mode Plus 550 pF.
Als Vorschlag nimmt der Rechner den größten E12-Wert, der höchstens 75 % von Rmax erreicht. Die Reserve fängt Toleranzen und eine zu knapp geschätzte Buskapazität ab. Ein größerer Widerstand spart Strom, ein kleinerer macht die Flanken steiler.
So benutzt du ihn
Wähle oben die Geschwindigkeit und trag die Versorgung des Busses ein, etwa „3,3 V“ oder „5 V“. Für die Buskapazität schreibst du zum Beispiel „100p“ oder „150 pF“.
Die Buskapazität kennst du meist nicht genau. Schätze sie so: Jeder Pin bringt bis zu 10 pF mit, eine Leiterbahn auf der Platine einige pF je 10 cm, ein Kabel grob 50 bis 100 pF je Meter. Wie ein Kondensator beim Laden über einen Widerstand reagiert, zeigt der Artikel Kondensator im Gleichstromkreis.
Die Grafik zeigt drei Anstiegsflanken, verschoben so, dass alle bei 30 % gleichzeitig starten: die steilste für Rmin, die blaue für den Vorschlag und die flachste für Rmax. Die blaue Fläche ist das Zeitfenster bis tr; jede Kurve muss die 70-%-Linie darin erreichen.
Beispiel
Voreingestellt ist ein Fast-mode-Bus mit 400 kHz an 3,3 V und 100 pF Buskapazität.
Schaltest du auf 100 kHz um, steigt Rmax auf 11,8 kΩ und der Vorschlag auf 8,2 kΩ. Bei 1 MHz sinkt Rmin wegen der 20 mA auf 145 Ω, Rmax auf 1,42 kΩ, und der Vorschlag lautet 1 kΩ.
Praxis und typische Fehler
- Mehrere Pull-ups parallel. Viele Sensor-Module bringen eigene Pull-ups mit. Drei Module mit je 10 kΩ ergeben 3,3 kΩ, mit dem Pull-up auf der Hauptplatine noch weniger. Rechne den Gesamtwert mit dem Rechner Reihen- und Parallelschaltung aus und entferne überzählige Widerstände.
- Interne Pull-ups. Die Pull-ups im Mikrocontroller liegen meist bei 20 bis 50 kΩ. Für kurze Busse mit 100 kHz reicht das manchmal, für 400 kHz fast nie.
- Lange Kabel. Mit jedem Meter wächst Cb. Wird Rmin größer als Rmax, meldet der Rechner das. Dann hilft nur ein langsamerer Takt, ein Bus-Puffer oder eine aktive Pull-up-Schaltung.
- Gemischte Spannungen. Hängen 3,3-V- und 5-V-Teilnehmer am selben Bus, brauchst du einen Pegelwandler; die Pull-ups rechnest du dann für jede Seite getrennt.
- Nur SCL bestücken. Beide Leitungen brauchen einen Pull-up, üblicherweise mit gleichem Wert.
Häufige Fragen
- Warum sieht man so oft 4,7 kΩ? Für 100 kHz an 5 V oder 3,3 V liegt 4,7 kΩ bei üblicher Buskapazität mitten im erlaubten Bereich. Für 400 kHz ist er oft schon zu groß.
- Schadet ein zu kleiner Pull-up? Der Low-Pegel steigt, weil der Ausgang mehr Strom aufnehmen muss, und der Bus braucht mehr Strom. Unterhalb von Rmin ist der Low-Pegel nicht mehr garantiert.
- Wie messe ich die Anstiegszeit? Mit dem Oszilloskop an SDA oder SCL, Zeit zwischen 30 % und 70 % der Versorgung. Liegt sie über der Grenze, verkleinere den Pull-up.