diff --git a/P4_Display_Firmware/Changelog.txt b/P4_Display_Firmware/Changelog.txt index 2f7b8a6..c704819 100644 --- a/P4_Display_Firmware/Changelog.txt +++ b/P4_Display_Firmware/Changelog.txt @@ -1,3 +1,17 @@ +Version 1.6.20: +- Nach 1.6.19 lief es reproduzierbar so ab: Beim Einschalten ging nach zwei bis drei + Sekunden die Hintergrundbeleuchtung an, dann kam nichts mehr; nach einem Reset ging die + Beleuchtung kurz aus und danach erschien Beleuchtung samt Bild. Daraus folgt der letzte + fehlende Schritt: Auch die Grundeinstellung der Bridge lief bisher nur einmal, und zwar + bevor die DSI-Strecke ueberhaupt existierte. Beim Reset half es nur deshalb, weil die + Bridge ihre Einstellung aus dem vorigen Durchlauf noch hatte und diesmal ein DSI-Signal + vorfand. +- Die Grundeinstellung der Bridge wird jetzt ein zweites Mal geschrieben, sobald die + Videoausgabe laeuft - dasselbe Vorgehen wie bei den Weckbefehlen des Panels in 1.6.19. + Damit wird ohne Reset erreicht, was vorher erst der zweite Durchlauf brachte. +- Im Start-Log sind beide Durchgaenge benannt ("Bridge-Grundeinstellung vor dem DSI-Start" + und "... nach dem Start der Videoausgabe"). + Version 1.6.19: - Die Wartezeit aus 1.6.18 hat den Start deutlich verbessert, aber noch nicht zuverlässig gemacht. Aus dem verbliebenen Fehlerbild folgt der nächste Schritt: Die Beleuchtung ging diff --git a/P4_Display_Firmware/board_bringup.c b/P4_Display_Firmware/board_bringup.c index 8ca9e0d..d69e8ef 100644 --- a/P4_Display_Firmware/board_bringup.c +++ b/P4_Display_Firmware/board_bringup.c @@ -193,8 +193,24 @@ static void ws7_bridge_write(uint8_t reg, uint8_t value) } } -// Bridge am I2C-Bus anmelden und Grundinitialisierung schreiben. Muss VOR dem -// DSI-Bringup laufen; die Hintergrundbeleuchtung bleibt dabei noch aus. +// Grundeinstellung der Bridge. Bewusst mehrfach aufrufbar, siehe unten. +// +// Warum zweimal: Beim ersten Aufruf existiert die DSI-Strecke noch gar nicht - die Bridge +// bekommt ihre Einstellung also, bevor ein Signal anliegt. Beim ersten Einschalten reichte +// das nicht: Die Beleuchtung ging an (die haengt an der Bridge), ein Bild kam aber nicht. +// Erst ein Reset half - und dann nur deshalb, weil die Bridge ihre Einstellung aus dem +// vorigen Durchlauf noch hatte und diesmal ein DSI-Signal vorfand. Genau das holt der +// zweite Aufruf nach, ohne dass ein Reset noetig ist. Die Register sind wiederholbar. +static void ws7_bridge_core_init(const char *wann) +{ + esp_rom_printf("[Panel] Bridge-Grundeinstellung %s\n", wann); + ws7_bridge_write(0xC0, 0x01); + ws7_bridge_write(0xC2, 0x01); + ws7_bridge_write(0xAC, 0x01); +} + +// Bridge am I2C-Bus anmelden und erstmalig einstellen. Laeuft VOR dem DSI-Bringup; +// die Hintergrundbeleuchtung bleibt dabei noch aus. static void ws7_bridge_pre_init(void) { i2c_device_config_t dev_cfg = { @@ -206,9 +222,7 @@ static void ws7_bridge_pre_init(void) s_bridge_handle = NULL; return; } - ws7_bridge_write(0xC0, 0x01); - ws7_bridge_write(0xC2, 0x01); - ws7_bridge_write(0xAC, 0x01); + ws7_bridge_core_init("vor dem DSI-Start"); } void jc_backlight_init(void) @@ -536,6 +550,7 @@ bool jc_board_bringup(void) // Zweiter Anlauf, jetzt bei laufender Videoausgabe: faengt den Fall ab, dass das // Panel beim ersten Mal noch nicht aufnahmebereit war. vTaskDelay(pdMS_TO_TICKS(WS7_PANEL_SETTLE_MS)); + ws7_bridge_core_init("nach dem Start der Videoausgabe"); ws7_panel_wake(io, "nach dem Start der Videoausgabe"); #if WS7_TEST_PATTERN // Prueffarbbalken: Sie entstehen im DSI-Baustein selbst und benutzen weder den