fix(P4): Touch erst nach Panel-Freigabe initialisieren (1.6.14) #42
@@ -1,3 +1,15 @@
|
|||||||
|
Version 1.6.14:
|
||||||
|
- Der Touch-Controller wird jetzt erst angesprochen, nachdem die Bridge freigegeben und die
|
||||||
|
Hintergrundbeleuchtung eingeschaltet ist. Der GT9271 haengt an derselben Versorgung und
|
||||||
|
antwortet vorher nicht auf I2C - deshalb schlug seine Initialisierung bisher schon beim
|
||||||
|
Kaltstart fehl. In der Werks-Testskizze steht die Touch-Initialisierung aus demselben
|
||||||
|
Grund hinter dem Einschalten der Beleuchtung; beim Uebertragen in die Firmware war diese
|
||||||
|
Reihenfolge verloren gegangen.
|
||||||
|
- Die Wartezeit dazwischen steht als WS7_TOUCH_POWER_MS in pins_config.h (Vorgabe 120 ms).
|
||||||
|
- Neu im Start-Log: eine Liste aller Bausteine am I2C-Bus, einmal vor und einmal nach dem
|
||||||
|
Panel-Start. Erwartet werden 0x45 (Bridge) und 0x14 (Touch). Damit ist auf einen Blick zu
|
||||||
|
sehen, ob ein Baustein gar nicht antwortet, statt aus Treiberfehlern raten zu muessen.
|
||||||
|
|
||||||
Version 1.6.13:
|
Version 1.6.13:
|
||||||
- Ursache des schwarzen Bildes gefunden: ein haengender I2C-Bus. Trifft ein Reset des P4
|
- Ursache des schwarzen Bildes gefunden: ein haengender I2C-Bus. Trifft ein Reset des P4
|
||||||
mitten in eine laufende Uebertragung, bleibt der angesprochene Baustein in seiner
|
mitten in eine laufende Uebertragung, bleibt der angesprochene Baustein in seiner
|
||||||
|
|||||||
@@ -131,6 +131,20 @@ static void ws7_i2c_bus_recover(void)
|
|||||||
gpio_reset_pin(BSP_I2C_SDA);
|
gpio_reset_pin(BSP_I2C_SDA);
|
||||||
gpio_reset_pin(BSP_I2C_SCL);
|
gpio_reset_pin(BSP_I2C_SCL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Zeigt, welche Bausteine sich am I2C-Bus melden. Erwartet werden 0x45 (Bridge) und
|
||||||
|
// 0x14 (GT9271-Touch); 0x18 waere der Audio-Baustein. Fehlt einer, sagt das mehr aus als
|
||||||
|
// jede Fehlermeldung des Treibers.
|
||||||
|
static void ws7_i2c_scan(const char *wann)
|
||||||
|
{
|
||||||
|
esp_rom_printf("[Panel] I2C-Bausteine (%s):", wann);
|
||||||
|
for (uint8_t addr = 1; addr < 127; addr++) {
|
||||||
|
if (i2c_master_probe(s_i2c_handle, addr, 50) == ESP_OK) {
|
||||||
|
esp_rom_printf(" 0x%02X", addr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
esp_rom_printf("\n");
|
||||||
|
}
|
||||||
#endif // JC_PANEL_TYPE == WS_PANEL_7H
|
#endif // JC_PANEL_TYPE == WS_PANEL_7H
|
||||||
|
|
||||||
// Klartext-Meldung auf der seriellen Konsole. Bewusst esp_rom_printf: das laeuft auch bei
|
// Klartext-Meldung auf der seriellen Konsole. Bewusst esp_rom_printf: das laeuft auch bei
|
||||||
@@ -389,6 +403,7 @@ bool jc_board_bringup(void)
|
|||||||
i2c_new_master_bus(&i2c_bus_conf, &s_i2c_handle);
|
i2c_new_master_bus(&i2c_bus_conf, &s_i2c_handle);
|
||||||
|
|
||||||
#if JC_PANEL_TYPE == WS_PANEL_7H
|
#if JC_PANEL_TYPE == WS_PANEL_7H
|
||||||
|
ws7_i2c_scan("vor dem Panel-Start");
|
||||||
// Bridge des Waveshare-Panels vorbereiten (noch ohne Hintergrundbeleuchtung).
|
// Bridge des Waveshare-Panels vorbereiten (noch ohne Hintergrundbeleuchtung).
|
||||||
ws7_bridge_pre_init();
|
ws7_bridge_pre_init();
|
||||||
#endif
|
#endif
|
||||||
@@ -567,6 +582,16 @@ bool jc_board_bringup(void)
|
|||||||
};
|
};
|
||||||
esp_lcd_dpi_panel_register_event_callbacks(disp_panel, &cbs, NULL);
|
esp_lcd_dpi_panel_register_event_callbacks(disp_panel, &cbs, NULL);
|
||||||
|
|
||||||
|
#if JC_PANEL_TYPE == WS_PANEL_7H
|
||||||
|
// Bridge freigeben und Beleuchtung einschalten, BEVOR der Touch angesprochen wird.
|
||||||
|
// Der GT9271 antwortet erst danach: Die Freigabe der Bridge (Register 0xAD) versorgt
|
||||||
|
// offenbar auch ihn. In der Werks-Testskizze steht die Touch-Initialisierung aus
|
||||||
|
// demselben Grund hinter dem Einschalten der Beleuchtung.
|
||||||
|
jc_backlight_set(100);
|
||||||
|
vTaskDelay(pdMS_TO_TICKS(WS7_TOUCH_POWER_MS));
|
||||||
|
ws7_i2c_scan("nach dem Panel-Start");
|
||||||
|
#endif
|
||||||
|
|
||||||
esp_lcd_panel_io_handle_t tp_io_handle = NULL;
|
esp_lcd_panel_io_handle_t tp_io_handle = NULL;
|
||||||
// MUSS vorbelegt sein: schlaegt die Touch-Initialisierung fehl, gibt der Treiber einen
|
// MUSS vorbelegt sein: schlaegt die Touch-Initialisierung fehl, gibt der Treiber einen
|
||||||
// unbrauchbaren Zeiger zurueck. Ohne Vorbelegung landet Muell im LVGL-Port.
|
// unbrauchbaren Zeiger zurueck. Ohne Vorbelegung landet Muell im LVGL-Port.
|
||||||
|
|||||||
@@ -140,6 +140,11 @@
|
|||||||
// Wert verzoegert das Loslassen und daempft dadurch den Schwung beim Wischen.
|
// Wert verzoegert das Loslassen und daempft dadurch den Schwung beim Wischen.
|
||||||
#define WS7_TOUCH_HOLD_MS 40
|
#define WS7_TOUCH_HOLD_MS 40
|
||||||
|
|
||||||
|
// Wartezeit zwischen dem Freigeben der Bridge und dem Ansprechen des Touch. Der GT9271
|
||||||
|
// haengt an derselben Versorgung und braucht nach dem Einschalten einen Moment, bis er
|
||||||
|
// auf I2C antwortet. Meldet sich 0x14 beim Start nicht, diesen Wert erhoehen.
|
||||||
|
#define WS7_TOUCH_POWER_MS 120
|
||||||
|
|
||||||
#elif JC_PANEL_TYPE == JC_PANEL_70
|
#elif JC_PANEL_TYPE == JC_PANEL_70
|
||||||
|
|
||||||
#define LCD_H_RES 1024
|
#define LCD_H_RES 1024
|
||||||
|
|||||||
Reference in New Issue
Block a user