From 9d9591c26e7e3b15974bea8a282a1360e8cb0110 Mon Sep 17 00:00:00 2001 From: raw-designs Date: Tue, 1 Sep 2026 12:34:27 +0200 Subject: [PATCH] fix(P4): UART auf GPIO20/21, Touch oben/unten spiegeln (1.6.3) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Nach dem ersten Betrieb am Waveshare ESP32-P4-Pico: - UART zur Hauptplatine auf TX = GPIO20 / RX = GPIO21 (vorher GPIO17/18). Die JC-Panels bleiben bei GPIO33/GPIO31. - Das Bild steht in der tatsächlichen Einbaulage richtig herum, deshalb ist WS7_ROTATE_180 wieder 0. Der Schalter bleibt für den Fall einer anderen Montage erhalten. - Der Touch war oben/unten spiegelverkehrt: Der Digitizer sitzt gegenüber dem Bild um die Hochachse gedreht. WS7_TOUCH_MIRROR_RAW_X steht daher auf 1. Bild- und Touch-Ausrichtung sind zwei getrennte Schalter, weil sie an diesem Panel nicht zusammenfallen. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_018QoLDQeUh1dCQz7yYZVb4Y --- P4_Display_Firmware/Changelog.txt | 11 +++++++++++ P4_Display_Firmware/README.md | 17 ++++++++++------- P4_Display_Firmware/config.h | 12 ++++++------ P4_Display_Firmware/pins_config.h | 17 +++++++++++------ 4 files changed, 38 insertions(+), 19 deletions(-) diff --git a/P4_Display_Firmware/Changelog.txt b/P4_Display_Firmware/Changelog.txt index b8d72c4..16e827a 100644 --- a/P4_Display_Firmware/Changelog.txt +++ b/P4_Display_Firmware/Changelog.txt @@ -1,3 +1,14 @@ +Version 1.6.3: +- Waveshare ESP32-P4-Pico: UART zur Hauptplatine liegt jetzt auf TX = GPIO20 und + RX = GPIO21 (vorher GPIO17/GPIO18). Die JC-Panels bleiben bei GPIO33/GPIO31. +- Das Bild steht in der tatsächlichen Einbaulage richtig herum, die 180-Grad-Drehung aus + 1.6.1 ist deshalb wieder abgeschaltet (WS7_ROTATE_180 = 0). Sie bleibt als Schalter + erhalten, falls das Panel später anders montiert wird. +- Der Touch war dagegen oben/unten spiegelverkehrt: Der Digitizer sitzt gegenüber dem Bild + um die Hochachse gedreht. WS7_TOUCH_MIRROR_RAW_X steht dafür jetzt auf 1. Bild- und + Touch-Ausrichtung sind damit zwei getrennte Schalter, weil sie an diesem Panel eben + nicht zusammenfallen. + Version 1.6.2: - Kommt das Panel nicht hoch, stürzt der P4 nicht mehr wortlos ab. Die Bringup-Schritte melden ihren Fehler jetzt im Klartext auf der seriellen Konsole (auch bei abgeschaltetem diff --git a/P4_Display_Firmware/README.md b/P4_Display_Firmware/README.md index 5f43809..550da55 100644 --- a/P4_Display_Firmware/README.md +++ b/P4_Display_Firmware/README.md @@ -45,14 +45,14 @@ Vendor-Pakete: 4,3" im Ordner `JC4880P443C_I_W/`, 7,0" im Repo-Ordner | WLAN/BT (hier ungenutzt) | ESP32-C6 | ESP32-C6 | — (kein Funkmodul) | | Display | ST7701, 480×800 IPS, MIPI-DSI | JD9165, 1024×600 IPS, MIPI-DSI | 1280×720 IPS, MIPI-DSI 2 Lanes über Waveshare-Bridge | | Farbformat | RGB565 | RGB565 | **RGB888** (Bridge nimmt nichts anderes) | -| LVGL-Ausrichtung | Rotation **270°** (PPA) → 800×480 | **keine** Rotation, nativ 1024×600 | nativ 1280×720, bei Einbau auf dem Kopf **180°** (PPA) | +| LVGL-Ausrichtung | Rotation **270°** (PPA) → 800×480 | **keine** Rotation, nativ 1024×600 | **keine** Rotation, nativ 1280×720 | | Touch | GT911, I²C SDA=GPIO7 / SCL=GPIO8 | GT911, I²C SDA=GPIO7 / SCL=GPIO8 | **GT9271** (I²C-Adresse **0x14**), SDA=GPIO7 / SCL=GPIO8 | | Touch-Rohkoordinaten | 480×800 (= Panelraster) | **800×480** → wird auf 1024×600 skaliert | **720×1280** (Hochformat) → X/Y werden getauscht | | LCD-Reset | GPIO5 | **GPIO27** | kein Reset-Pin (macht die Bridge) | | Backlight | GPIO23 (LEDC-PWM) | GPIO23 (LEDC-PWM) | **Bridge-Register** auf I²C **0x45** (`AD`/`AB`/`AA`) | | Framebuffer (3×) | 3 × 750 KB ≈ 2,3 MB PSRAM | 3 × 1,2 MB ≈ 3,6 MB PSRAM | 3 × 2,8 MB ≈ **8,3 MB** PSRAM | | Freie Expansion-IO | Stiftleiste **JP1**: GPIO 52/51/50/49/35/34/33/32/31/30/29/28 | FPC 1,0 mm 16-pol. **FPC4**: GPIO 34/33/32/31/30/29/28 · **FPC3**: 48/47/46/45/5/4/3/2 | 40-poliger Header im Raspberry-Pi-Pico-Format; belegt sind I²C (7/8), TF-Karte (9/10/11/12/13/53) und Debug-UART0 (37/38) | -| UART zur Hauptplatine | TX GPIO33 / RX GPIO31 | TX GPIO33 / RX GPIO31 | **TX GPIO17 / RX GPIO18** | +| UART zur Hauptplatine | TX GPIO33 / RX GPIO31 | TX GPIO33 / RX GPIO31 | **TX GPIO20 / RX GPIO21** | ### Waveshare 7" (H) — Besonderheiten des Bringups @@ -68,9 +68,12 @@ Das Panel hängt hinter einer Waveshare-Bridge und braucht **keinen** Hersteller `Display On` → DPI-Start → **erst dann** Hintergrundbeleuchtung. Wird das Licht früher eingeschaltet, blitzt beim Start Bildrauschen auf. - **Einbaulage:** `WS7_ROTATE_180` in [`pins_config.h`](pins_config.h) dreht Bild **und** - Touch um 180°, wenn das Panel auf dem Kopf montiert ist (Vorgabe: gedreht). Die Drehung - macht der PPA-Grafikbeschleuniger; die Software-Rotation des LVGL-Ports beherrscht nur - RGB565 und käme für dieses Panel nicht in Frage. + 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 + PPA-Grafikbeschleuniger; die Software-Rotation des LVGL-Ports beherrscht nur RGB565. +- **Touch-Spiegelung:** Der Digitizer sitzt gegenüber dem Bild um die Hochachse gedreht. + `WS7_TOUCH_MIRROR_RAW_X` steht deshalb auf **1** (dreht oben/unten), unabhängig von der + Bilddrehung. > Beim 7-Zöller ist die Expansion-IO **kein Stiftleisten-Header**, sondern eine > FPC-Buchse (1,0 mm Raster, 16-polig) — für die UART-Verdrahtung wird ein @@ -90,8 +93,8 @@ Für **beide JC-Panels** dieselben P4-Pins (4,3": Header JP1, Schaltplan **Waveshare ESP32-P4-Pico** (40-poliger Header): ``` - S3 GPIO43 (TX) ----> P4 GPIO18 (RX) (DISPLAY_UART_RX_PIN) - S3 GPIO44 (RX) <---- P4 GPIO17 (TX) (DISPLAY_UART_TX_PIN) + S3 GPIO43 (TX) ----> P4 GPIO21 (RX) (DISPLAY_UART_RX_PIN) + S3 GPIO44 (RX) <---- P4 GPIO20 (TX) (DISPLAY_UART_TX_PIN) S3 GND ------ P4 GND ``` > Die rechte JP1-Spalte (`C6_U01TXD`/`C6_I10RXD`/…) gehört zum **ESP32-C6** — nicht diff --git a/P4_Display_Firmware/config.h b/P4_Display_Firmware/config.h index fb7396d..5028666 100644 --- a/P4_Display_Firmware/config.h +++ b/P4_Display_Firmware/config.h @@ -109,15 +109,15 @@ // // Waveshare ESP32-P4-Pico (WS_PANEL_7H): 40-poliger Header im Raspberry-Pi-Pico-Format. // Belegt sind dort u.a. I2C (7/8), TF-Karte (9/10/11/12/13/53) und der Debug-UART0 -// (37/38); diese Pins duerfen NICHT genommen werden. Genutzt werden GPIO17/GPIO18: -// GPIO17 (P4 TX) ----> S3 GPIO44 (RX) -// GPIO18 (P4 RX) <---- S3 GPIO43 (TX) +// (37/38); diese Pins duerfen NICHT genommen werden. Genutzt werden GPIO20/GPIO21: +// GPIO20 (P4 TX) ----> S3 GPIO44 (RX) +// GPIO21 (P4 RX) <---- S3 GPIO43 (TX) // GND ---- S3 GND #define DISPLAY_UART_PORT Serial1 #define DISPLAY_UART_BAUDRATE 230400 #if JC_PANEL_TYPE == WS_PANEL_7H -#define DISPLAY_UART_TX_PIN 17 -#define DISPLAY_UART_RX_PIN 18 +#define DISPLAY_UART_TX_PIN 20 +#define DISPLAY_UART_RX_PIN 21 #else #define DISPLAY_UART_TX_PIN 33 #define DISPLAY_UART_RX_PIN 31 @@ -126,7 +126,7 @@ // ------------------------------------------------------------------------------------- // Firmware // ------------------------------------------------------------------------------------- -#define DISPLAY_FW_VERSION "1.6.2" // Firmware-Stand der P4-Display-Steuerung (Info-Seite) +#define DISPLAY_FW_VERSION "1.6.3" // Firmware-Stand der P4-Display-Steuerung (Info-Seite) // ------------------------------------------------------------------------------------- // Protokoll diff --git a/P4_Display_Firmware/pins_config.h b/P4_Display_Firmware/pins_config.h index 81fa2a9..54a924d 100644 --- a/P4_Display_Firmware/pins_config.h +++ b/P4_Display_Firmware/pins_config.h @@ -4,10 +4,11 @@ // ------------------------------------------------------------------------------------- // Waveshare 7" (H): Einbaulage. Haengt das Panel auf dem Kopf (Flachbandkabel oben statt -// unten), dreht 1 das Bild UND den Touch um 180 Grad. Auf 0 setzen, wenn das Panel -// andersherum eingebaut wird. +// unten), dreht 1 das Bild UND den Touch um 180 Grad. In der aktuellen Einbaulage steht +// das Bild richtig herum -> 0. Der Touch braucht davon unabhaengig eine Spiegelung, +// siehe WS7_TOUCH_MIRROR_RAW_X weiter unten. // ------------------------------------------------------------------------------------- -#define WS7_ROTATE_180 1 +#define WS7_ROTATE_180 0 #define EXAMPLE_LVGL_PORT_TASK_MAX_DELAY_MS 500 //range 2 to 2000 #define EXAMPLE_LVGL_PORT_TASK_MIN_DELAY_MS 5 //range 1 to 100 @@ -83,11 +84,15 @@ #define WS7_MADCTL 0x00 // Der GT9271 meldet im Hochformat: Roh-X 0..720, Roh-Y 0..1280. Fuer das Querformat -// werden die Achsen getauscht. Zeigt der Cursor spiegelverkehrt, hier die passende -// Achse auf 1 setzen (die Spiegelung geschieht VOR dem Tausch, auf den Rohwerten). +// werden die Achsen getauscht. Die Spiegelung geschieht VOR dem Tausch, also noch auf den +// Rohwerten: Roh-X wird zur Bildschirmhoehe, Roh-Y zur Bildschirmbreite. +// WS7_TOUCH_MIRROR_RAW_X = 1 -> dreht OBEN/UNTEN um +// WS7_TOUCH_MIRROR_RAW_Y = 1 -> dreht LINKS/RECHTS um +// Der Digitizer dieses Panels sitzt gegenueber dem Bild um die Hochachse gedreht, deshalb +// ist oben/unten dauerhaft aktiv. #define WS7_TOUCH_RAW_X_MAX 720 #define WS7_TOUCH_RAW_Y_MAX 1280 -#define WS7_TOUCH_MIRROR_RAW_X 0 +#define WS7_TOUCH_MIRROR_RAW_X 1 #define WS7_TOUCH_MIRROR_RAW_Y 0 #elif JC_PANEL_TYPE == JC_PANEL_70 -- 2.54.0