fix(P4): Hängenden I2C-Bus freitakten - Ursache des schwarzen Bildes (1.6.13) #41

Merged
thomas merged 1 commits from fix/i2c-bus-freitakten into main 2026-09-01 16:17:43 +02:00
Owner

Der Log nach einem Reset zeigte alle Panel-Schritte fehlerfrei, aber i2c transaction failed beim GT911. Bridge (0x45) und Touch (0x14) teilen sich den Bus: Trifft ein Reset des P4 mitten in eine Übertragung, bleibt der Baustein in seiner Bitausgabe stehen und hält SDA dauerhaft low. Beide hängen an Dauerstrom, der Zustand überlebt also Reset und Flashen - nur echtes Stromabziehen löst ihn.

  • ws7_i2c_bus_recover() taktet SCL vor dem Anlegen des Busses bis zu neunmal von Hand, bis SDA freigegeben wird, und erzeugt dann eine Stop-Bedingung. Bei freiem Bus läuft die Funktion wirkungslos durch.
  • ws7_bridge_write() prüft jetzt den Rückgabewert. Bisher liefen fehlgeschlagene Schreibzugriffe stillschweigend ins Leere - der Grund, warum das schwarze Bild keinerlei Spur hinterließ.
  • pins_config.h: #elsealle statt #else seit 1.6.10 korrigiert. Der Tippfehler traf nur den JC_PANEL_43-Zweig, der dadurch nicht mehr übersetzbar war.

Beide Panel-Varianten mit arduino-cli gegengebaut.

Der Log nach einem Reset zeigte alle Panel-Schritte fehlerfrei, aber `i2c transaction failed` beim GT911. Bridge (0x45) und Touch (0x14) teilen sich den Bus: Trifft ein Reset des P4 mitten in eine Übertragung, bleibt der Baustein in seiner Bitausgabe stehen und hält SDA dauerhaft low. Beide hängen an Dauerstrom, der Zustand überlebt also Reset und Flashen - nur echtes Stromabziehen löst ihn. - `ws7_i2c_bus_recover()` taktet SCL vor dem Anlegen des Busses bis zu neunmal von Hand, bis SDA freigegeben wird, und erzeugt dann eine Stop-Bedingung. Bei freiem Bus läuft die Funktion wirkungslos durch. - `ws7_bridge_write()` prüft jetzt den Rückgabewert. Bisher liefen fehlgeschlagene Schreibzugriffe stillschweigend ins Leere - der Grund, warum das schwarze Bild keinerlei Spur hinterließ. - `pins_config.h`: `#elsealle` statt `#else` seit 1.6.10 korrigiert. Der Tippfehler traf nur den `JC_PANEL_43`-Zweig, der dadurch nicht mehr übersetzbar war. Beide Panel-Varianten mit arduino-cli gegengebaut.
thomas added 1 commit 2026-09-01 16:17:41 +02:00
Der Log nach einem Reset zeigte alle Panel-Schritte fehlerfrei, aber
"i2c transaction failed" beim GT911. Bridge und Touch teilen sich den Bus:
Trifft ein Reset des P4 mitten in eine Übertragung, bleibt der Baustein in
seiner Bitausgabe stehen und hält SDA dauerhaft low. Beide hängen an
Dauerstrom, der Zustand überlebt also Reset und Flashen.

- ws7_i2c_bus_recover() taktet SCL vor dem Anlegen des Busses bis zu neunmal
  von Hand, bis SDA freigegeben wird, und erzeugt dann eine Stop-Bedingung.
  Bei freiem Bus läuft die Funktion wirkungslos durch.
- ws7_bridge_write() prüft den Rückgabewert. Bisher liefen fehlgeschlagene
  Schreibzugriffe stillschweigend ins Leere - der eigentliche Grund, warum
  das schwarze Bild keinerlei Spur hinterließ.
- pins_config.h: "#elsealle" statt "#else" seit 1.6.10 korrigiert. Der
  Tippfehler traf nur den JC_PANEL_43-Zweig, der dadurch nicht mehr
  übersetzbar war. Beide Panel-Varianten wieder gegengebaut.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018QoLDQeUh1dCQz7yYZVb4Y
thomas merged commit 9bbd7d72aa into main 2026-09-01 16:17:43 +02:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: thomas/Dual-PID#41