
I2C-Bus: Verdrahtung, Adressierung und Pull-up-Widerstände
Verdrahten Sie einen zuverlässigen I2C-Bus: SDA- und SCL-Rollen, 7-Bit-Adressen, Geschwindigkeiten, Buskapazität, Anstiegszeit und Klimmzuggröße.
Geschrieben und technisch geprüft vonElectroDesignForge Engineering Team
Redaktionsprozess ansehenKernaussage: I²C verbindet mehrere ICs über zwei gemeinsame Leitungen:
SDAfür Daten undSCLfür den Takt. Die Ausgänge arbeiten üblicherweise als Open-Drain: Ein Gerät zieht die Leitung auf LOW, während Pull-up-Widerstände den HIGH-Pegel herstellen. Bei der Dimensionierung sind sowohl der zulässige Senkstrom bei LOW als auch die durch Geschwindigkeit und Buskapazität begrenzte Anstiegszeit zu beachten.
Schnellreferenz
| Modus | Maximale Frequenz der SCL | Höchstzahl t_r Anstiegszeit (30-70%) | Referenzkapazität pro Zeile |
|---|---|---|---|
| Standardbetrieb (Sm) | 100 kHz | 1000 ns | 400 pF |
| Schnellbetrieb (Fm) | 400 kHz | 300 ns | 400 pF |
| Schnellmodus Plus (Fm+) | 1 MHz | 120 ns | 550 pF |
Diese Grenzwerte ergeben sich aus der I2C-Spezifikation. Der langsamste Teil kann eine geringere Geschwindigkeit erfordern. Wählen Sie nicht Fm +, nur weil ein Controller es unterstützt: Jedes Ziel, jeder Level Shifter und jeder Isolator müssen es auch unterstützen.
SDA und SCL: gemeinsame Leitungen
SDA überträgt Adresse, Lese-/Schreibbit, Datenbytes und Bestätigungen. SCL taktet die Übertragung. Im Ruhezustand liegen beide Leitungen auf HIGH. Eine START-Bedingung entsteht, wenn SDA bei HIGH-Pegel auf SCL fällt; bei einer STOP-Bedingung steigt SDA bei HIGH-Pegel auf SCL.
Während der Datenübertragung bleibt SDA stabil, während SCL HIGH ist. Der Controller sendet acht Bits und gibt dann SDA auf der neunten Uhr frei; der Empfänger zieht SDA LOW für eine ACK oder lässt es für eine NACK.
+3.3 V +3.3 V
| |
[Rp] [Rp]
| |
SDA ──────────────+──── controller ── target A ── target B
SCL ──────────────+──── controller ── target A ── target B
GND ───────────────────── common to every device
Verwendung ein effektives Pullup auf SDA und eines auf SCL Mehrere Module können sie bereits enthalten, so dass sie parallel sind. Zwei 4.7 kΩ Widerstände machen 2.35 kΩ; vier Marken 1.18 kΩPrüfen Sie die Modulschaltpläne, bevor Sie ein weiteres Paar hinzufügen.
Warum Open-Drain?
Ein Gerät fährt den Bus niemals aktiv HIGH: Es gibt eine Leitung frei oder zieht sie LOW. Wenn zwei Geräte zusammenwirken, gewinnt LOW ohne Kurzschluss zwischen gegenüberliegenden Endstufen. Dieses Wired-AND-Verhalten ermöglicht Acknowledge, Multi-Controller-Arbitrierung und Clock Stretching.
SCL kann manchmal Push-Pull in einem Single-Controller-System ohne Clock-Stretching-Ziele sein; Dokumentieren Sie diese Ausnahme explizit. Für einen tragbaren kompatiblen I2C-Bus halten Sie SCL mit seinem Pull-up Open-Drain.
Verdrahtung, Masse und Spannungspegel
Verbinden Sie alle Geräte parallel: SDA zu SDA, SCL zu SCL und gemeinsamer Boden. Vermeiden Sie einen Stern mit langen Zweigen; Stubs fügen Kapazität, Reflexionen und Rauschempfindlichkeit hinzu. Halten Sie auf einer PCB Signale kurz, über eine kontinuierliche Erdebene und von schnellen Vermittlungsknoten fern.
Die Aufziehschiene stellt das HIGH-Niveau ein. Es muss kompatibel sein mit alle I/O, einschließlich eines unpowered Mikrocontrollers. Verbinden Sie ein 1,8 V-Teil nicht direkt mit 3,3 V-Klimmzügen, es sei denn, das Datenblatt erlaubt dies. Verwenden Sie einen I2C-geeigneten Pegelschieber mit Klimmzügen auf beiden Seiten, wenn seine Schaltung sie erfordert.
Interne Pull-up-Widerstände von Mikrocontrollern liegen oft bei 20 to 100 kΩ: Auf sehr kurzen Leitungen und bei niedriger Geschwindigkeit kann das ausreichen, für belastete Busse mit 100 oder 400 kHz sind sie meist zu hochohmig. Prüfen Sie den tatsächlichen Wert.
Adressierung: 7-Bit, nicht 8-Bit
Die meisten ICs verwenden eine 7-Bit Zieladresse. Das erste Byte auf dem Draht ist:
[ A6 A5 A4 A3 A2 A1 A0 | R/W ]
Die R/W Bit wird auf dem Bus hinzugefügt; es ist nicht Teil der 7-Bit-Bibliotheksadresse. Ein Ziel bei 0x68 erscheint als 0xD0 zum Schreiben und 0xD1 zum Lesen. Eine API fragt nach 0xD0 kann einer 8-Bit-Konvention folgen - überprüfen Sie sie, bevor Sie eine Adresse zweimal verschieben.
ADDR, SA0, oder SDO Pins vieler Sensoren wählen eine Adresse aus. Binden Sie sie an eine definierte Ebene und zeichnen Sie Adressen im Schaltplan auf. Wenn Ziele mit fester Adresse kollidieren, verwenden Sie einen I2C-Multiplexer, einen anderen Controller oder eine andere Teilevariante. Zehn-Bit-Adressierung existiert, ist aber selten; ein internes Sensorregister ist nicht die I2C-Adresse.
Geschwindigkeit, SCL und Clock Stretching
Die SCL-Frequenz ist eine maximale Timing-Rate, nicht garantierte Nutzlastrate: Adressen, Register, ACK/NACK-Bits, START/STOP-Bedingungen und interne Verzögerungen reduzieren den Durchsatz. Eine 400-kHz-Multiregisterübertragung dauert daher länger als ihre Bytezahl geteilt durch 400 kbit/s.
Ein Ziel kann SCL LOW halten, nachdem der Controller es freigegeben hat: Clock Stretching. Der Controller muss SCL probieren und innerhalb der Produkt-Timeout-Richtlinie auf HIGH warten. Überprüfen Sie die Kompatibilität, da einige Fahrer schlecht damit umgehen. Im Multi-Controller-Einsatz verliert das Gerät, das SDA freigibt, aber LOW liest, die Arbitrierung und stoppt.
Buskapazität und Anstiegszeit
Jede Leitung ist eine RC-Last: IC-Eingänge, Leiterbahnen, Kabel, Sonden, Anschlüsse und Streukapazität summieren sich. Wenn kein Gerät eine Linie LOW zieht, lädt der Pull-up diese Kapazität allmählich auf.
Für 30% bis 70% VDD Messung:
t_r ≈ 0.8473 × R_p × C_bus
R_p,max ≈ t_r,max / (0.8473 × C_bus)
Verwenden Sie Ohms, Farads und Sekunden. Dies gibt die maximal Pull-up-Widerstand; darüber ist der Anstieg zu langsam. Bei 400 kHz mit C_bus = 100 pF:
R_p,max ≈ 300 ns / (0.8473 × 100 pF) ≈ 3.54 kΩ
4.7 kΩ zieht wenig Strom, ist aber auch groß 300 ns mit 100 pF zu erfüllen. 3.3 kΩ ist ein besserer Ausgangspunkt, abhängig von LOW-Stromgrenzen und Messungen. Vorzugsweise Messkapazität an der Endmontage; andernfalls Eingangskapazität, Kabeldaten (pF/m), Steckverbinder und Leiterplattenrand hinzufügen. Eine Sonde fügt auch Kapazität hinzu.
Pull-up Sizing: ein Fenster, kein magischer Wert
Ein kleinerer Widerstand beschleunigt die Flanke, erhöht aber den Strom, während ein Gerät LOW antreibt. Die untere Grenze ist:
R_p,min ≈ (VDD − V_OL,max) / I_OL,max
für VDD = 3.3 V, V_OL,max = 0.4 V, und I_OL,max = 3 mA:
R_p,min ≈ (3.3 − 0.4) / 3 mA ≈ 967 Ω
R_p,min ≤ R_p ≤ R_p,max
Der ausgewählte Wert ist nur in diesem Fenster gültig. Wenn kein Fenster vorhanden ist, reduzieren Sie die Kapazität, senken Sie die Geschwindigkeit, verwenden Sie einen geeigneten I2C-Puffer oder verwenden Sie ein Fm + -fähiges Gerät mit größerem Senkenstrom. Wählen Sie nicht unten R_p,min Nur weil es zu funktionieren scheint: V_OL kann mehrdeutig werden und die Dissipation steigt.
| Lage | Startpunkt | Überprüfung |
|---|---|---|
| Kurze Leiterplatte, 3,3 V, 100 kHz | 4.7 to 10 kΩ | Kapazität und bestehende Pullups |
| Kurze Leiterplatte, 3,3 V, 400 kHz | 2.2 to 4.7 kΩ | t_r und jedes Ziel I_OL |
| Kabel oder viele Module | berechnet, oft niedriger | Senkstrom, EMV, Wellenform am Kabelende |
Diese Bereiche ersetzen nicht die Berechnung für Ihre Assembly.
Messung und Fehlerbehebung
Beobachten Sie SDA und SCL am am weitesten vom Controller entfernten Endpunkt. Maßnahme t_r bis 70 % von VDD, und Kontrolle V_OL, Klingeln und SDA Stabilität, während SCL HIGH ist.
| Symptom | Wahrscheinliche Ursachen | Aktionen |
|---|---|---|
| Keine Ziele gefunden | fehlender Boden, falsche Adresse, getauschte SDA/SCL | Continuity, Power, 7-Bit-Scan überprüfen |
| Linien immer HIGH | fehlender Klimmzug oder falsche Schiene | Überprüfen Sie beide Widerstände und ihre Schiene |
| Leine festgefahren | Ziel im Reset, Verdrahtungsfehler, unterbrochene Transaktion | Module isolieren und das Segment zurücksetzen |
| Zufällige NACKs | langsamer Anstieg, Rauschen, Überkapazität oder Geschwindigkeit | Maßnahme t_r, Abnahme R_pSlow Bus |
| Fails nur mit allen Modulen | parallele Klimmzüge zu starke oder kumulative Kapazität | Berechnung des äquivalenten Widerstands und der Kapazität |
Eine typische Wiederherstellung gibt SDA frei, erzeugt bis zu neun SCL-Pulse, dann einen STOP. Verwenden Sie es nur, wenn alle Datenblätter es zulassen; Segment-Reset kann robuster sein.
Pre-layout Checkliste
- Teilen sich alle Teile Masse und kompatible Busspannung?
- Haben SDA und SCL jeweils einen effektiven Pull-up, ohne zufällige Parallelzusätze?
- Sind Adressen eindeutig und in 7-Bit-Form aufgeführt?
- Wird die Geschwindigkeit von jedem Ziel, Shifter und Isolator unterstützt?
- Do
R_p,minundR_p,maxden gewählten Wert gebunden? - Wird die Anstiegszeit auf dem Board mit echter Kapazität überprüft?
zugehöriger Rechner
- Öffnen Sie den Pull-up / Pull-down-Rechner Berechnen des Widerstandsfensters aus
VDDGPIO-Strom, Schwellenwerte, Leitungskapazität und I2C-Anstiegszeitgrenze.
Quellen
- NXP Halbleiter, *UM10204 - I2C-Bus Spezifikation und Benutzerhandbuch *: Protokoll, elektrische Pegel und Sm / Fm / Fm + Timing.
- Datenblätter für den verwendeten Controller, Ziele, Shifter, Puffer und Isolatoren: Sie haben Priorität für
I_OL,V_OL, Eingangskapazität und Taktstreckunterstützung.