Merge pull request 'fix(P4): Nach Kaltstart einmal selbst neu starten (1.6.22)' (#50) from fix/kaltstart-neustart into main

This commit was merged in pull request #50.
This commit is contained in:
2026-09-02 02:45:31 +02:00
3 changed files with 53 additions and 1 deletions
+18
View File
@@ -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: Version 1.6.21:
- Der Hochlauf lief zuletzt vollstaendig fehlerfrei durch - Bridge zweimal eingestellt, - Der Hochlauf lief zuletzt vollstaendig fehlerfrei durch - Bridge zweimal eingestellt,
Panel zweimal geweckt, alle I2C-Bausteine erreichbar - und trotzdem kam beim ersten Panel zweimal geweckt, alle I2C-Bausteine erreichbar - und trotzdem kam beim ersten
@@ -24,6 +24,7 @@
#include "protocol_client.h" #include "protocol_client.h"
#include "ui.h" #include "ui.h"
#include "display_hal.h" #include "display_hal.h"
#include "pins_config.h"
#include <ArduinoJson.h> #include <ArduinoJson.h>
#include <Update.h> #include <Update.h>
#include <Preferences.h> #include <Preferences.h>
@@ -296,6 +297,31 @@ void setup() {
g_client.onOta(onOta); g_client.onOta(onOta);
hal_init(&g_client); // LVGL + Panel/Touch + Dashboard (ruft ui_init intern auf) 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() g_client.begin(); // UART starten, hello folgt automatisch in loop()
DBG_SERIAL.println(F("Bereit. Warte auf Verbindung zur Hauptplatine...")); DBG_SERIAL.println(F("Bereit. Warte auf Verbindung zur Hauptplatine..."));
+9 -1
View File
@@ -164,9 +164,17 @@
// Unterschied dabei: Die DSI-Verbindung geht einmal weg und neu auf, waehrend Bridge und // 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. // Panel schon versorgt und eingestellt sind. Genau das holt der zweite Aufbau nach.
// Kostet WS7_DSI_RESTART_MS zusaetzliche Startzeit. // Kostet WS7_DSI_RESTART_MS zusaetzliche Startzeit.
#define WS7_DSI_RESTART 1 #define WS7_DSI_RESTART 0
#define WS7_DSI_RESTART_MS 200 #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 #define WS7_TEST_PATTERN 0
#elif JC_PANEL_TYPE == JC_PANEL_70 #elif JC_PANEL_TYPE == JC_PANEL_70