InnovChipELECTRONICS

INNOVCHIP · Ratgeber

I²C-Bus blockiert: SDA, SCL und Wiederherstellung prüfen

Kurz erklärt

Bei einem blockierten I²C-Bus sollten Sie zuerst feststellen, welche Leitung dauerhaft niedrig bleibt und welches Ereignis vorausging. Ein Software-Neustart ist kein Nachweis, dass die Ursache beseitigt wurde. Eine Wiederherstellung braucht eindeutige Grenzen und einen protokollierten Folgezustand.

Den Fehler vor dem Reset erfassen

Speichern Sie Adresse, letzte Operation, Treiberstatus und gemessene Pegel von SDA und SCL. Unterscheiden Sie einen fehlenden ACK von einer dauerhaft belegten Leitung. Wiederholt die Anwendung nur dieselbe Anfrage, kann der ursprüngliche Fehler im Protokoll verschwinden.

Reproduzieren Sie den Zustand mit einer einzelnen Transaktion. Notieren Sie, ob er beim Einschalten, nach einem MCU-Reset oder während einer Spannungsänderung auftritt. So lässt sich ein zeitliches Problem von einer dauerhaft falschen Verdrahtung trennen.

Versorgung und Leitungen gemeinsam prüfen

Kontrollieren Sie Versorgung und Reset des Sensors sowie die Bezugsspannung der Pull-ups. Ein eingeschalteter Controller bedeutet nicht, dass alle Teilnehmer betriebsbereit sind. Prüfen Sie auch, ob ein Pegelwandler oder ein weiterer Teilnehmer die Leitung beeinflusst.

Vergleichen Sie den Signalverlauf am Controller und am betroffenen Gerät. Erfassen Sie vorhandene Pull-ups und Leitungskapazitäten, statt pauschal einen kleineren Widerstand einzubauen. Die zulässigen elektrischen Werte ergeben sich aus den verwendeten Bauteilen und dem Busmodus.

Eine begrenzte Recovery vorsehen

NXP beschreibt für festgehaltenes SDA neun Taktimpulse; bei festgehaltenem SCL können Hardware-Reset oder Aus- und Einschalten der Versorgung nötig sein. Das Verfahren muss zur konkreten Schaltung passen. NXP — UM10204 I²C-bus specification

Blockieren Sie während der Wiederherstellung neue Transaktionen und klären Sie in Systemen mit mehreren Controllern die Bushoheit. Treiben Sie offene Leitungen nicht einfach aktiv auf High. Begrenzen Sie Versuche und melden Sie einen eindeutigen Fehler, wenn die Leitung nicht freikommt.

Den Sensor danach neu synchronisieren

Ein freier Bus garantiert keine gültige Sensorkonfiguration. Prüfen Sie Gerätekennung und relevante Register, stellen Sie die Konfiguration bei Bedarf wieder her und kennzeichnen Sie bis dahin Messwerte als ungültig. Erst anschließend darf die normale Abfrage fortgesetzt werden.

Testbeispiel: Der Controller startet mitten in einer Übertragung neu, während der Sensor versorgt bleibt. Prüfen Sie, ob das System die Unterbrechung erkennt, einen begrenzten Wiederherstellungsweg ausführt und entweder gültige Daten oder einen erkennbaren Fehler liefert.

Für den Wiederherstellungstest festhalten

  • SDA/SCL-Pegel und letzte Transaktion sichern.
  • Reset- und Versorgungszustände aller Beteiligten erfassen.
  • Recovery-Versuche und maximale Wartezeiten festlegen.
  • Sensorkonfiguration nach der Recovery verifizieren.
  • Ungültige Messwerte und wiederholte Fehler sichtbar machen.

Häufige Fragen

Hilft eine langsamere I²C-Taktrate immer?

Nein. Sie kann bestimmte Timingprobleme sichtbar machen oder entschärfen, löst aber keine blockierte Versorgung oder festgehaltene Leitung. Vergleichen Sie Messungen vor und nach der Änderung.

Soll die Firmware endlos erneut versuchen?

Nein. Legen Sie ein zum Produkt passendes Limit und einen definierten Fehlerzustand fest. Eine Endlosschleife kann andere Aufgaben blockieren und den eigentlichen Ausfall verbergen.

Technische Quellen

Passende Entwicklungsleistung

Sensortreiber entwickeln

Projekt besprechen