diff --git a/P4_Display_Firmware/Changelog.txt b/P4_Display_Firmware/Changelog.txt index 0b8ef53..b18554d 100644 --- a/P4_Display_Firmware/Changelog.txt +++ b/P4_Display_Firmware/Changelog.txt @@ -1,3 +1,21 @@ +Version 1.6.22: +- Der Ab- und Wiederaufbau der DSI-Strecke aus 1.6.21 hat nicht geholfen, sondern das Bild + um einen Schritt verschlechtert: Nach dem Einschalten kam gar nichts mehr, nach dem + ersten Reset nur die Beleuchtung, erst nach dem zweiten das Bild. Ein Ab- und Wiederaufbau + im laufenden Betrieb ist einem echten Chip-Reset also nicht gleichwertig. WS7_DSI_RESTART + steht deshalb wieder auf 0; der Schalter bleibt samt Begruendung erhalten. +- Stattdessen der Weg, den die Messungen eindeutig stuetzen: Nach einem Kaltstart startet + der P4 sich genau einmal selbst neu, sobald der erste Hochlauf durch ist. Damit passiert + genau das, was bei jedem Versuch zuverlaessig geholfen hat - ohne dass jemand die + Reset-Taste druecken muss. +- Eine Schleife ist ausgeschlossen: Beim zweiten Durchlauf ist der Startgrund kein Kaltstart + mehr, die Bedingung greift nicht erneut. Der Fruehstart-Zaehler der Absturzsicherung wird + vor dem gewollten Neustart zurueckgesetzt, damit dieser nicht als Absturz zaehlt. +- Kostet rund drei Sekunden, und nur beim Einschalten. Schalter WS7_COLD_BOOT_RESTART in + pins_config.h. +- Das ist eine Umgehung, keine Erklaerung: Warum das Panel den ersten Anlauf nach dem + Einschalten nicht annimmt, ist weiterhin offen. Der Hochlauf meldet durchgehend Erfolg. + Version 1.6.21: - Der Hochlauf lief zuletzt vollstaendig fehlerfrei durch - Bridge zweimal eingestellt, Panel zweimal geweckt, alle I2C-Bausteine erreichbar - und trotzdem kam beim ersten diff --git a/P4_Display_Firmware/P4_Display_Firmware.ino b/P4_Display_Firmware/P4_Display_Firmware.ino index 182dbf8..69d57bc 100644 --- a/P4_Display_Firmware/P4_Display_Firmware.ino +++ b/P4_Display_Firmware/P4_Display_Firmware.ino @@ -24,6 +24,7 @@ #include "protocol_client.h" #include "ui.h" #include "display_hal.h" +#include "pins_config.h" #include #include #include @@ -296,6 +297,31 @@ void setup() { g_client.onOta(onOta); hal_init(&g_client); // LVGL + Panel/Touch + Dashboard (ruft ui_init intern auf) + + // --- Waveshare-Panel: einmaliger Neustart nach dem Einschalten --- + // + // Das Panel kommt nach dem Anlegen der Versorgung im ersten Anlauf nicht zuverlaessig + // hoch: Die Beleuchtung geht an, ein Bild bleibt aus - obwohl jeder Schritt des + // Hochlaufs Erfolg meldet. Ein Reset behebt es zuverlaessig, und zwar nur ein echter + // Chip-Reset; die DSI-Strecke im laufenden Betrieb ab- und wieder aufzubauen genuegt + // nicht (siehe WS7_DSI_RESTART). + // + // Deshalb startet der P4 sich nach einem Kaltstart genau einmal selbst neu, nachdem + // der erste Hochlauf durch ist. Beim zweiten Durchlauf ist der Startgrund kein + // Kaltstart mehr, die Bedingung greift also nicht erneut - eine Schleife ist + // ausgeschlossen. Kostet rund drei Sekunden, aber nur beim Einschalten. +#if (JC_PANEL_TYPE == WS_PANEL_7H) && WS7_COLD_BOOT_RESTART + if (esp_reset_reason() == ESP_RST_POWERON) { + // Der Fruehstart-Zaehler wurde oben bereits erhoeht. Diesen gewollten Neustart + // darf er nicht mitzaehlen, sonst laeuft die Absturzsicherung nach ein paar + // Einschaltvorgaengen in den Update-Modus. + { Preferences p; p.begin("bootguard", false); p.putUShort("early", 0); p.end(); } + DBG_SERIAL.println(F("[Panel] Kaltstart - einmaliger Neustart fuer das Displaypanel")); + DBG_SERIAL.flush(); + delay(50); + esp_restart(); + } +#endif g_client.begin(); // UART starten, hello folgt automatisch in loop() DBG_SERIAL.println(F("Bereit. Warte auf Verbindung zur Hauptplatine...")); diff --git a/P4_Display_Firmware/pins_config.h b/P4_Display_Firmware/pins_config.h index f9a31e3..528a8d8 100644 --- a/P4_Display_Firmware/pins_config.h +++ b/P4_Display_Firmware/pins_config.h @@ -164,9 +164,17 @@ // Unterschied dabei: Die DSI-Verbindung geht einmal weg und neu auf, waehrend Bridge und // Panel schon versorgt und eingestellt sind. Genau das holt der zweite Aufbau nach. // Kostet WS7_DSI_RESTART_MS zusaetzliche Startzeit. -#define WS7_DSI_RESTART 1 +#define WS7_DSI_RESTART 0 #define WS7_DSI_RESTART_MS 200 +// Nach einem Kaltstart einmal selbst neu starten, sobald der erste Hochlauf durch ist. +// Das Panel kommt beim ersten Anlauf nach dem Einschalten nicht zuverlaessig hoch; +// ein echter Chip-Reset behebt es zuverlaessig, der Ab- und Wiederaufbau der +// DSI-Strecke im Betrieb dagegen nicht. Kostet rund drei Sekunden beim Einschalten. +// Eine Schleife ist ausgeschlossen: Beim zweiten Durchlauf ist der Startgrund kein +// Kaltstart mehr. +#define WS7_COLD_BOOT_RESTART 1 + #define WS7_TEST_PATTERN 0 #elif JC_PANEL_TYPE == JC_PANEL_70