fix(P4): Abschaltfolge zurücknehmen, Startgrund und LDO prüfen (1.6.12) #40
@@ -1,16 +1,3 @@
|
||||
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:
|
||||
- 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
|
||||
|
||||
@@ -67,11 +67,6 @@ Das Panel hängt hinter einer Waveshare-Bridge und braucht **keinen** Hersteller
|
||||
- Reihenfolge: Bridge-Grundinitialisierung (`C0`/`C2`/`AC`) → DSI → DCS `MADCTL`/`Sleep Out`/
|
||||
`Display On` → DPI-Start → **erst dann** Hintergrundbeleuchtung. Wird das Licht früher
|
||||
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**
|
||||
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
|
||||
|
||||
@@ -110,16 +110,8 @@ static void ws7_bridge_write(uint8_t reg, uint8_t value)
|
||||
i2c_master_transmit(s_bridge_handle, buf, sizeof(buf), 100);
|
||||
}
|
||||
|
||||
// Bridge in einen definierten Grundzustand bringen und neu initialisieren.
|
||||
//
|
||||
// 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.
|
||||
// Bridge am I2C-Bus anmelden und Grundinitialisierung schreiben. Muss VOR dem
|
||||
// DSI-Bringup laufen; die Hintergrundbeleuchtung bleibt dabei noch aus.
|
||||
static void ws7_bridge_pre_init(void)
|
||||
{
|
||||
i2c_device_config_t dev_cfg = {
|
||||
@@ -131,22 +123,9 @@ static void ws7_bridge_pre_init(void)
|
||||
s_bridge_handle = NULL;
|
||||
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(0xC2, 0x01);
|
||||
ws7_bridge_write(0xAC, 0x01);
|
||||
vTaskDelay(pdMS_TO_TICKS(20));
|
||||
}
|
||||
|
||||
void jc_backlight_init(void)
|
||||
|
||||
@@ -126,7 +126,7 @@
|
||||
// -------------------------------------------------------------------------------------
|
||||
// Firmware
|
||||
// -------------------------------------------------------------------------------------
|
||||
#define DISPLAY_FW_VERSION "1.6.11" // Firmware-Stand der P4-Display-Steuerung (Info-Seite)
|
||||
#define DISPLAY_FW_VERSION "1.6.10" // Firmware-Stand der P4-Display-Steuerung (Info-Seite)
|
||||
|
||||
// -------------------------------------------------------------------------------------
|
||||
// Protokoll
|
||||
|
||||
@@ -114,12 +114,6 @@
|
||||
// nicht bekannt; die 180-Grad-Drehung macht deshalb der PPA (WS7_ROTATE_180).
|
||||
#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
|
||||
// werden die Achsen getauscht. Die Spiegelung geschieht VOR dem Tausch, also noch auf den
|
||||
// Rohwerten: Roh-X wird zur Bildschirmhoehe, Roh-Y zur Bildschirmbreite.
|
||||
|
||||
Reference in New Issue
Block a user