fix(P4): I2C-Störimpulsfilter - Ursache des schwarzen Bildes (1.6.16)
Der I2C-Scan vor und nach dem Panel-Start war entscheidend: vor: 0x14 (Touch) 0x18 (Audio) 0x45 (Bridge) nach: 0x18 Es fallen genau die beiden Bausteine weg, die am Displaykabel hängen; der Audio-Baustein auf der Platine bleibt erreichbar, der Bus arbeitet also. Sobald die DSI-Ausgabe läuft, stören deren Signale auf das Flachbandkabel ein. Die Bridge liess sich danach nicht mehr ansprechen (ESP_ERR_INVALID_STATE), das Panel blieb dunkel. i2c_master_bus_config_t bekommt für WS_PANEL_7H jetzt glitch_ignore_cnt = 7 und enable_internal_pullup - beides setzt auch das Waveshare-Beispiel. In unserem Bringup fehlte es, weil die Bus-Einrichtung von den JC-Panels übernommen wurde, die kein Flachbandkabel dieser Länge haben. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018QoLDQeUh1dCQz7yYZVb4Y
This commit is contained in:
co-authored by
Claude Opus 5
parent
c4cb6eb90a
commit
ecb9836510
@@ -1,3 +1,18 @@
|
||||
Version 1.6.16:
|
||||
- Ursache des schwarzen Bildes gefunden. Der Start-Log zeigte es eindeutig: Vor dem
|
||||
Panel-Start meldeten sich alle drei I2C-Bausteine (Touch 0x14, Audio 0x18, Bridge 0x45),
|
||||
danach nur noch der Audio-Baustein. Es fielen also genau die beiden weg, die am
|
||||
Displaykabel haengen - der Bus selbst arbeitete weiter. Sobald die DSI-Ausgabe laeuft,
|
||||
stoeren deren schnelle Signale auf das lange Flachbandkabel ein, und ohne Filterung
|
||||
bringen diese Stoerspitzen die I2C-Uebertragung aus dem Tritt. Die Bridge liess sich
|
||||
daraufhin nicht mehr ansprechen, das Panel blieb dunkel.
|
||||
- Der I2C-Bus laeuft fuer das Waveshare-Panel jetzt mit Stoerimpulsfilter und internen
|
||||
Abschlusswiderstaenden, so wie es auch das Waveshare-Beispiel tut. Beides fehlte, weil
|
||||
die Bus-Einrichtung urspruenglich von den JC-Panels uebernommen wurde, die kein
|
||||
Flachbandkabel dieser Laenge haben.
|
||||
- Das erklaert rueckwirkend auch, warum sich der Fehler so sprunghaft verhielt: Ob eine
|
||||
Uebertragung durchkam, hing von der Stoerlage ab.
|
||||
|
||||
Version 1.6.15:
|
||||
- Diagnose fuer das schwarze Bild, das der Log bisher nicht erklaeren konnte: Alle Schritte
|
||||
liefen fehlerfrei durch, trotzdem blieb die Anzeige leer.
|
||||
|
||||
@@ -399,6 +399,16 @@ bool jc_board_bringup(void)
|
||||
.sda_io_num = BSP_I2C_SDA,
|
||||
.scl_io_num = BSP_I2C_SCL,
|
||||
.i2c_port = BSP_I2C_NUM,
|
||||
#if JC_PANEL_TYPE == WS_PANEL_7H
|
||||
// Stoerimpulsfilter und interne Abschlusswiderstaende - beides setzt auch das
|
||||
// Waveshare-Beispiel. Ohne den Filter brechen Bridge und Touch weg, sobald die
|
||||
// DSI-Ausgabe laeuft: Deren schnelle Signale stoeren auf das lange Flachbandkabel
|
||||
// ein, und ungefilterte Stoerspitzen bringen die I2C-Uebertragung aus dem Tritt.
|
||||
// Der Audio-Baustein auf der Platine bleibt dabei erreichbar, weil er nicht am
|
||||
// Displaykabel haengt - genau dieses Muster war im Start-Log zu sehen.
|
||||
.glitch_ignore_cnt = 7,
|
||||
.flags.enable_internal_pullup = true,
|
||||
#endif
|
||||
};
|
||||
i2c_new_master_bus(&i2c_bus_conf, &s_i2c_handle);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user