Worum es geht: Ausgänge, die nur ziehen und nie treiben — die Grundlage jedes I²C-Busses — und wie man damit zwei verschiedene Spannungswelten verbindet.
Wozu du das brauchst: Am Bus ist der Pull-up-Wert kein Ermessen mehr, sondern eine Rechnung mit einer Unter- und einer Obergrenze. Wer daneben liegt, bekommt einen Bus, der bei 100 kHz läuft und bei 400 kHz aussetzt — oder gar nicht mehr, sobald das vierte Modul dazukommt.
Danach kannst du: den Pull-up für deinen Bus berechnen, einen 3.3-V-Controller an einen 5-V-Sensor bringen, und beim Kauf eines Level-Shifters die richtige Bauart erkennen.
Ein Ausgang, der nur die Hälfte kann
Ein gewöhnlicher GPIO-Ausgang kann beides: nach 3.3 V treiben und nach Masse ziehen. Genau deshalb darf man zwei davon nie verbinden — treibt einer High und der andere Low, ist das ein Kurzschluss im Chip.
Ein Open-Drain-Ausgang kann bewusst nur die Hälfte: Er kann die Leitung nach Masse ziehen oder sie loslassen. Nach oben treiben kann er nicht.
Das klingt nach einem Mangel und ist eine Fähigkeit. Denn wenn niemand aktiv nach oben treibt, dürfen beliebig viele Teilnehmer an derselben Leitung hängen. Wer nichts will, lässt los. Wer etwas will, zieht. Ein Kurzschluss ist unmöglich — im schlimmsten Fall ziehen mehrere gleichzeitig, und die Leitung ist eben Low.
Das Hochziehen übernimmt ein einziger Widerstand für alle. Und genau darum geht es beim I²C-Bus.
Zwei Leitungen — SDA (serial data) für die Daten, SCL (serial clock) für den Takt — laufen waagrecht durch die ganze Schaltung. Jede wird von einem eigenen Pull-up von 4.7 kΩ nach 3.3 V gezogen. Darunter hängen drei Teilnehmer, jeder mit beiden Anschlüssen an beiden Leitungen.
Rechts ist gestrichelt die Kapazität der Leitung eingezeichnet. Sie ist kein Bauteil, das jemand eingebaut hätte — sie entsteht von selbst, aus Leiterbahnen, Kabeln und den Anschlüssen der Bausteine. Und sie ist der Grund, warum der Pull-up nicht beliebig gross sein darf.
Daraus folgt der Merksatz für I²C: Die Leitung wird von den Teilnehmern gezogen und vom Widerstand gehalten. Ein Teilnehmer, der eine Null senden will, zieht; wer eine Eins senden will, tut gar nichts.
Der Pull-up ist von zwei Seiten eingeklemmt
Im Grundkurs war ein Pull-up gleichgültig — 10 kΩ oder 47 kΩ, der Eingang las dasselbe. Am I²C-Bus ist er ein Auslegungswert, und zwar einer mit einer Unter- und einer Obergrenze.
Nach unten begrenzt ihn der Teilnehmer. Wer die Leitung zieht, muss den Strom durch den Pull-up aufnehmen und dabei unter der garantierten Low-Spannung bleiben. Die Norm verlangt höchstens 0.4 V bei 3 mA:
R(min) = (3.3 V − 0.4 V) / 3 mA = 967 Ω → praktisch 1 kΩ
Kleiner darf er nicht sein, sonst schafft der schwächste Baustein am Bus die 0.4 V nicht mehr.
Nach oben begrenzt ihn die Kapazität. Losgelassen wird die Leitung nicht getrieben, sondern nur über den Widerstand geladen — es ist der RC-Vorgang aus Modul 3, mit der Buskapazität als C. Die Norm gibt vor, wie schnell die Flanke sein muss:
R(max) = t(r) / (0.8473 · C(b))
Der krumme Faktor ist ln(7/3) und kommt daher, dass die Anstiegszeit von 30 % auf 70 % der Versorgung gemessen wird — nicht von 10 auf 90 Prozent. Mit einer üblichen Buskapazität von 100 pF:
| Betriebsart | erlaubte Anstiegszeit | R(max) |
|---|---|---|
| Standard, 100 kHz | 1000 ns | 11.8 kΩ |
| Fast Mode, 400 kHz | 300 ns | 3.54 kΩ |
Dazwischen liegt der brauchbare Bereich, und 4.7 kΩ ist der Wert, der in beiden Fällen passt. Deshalb steht er in jeder Anleitung.
Nachrechnen, wenn der Bus zickt
Mit 4.7 kΩ und 100 pF ergibt sich eine Anstiegszeit von
t(r) = 0.8473 · 4.7 kΩ · 100 pF = 398 ns
Das passt für Standard-Mode bequem und für Fast Mode nicht mehr. Wer im Fast Mode Aussetzer hat, hat oft genau dieses Problem: zu träge Flanken, weil der Pull-up zu gross oder die Leitung zu lang ist.
Die Kosten der kleineren Widerstände sieht man auf der anderen Seite. Jede gezogene Leitung verbraucht dauernd:
I = (3.3 V − 0.4 V) / 4.7 kΩ = 617 µA je Leitung
Bei zwei Leitungen also über ein Milliampere, solange gezogen wird. Für ein batteriebetriebenes Gerät ist das ein Argument für den grösstmöglichen Pull-up — und ein Grund, den Bus zwischen den Messungen ganz abzuschalten.
Und der häufigste Anfängerfehler: Pull-ups gehören einmal an den Bus, nicht auf jedes Modul. Vier Breakout-Boards mit je 4.7 kΩ ergeben zusammen 1.175 kΩ — schon fast an der Untergrenze von 967 Ω.
Und wenn die beiden Seiten verschiedene Spannungen haben
Ein 3.3-V-Mikrocontroller und ein Sensor, der 5 V braucht: Der Grundkurs hat dafür den Spannungsteiler gezeigt — und ebenso ehrlich gesagt, dass er an einem Bus nicht taugt. Jetzt der Grund: Ein Teiler wirkt nur in eine Richtung. Ein Bus arbeitet in beide.
Die Lösung ist ein einziger MOSFET, und sie ist so elegant, dass sie einen zweiten Blick verdient.
Das Gate liegt fest an 3.3 V. Die Source unten hängt an der 3.3-V-Seite, der Drain oben an der 5-V-Seite. Jede Seite hat ihren eigenen Pull-up von 10 kΩ auf ihre eigene Versorgung. Gestrichelt daneben steht die Body-Diode, die in jedem MOSFET von Haus aus zwischen Source und Drain sitzt.
Drei Betriebsarten, und in jeder passiert etwas anderes:
1. Beide Seiten losgelassen. Source liegt auf 3.3 V, Gate auch — die Gate-Source-Spannung ist null, der MOSFET sperrt. Jede Seite hält über ihren eigenen Pull-up ihre eigene Spannung: links 3.3 V, rechts 5 V. Die beiden Seiten wissen nichts voneinander.
2. Die 3.3-V-Seite zieht Low. Source fällt auf 0 V, das Gate bleibt bei 3.3 V — jetzt liegen 3.3 V zwischen Gate und Source, und der MOSFET leitet. Er zieht die 5-V-Seite mit nach unten.
3. Die 5-V-Seite zieht Low. Das Gate kann hier nichts bewirken, denn der Drain ist die falsche Seite. Stattdessen wird die Body-Diode leitend und zieht die 3.3-V-Seite auf etwa 0.7 V herunter. Damit sinkt die Source, die Gate-Source-Spannung steigt, der MOSFET schaltet ein und zieht den Rest.
Der dritte Fall ist der Grund, warum diese Schaltung überhaupt funktioniert. Die Diode, die man beim Zeichnen gern weglässt, ist hier das arbeitende Bauteil.
Fertige Level-Shifter: zwei Familien, die man nicht verwechseln darf
Es gibt Bausteine, die das Obige fertig enthalten — aber sie sind nicht austauschbar.
| Bauart | wofür | am I²C-Bus |
|---|---|---|
| MOSFET-Typ (wie oben, mehrkanalig) | Open-Drain-Busse | ja, dafür gemacht |
| Auto-Direction-Typ (TXB-Klasse) | Punkt-zu-Punkt, getriebene Signale | nein |
Die zweite Familie erkennt die Richtung selbst, indem sie sehr schwach treibt und beobachtet, wer stärker ist. Am I²C-Bus mit seinen kräftigen Pull-ups liest sie das als «die andere Seite treibt» und schaltet in die falsche Richtung. Das Ergebnis ist ein Bus, der scheinbar zufällig funktioniert.
Die Frage vor dem Kauf lautet also nicht «wie viele Kanäle», sondern «für Open-Drain oder für getriebene Signale».
Kurze Selbstkontrolle
Zählt nicht — nur zum Prüfen, ob es angekommen ist.
1.Warum darf der Pull-up an einem I²C-Bus weder beliebig klein noch beliebig gross sein?
2.Was geschieht im MOSFET-Pegelwandler, wenn die 5-V-Seite die Leitung nach Low zieht?