Merge pull request 'fix(P4): Schwarzes Bild nach Reset am Waveshare-Panel (1.6.11)' (#39) from fix/schwarzes-bild-nach-reset into main
This commit was merged in pull request #39.
This commit is contained in:
@@ -1,3 +1,16 @@
|
|||||||
|
Version 1.6.11:
|
||||||
|
- Fehlerbehebung: Nach einem Reset des P4 blieb das Bild schwarz, während die
|
||||||
|
Hintergrundbeleuchtung brannte; erst ein erneutes Flashen half. Die Bridge des
|
||||||
|
Waveshare-Panels hat keine Reset-Leitung und hängt an Dauerstrom - ein Reset des P4
|
||||||
|
setzt sie also nicht zurück, ihre Register standen noch auf den Werten der vorigen
|
||||||
|
Sitzung. Der P4 baut seine DSI-Strecke aber komplett neu auf, und ein frischer DSI-Start
|
||||||
|
auf einer bereits laufenden Bridge liefert kein Bild. Beim Flashen wird die Versorgung
|
||||||
|
getrennt, deshalb war der Fehler dort nicht zu sehen.
|
||||||
|
- Der Start schaltet die Bridge jetzt zuerst definiert ab (Beleuchtung, dann Ausgabe,
|
||||||
|
dann Grundregister), wartet WS7_BRIDGE_RESET_MS und fährt sie erst danach hoch. Der
|
||||||
|
Wert steht in pins_config.h (Vorgabe 120 ms) und ist die erste Stellschraube, falls
|
||||||
|
nach einem Reset doch einmal ein schwarzes Bild auftaucht.
|
||||||
|
|
||||||
Version 1.6.10:
|
Version 1.6.10:
|
||||||
- WS7_PARTIAL_REFRESH ist jetzt auch im Auslieferungsstand 1. Am Gerät geprüft: kein
|
- WS7_PARTIAL_REFRESH ist jetzt auch im Auslieferungsstand 1. Am Gerät geprüft: kein
|
||||||
Flackern, und der Gewinn ist der größte der drei Tempo-Maßnahmen - vor allem während
|
Flackern, und der Gewinn ist der größte der drei Tempo-Maßnahmen - vor allem während
|
||||||
|
|||||||
@@ -67,6 +67,11 @@ Das Panel hängt hinter einer Waveshare-Bridge und braucht **keinen** Hersteller
|
|||||||
- Reihenfolge: Bridge-Grundinitialisierung (`C0`/`C2`/`AC`) → DSI → DCS `MADCTL`/`Sleep Out`/
|
- Reihenfolge: Bridge-Grundinitialisierung (`C0`/`C2`/`AC`) → DSI → DCS `MADCTL`/`Sleep Out`/
|
||||||
`Display On` → DPI-Start → **erst dann** Hintergrundbeleuchtung. Wird das Licht früher
|
`Display On` → DPI-Start → **erst dann** Hintergrundbeleuchtung. Wird das Licht früher
|
||||||
eingeschaltet, blitzt beim Start Bildrauschen auf.
|
eingeschaltet, blitzt beim Start Bildrauschen auf.
|
||||||
|
- **Nach einem Reset:** Die Bridge hat keine Reset-Leitung und hängt an Dauerstrom — ein
|
||||||
|
Reset des P4 setzt sie **nicht** zurück. Der Bringup schaltet sie deshalb zuerst
|
||||||
|
definiert ab, wartet `WS7_BRIDGE_RESET_MS` und fährt sie dann neu hoch. Ohne das trifft
|
||||||
|
ein frischer DSI-Start auf eine noch laufende Bridge: Bild schwarz, Beleuchtung an.
|
||||||
|
Nach dem Flashen fällt das nicht auf, weil dabei die Versorgung getrennt wird.
|
||||||
- **Einbaulage:** `WS7_ROTATE_180` in [`pins_config.h`](pins_config.h) dreht Bild **und**
|
- **Einbaulage:** `WS7_ROTATE_180` in [`pins_config.h`](pins_config.h) dreht Bild **und**
|
||||||
Touch um 180°, falls das Panel auf dem Kopf montiert wird. Vorgabe ist **0** — in der
|
Touch um 180°, falls das Panel auf dem Kopf montiert wird. Vorgabe ist **0** — in der
|
||||||
jetzigen Einbaulage steht das Bild richtig herum. Die Drehung macht der
|
jetzigen Einbaulage steht das Bild richtig herum. Die Drehung macht der
|
||||||
|
|||||||
@@ -110,8 +110,16 @@ static void ws7_bridge_write(uint8_t reg, uint8_t value)
|
|||||||
i2c_master_transmit(s_bridge_handle, buf, sizeof(buf), 100);
|
i2c_master_transmit(s_bridge_handle, buf, sizeof(buf), 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Bridge am I2C-Bus anmelden und Grundinitialisierung schreiben. Muss VOR dem
|
// Bridge in einen definierten Grundzustand bringen und neu initialisieren.
|
||||||
// DSI-Bringup laufen; die Hintergrundbeleuchtung bleibt dabei noch aus.
|
//
|
||||||
|
// WICHTIG - der Grund fuer das Abschalten am Anfang: Die Bridge hat keine Reset-Leitung
|
||||||
|
// und haengt an Dauerstrom. Ein Reset des P4 setzt sie also NICHT zurueck; ihre Register
|
||||||
|
// stehen noch so, wie die vorige Sitzung sie hinterlassen hat. Der P4 baut seine
|
||||||
|
// DSI-Strecke aber komplett neu auf. Trifft ein frischer DSI-Start auf eine bereits
|
||||||
|
// laufende Bridge, bleibt das Bild schwarz, waehrend die Hintergrundbeleuchtung brennt.
|
||||||
|
// Nach dem Flashen faellt das nicht auf, weil dabei die Versorgung getrennt wird.
|
||||||
|
//
|
||||||
|
// Deshalb erst ausschalten (Beleuchtung, dann Bridge), kurz warten, dann normal hochfahren.
|
||||||
static void ws7_bridge_pre_init(void)
|
static void ws7_bridge_pre_init(void)
|
||||||
{
|
{
|
||||||
i2c_device_config_t dev_cfg = {
|
i2c_device_config_t dev_cfg = {
|
||||||
@@ -123,9 +131,22 @@ static void ws7_bridge_pre_init(void)
|
|||||||
s_bridge_handle = NULL;
|
s_bridge_handle = NULL;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --- definierter Aus-Zustand (umgekehrte Reihenfolge zum Einschalten) ---
|
||||||
|
ws7_bridge_write(0xAB, 0xFF); // Helligkeit 0
|
||||||
|
ws7_bridge_write(0xAA, 0x01); // uebernehmen
|
||||||
|
ws7_bridge_write(0xAD, 0x00); // Bridge-Ausgabe aus
|
||||||
|
vTaskDelay(pdMS_TO_TICKS(20));
|
||||||
|
ws7_bridge_write(0xAC, 0x00);
|
||||||
|
ws7_bridge_write(0xC2, 0x00);
|
||||||
|
ws7_bridge_write(0xC0, 0x00);
|
||||||
|
vTaskDelay(pdMS_TO_TICKS(WS7_BRIDGE_RESET_MS));
|
||||||
|
|
||||||
|
// --- Grundinitialisierung wie im Linux-Treiber ---
|
||||||
ws7_bridge_write(0xC0, 0x01);
|
ws7_bridge_write(0xC0, 0x01);
|
||||||
ws7_bridge_write(0xC2, 0x01);
|
ws7_bridge_write(0xC2, 0x01);
|
||||||
ws7_bridge_write(0xAC, 0x01);
|
ws7_bridge_write(0xAC, 0x01);
|
||||||
|
vTaskDelay(pdMS_TO_TICKS(20));
|
||||||
}
|
}
|
||||||
|
|
||||||
void jc_backlight_init(void)
|
void jc_backlight_init(void)
|
||||||
|
|||||||
@@ -126,7 +126,7 @@
|
|||||||
// -------------------------------------------------------------------------------------
|
// -------------------------------------------------------------------------------------
|
||||||
// Firmware
|
// Firmware
|
||||||
// -------------------------------------------------------------------------------------
|
// -------------------------------------------------------------------------------------
|
||||||
#define DISPLAY_FW_VERSION "1.6.10" // Firmware-Stand der P4-Display-Steuerung (Info-Seite)
|
#define DISPLAY_FW_VERSION "1.6.11" // Firmware-Stand der P4-Display-Steuerung (Info-Seite)
|
||||||
|
|
||||||
// -------------------------------------------------------------------------------------
|
// -------------------------------------------------------------------------------------
|
||||||
// Protokoll
|
// Protokoll
|
||||||
|
|||||||
@@ -114,6 +114,12 @@
|
|||||||
// nicht bekannt; die 180-Grad-Drehung macht deshalb der PPA (WS7_ROTATE_180).
|
// nicht bekannt; die 180-Grad-Drehung macht deshalb der PPA (WS7_ROTATE_180).
|
||||||
#define WS7_MADCTL 0x00
|
#define WS7_MADCTL 0x00
|
||||||
|
|
||||||
|
// So lange bleibt die Bridge beim Start stromlos geschaltet, bevor sie neu
|
||||||
|
// initialisiert wird. Sie hat keine Reset-Leitung und ueberlebt einen Reset des P4;
|
||||||
|
// ohne diese Pause trifft ein frischer DSI-Start auf eine noch laufende Bridge und das
|
||||||
|
// Bild bleibt schwarz. Bei schwarzem Bild nach Reset zuerst diesen Wert erhoehen.
|
||||||
|
#define WS7_BRIDGE_RESET_MS 120
|
||||||
|
|
||||||
// Der GT9271 meldet im Hochformat: Roh-X 0..720, Roh-Y 0..1280. Fuer das Querformat
|
// Der GT9271 meldet im Hochformat: Roh-X 0..720, Roh-Y 0..1280. Fuer das Querformat
|
||||||
// werden die Achsen getauscht. Die Spiegelung geschieht VOR dem Tausch, also noch auf den
|
// werden die Achsen getauscht. Die Spiegelung geschieht VOR dem Tausch, also noch auf den
|
||||||
// Rohwerten: Roh-X wird zur Bildschirmhoehe, Roh-Y zur Bildschirmbreite.
|
// Rohwerten: Roh-X wird zur Bildschirmhoehe, Roh-Y zur Bildschirmbreite.
|
||||||
|
|||||||
Reference in New Issue
Block a user