From ecb9836510933e5fa830650fb40da91d330cd19d Mon Sep 17 00:00:00 2001 From: raw-designs Date: Tue, 1 Sep 2026 17:04:51 +0200 Subject: [PATCH] =?UTF-8?q?fix(P4):=20I2C-St=C3=B6rimpulsfilter=20-=20Ursa?= =?UTF-8?q?che=20des=20schwarzen=20Bildes=20(1.6.16)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Claude-Session: https://claude.ai/code/session_018QoLDQeUh1dCQz7yYZVb4Y --- P4_Display_Firmware/Changelog.txt | 15 +++++++++++++++ P4_Display_Firmware/board_bringup.c | 10 ++++++++++ 2 files changed, 25 insertions(+) diff --git a/P4_Display_Firmware/Changelog.txt b/P4_Display_Firmware/Changelog.txt index a562c99..dc4d508 100644 --- a/P4_Display_Firmware/Changelog.txt +++ b/P4_Display_Firmware/Changelog.txt @@ -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. diff --git a/P4_Display_Firmware/board_bringup.c b/P4_Display_Firmware/board_bringup.c index 7168ef6..869639e 100644 --- a/P4_Display_Firmware/board_bringup.c +++ b/P4_Display_Firmware/board_bringup.c @@ -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);