From 71a2a958858f47545bb9f02764af26fb68991b36 Mon Sep 17 00:00:00 2001
From: Tanguy Pruvot <tpruvot@users.noreply.github.com>
Date: Thu, 2 Sep 2021 01:55:36 +0200
Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A8=20Enhance=20Lerdge=20pins,=20TFTs,?=
 =?UTF-8?q?=20and=20variants=20(#22658)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Marlin/Configuration.h                        |  1 +
 Marlin/src/inc/Conditionals_LCD.h             | 36 ++-------
 Marlin/src/lcd/tft_io/st7796s.h               | 38 ++--------
 Marlin/src/lcd/tft_io/tft_ids.h               |  1 -
 Marlin/src/lcd/tft_io/tft_io.cpp              |  4 -
 Marlin/src/pins/linux/pins_RAMPS_LINUX.h      |  4 +-
 Marlin/src/pins/stm32f4/pins_LERDGE_K.h       | 74 +++++++++++--------
 Marlin/src/pins/stm32f4/pins_LERDGE_S.h       | 73 ++++++++++--------
 Marlin/src/pins/stm32f4/pins_LERDGE_X.h       | 68 ++++++++++-------
 buildroot/share/PlatformIO/scripts/lerdge.py  |  5 +-
 .../PlatformIO/scripts/offset_and_rename.py   |  3 +-
 .../MARLIN_BIGTREE_BTT002/hal_conf_extra.h    |  2 +-
 .../MARLIN_BIGTREE_E3_RRF/hal_conf_extra.h    |  2 +-
 .../MARLIN_BIGTREE_GTR_V1/hal_conf_extra.h    |  2 +-
 .../PeripheralPins.c                          |  2 -
 .../hal_conf_extra.h                          |  2 +-
 .../hal_conf_extra.h                          |  2 +-
 .../MARLIN_BTT_SKR_SE_BX/hal_conf_extra.h     |  2 +-
 .../MARLIN_F103VE_LONGER/hal_conf_custom.h    | 23 ++----
 .../variants/MARLIN_F103Zx/hal_conf_custom.h  |  2 +-
 .../variants/MARLIN_F407VE/hal_conf_custom.h  |  2 +-
 .../variants/MARLIN_F4x7Vx/hal_conf_extra.h   |  2 +-
 .../hal_conf_custom.h                         |  2 +-
 .../variants/MARLIN_LERDGE/PeripheralPins.c   | 18 +++++
 .../variants/MARLIN_LERDGE/variant.h          | 49 ++++++------
 .../MARLIN_STEVAL_F401VE/hal_conf_custom.h    |  2 +-
 .../hal_conf_extra.h                          | 25 ++++---
 ini/stm32f4.ini                               |  9 +--
 28 files changed, 233 insertions(+), 222 deletions(-)

diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h
index c9a900062cb..418c25aef75 100644
--- a/Marlin/Configuration.h
+++ b/Marlin/Configuration.h
@@ -2710,6 +2710,7 @@
   //#define TFT_RES_320x240
   //#define TFT_RES_480x272
   //#define TFT_RES_480x320
+  //#define TFT_RES_1024x600
 #endif
 
 /**
diff --git a/Marlin/src/inc/Conditionals_LCD.h b/Marlin/src/inc/Conditionals_LCD.h
index bfbe5ba6cf1..13af3c25f5f 100644
--- a/Marlin/src/inc/Conditionals_LCD.h
+++ b/Marlin/src/inc/Conditionals_LCD.h
@@ -1219,30 +1219,19 @@
  */
 #if ENABLED(MKS_TS35_V2_0)          // ST7796
   #define TFT_DEFAULT_DRIVER ST7796
-  #define TFT_DEFAULT_ORIENTATION (TFT_EXCHANGE_XY)
+  #define TFT_DEFAULT_ORIENTATION TFT_EXCHANGE_XY
   #define TFT_RES_480x320
   #define TFT_INTERFACE_SPI
-#elif ENABLED(ANET_ET5_TFT35)       // ST7796
-  #define TFT_DEFAULT_ORIENTATION (TFT_EXCHANGE_XY)
+#elif EITHER(LERDGE_TFT35, ANET_ET5_TFT35) // ST7796
+  #define TFT_DEFAULT_ORIENTATION TFT_EXCHANGE_XY
   #define TFT_RES_480x320
   #define TFT_INTERFACE_FSMC
-#elif ENABLED(ANET_ET4_TFT28)       // ST7789
+#elif ANY(ANET_ET4_TFT28, MKS_ROBIN_TFT24, MKS_ROBIN_TFT28, MKS_ROBIN_TFT32) // ST7789
   #define TFT_DEFAULT_ORIENTATION (TFT_EXCHANGE_XY | TFT_INVERT_Y)
   #define TFT_RES_320x240
   #define TFT_INTERFACE_FSMC
-#elif ENABLED(MKS_ROBIN_TFT24)      // ST7789
-  #define TFT_DEFAULT_ORIENTATION (TFT_EXCHANGE_XY | TFT_INVERT_Y)
-  #define TFT_RES_320x240
-  #define TFT_INTERFACE_FSMC
-#elif ENABLED(MKS_ROBIN_TFT28)      // ST7789
-  #define TFT_DEFAULT_ORIENTATION (TFT_EXCHANGE_XY | TFT_INVERT_Y)
-  #define TFT_RES_320x240
-  #define TFT_INTERFACE_FSMC
-#elif ENABLED(MKS_ROBIN_TFT32)      // ST7789
-  #define TFT_DEFAULT_ORIENTATION (TFT_EXCHANGE_XY | TFT_INVERT_Y)
-  #define TFT_RES_320x240
-  #define TFT_INTERFACE_FSMC
-#elif ENABLED(MKS_ROBIN_TFT35)      // ILI9488
+#elif ANY(MKS_ROBIN_TFT35, TFT_TRONXY_X5SA, ANYCUBIC_TFT35) // ILI9488
+  #define TFT_DRIVER ILI9488
   #define TFT_DEFAULT_ORIENTATION (TFT_EXCHANGE_XY | TFT_INVERT_X | TFT_INVERT_Y)
   #define TFT_RES_480x320
   #define TFT_INTERFACE_FSMC
@@ -1251,21 +1240,12 @@
   #define TFT_DEFAULT_ORIENTATION 0
   #define TFT_RES_480x272
   #define TFT_INTERFACE_FSMC
-#elif ENABLED(MKS_ROBIN_TFT_V1_1R)  // ILI9328 or R61505
-  #define TFT_DEFAULT_ORIENTATION (TFT_EXCHANGE_XY | TFT_INVERT_X | TFT_INVERT_Y)
-  #define TFT_RES_320x240
-  #define TFT_INTERFACE_FSMC
-#elif EITHER(TFT_TRONXY_X5SA, ANYCUBIC_TFT35) // ILI9488
-  #define TFT_DRIVER ILI9488
-  #define TFT_DEFAULT_ORIENTATION (TFT_EXCHANGE_XY | TFT_INVERT_X | TFT_INVERT_Y)
-  #define TFT_RES_480x320
-  #define TFT_INTERFACE_FSMC
-#elif ENABLED(LONGER_LK_TFT28)
+#elif ANY(MKS_ROBIN_TFT_V1_1R, LONGER_LK_TFT28)  // ILI9328 or R61505
   #define TFT_DEFAULT_ORIENTATION (TFT_EXCHANGE_XY | TFT_INVERT_X | TFT_INVERT_Y)
   #define TFT_RES_320x240
   #define TFT_INTERFACE_FSMC
 #elif ENABLED(BIQU_BX_TFT70)        // RGB
-  #define TFT_DEFAULT_ORIENTATION (TFT_EXCHANGE_XY)
+  #define TFT_DEFAULT_ORIENTATION TFT_EXCHANGE_XY
   #define TFT_RES_1024x600
   #define TFT_INTERFACE_LTDC
   #if ENABLED(TOUCH_SCREEN)
diff --git a/Marlin/src/lcd/tft_io/st7796s.h b/Marlin/src/lcd/tft_io/st7796s.h
index e1931ed5514..6d79dd882ac 100644
--- a/Marlin/src/lcd/tft_io/st7796s.h
+++ b/Marlin/src/lcd/tft_io/st7796s.h
@@ -144,39 +144,11 @@ static const uint16_t st7796s_init[] = {
   ESC_REG(ST7796S_PGC), 0x00F0, 0x0004, 0x0008, 0x0009, 0x0008, 0x0015, 0x002F, 0x0042, 0x0046, 0x0028, 0x0015, 0x0016, 0x0029, 0x002D,
   ESC_REG(ST7796S_NGC), 0x00F0, 0x0004, 0x0009, 0x0009, 0x0008, 0x0015, 0x002E, 0x0046, 0x0046, 0x0028, 0x0015, 0x0015, 0x0029, 0x002D,
 
-  ESC_REG(ST7796S_NORON),
-  ESC_REG(ST7796S_WRCTRLD), 0x0024,
-  ESC_REG(ST7796S_CSCON), 0x003C,  // disable command 2 part I
-  ESC_REG(ST7796S_CSCON), 0x0069,  // disable command 2 part II
-  ESC_REG(ST7796S_DISPON),
-  ESC_END
-};
-
-static const uint16_t lerdge_st7796s_init[] = {
-  DATASIZE_8BIT,
-  ESC_REG(ST7796S_SWRESET), ESC_DELAY(100),
-  ESC_REG(ST7796S_SLPOUT), ESC_DELAY(20),
-
-  ESC_REG(ST7796S_CSCON), 0x00C3,  // enable command 2 part I
-  ESC_REG(ST7796S_CSCON), 0x0096,  // enable command 2 part II
-
-  ESC_REG(ST7796S_MADCTL), ST7796S_MADCTL_DATA,
-  ESC_REG(ST7796S_COLMOD), 0x0055,
-
-  ESC_REG(ST7796S_DIC), 0x0001,  // 1-dot inversion
-  ESC_REG(ST7796S_EM), 0x00C6,
-
-  ESC_REG(ST7796S_PWR2), 0x0015,
-  ESC_REG(ST7796S_PWR3), 0x00AF,
-  ESC_REG(ST7796S_VCMPCTL), 0x0022,
-  ESC_REG(ST7796S_VCMOST), 0x0000,
-  ESC_REG(ST7796S_DOCA), 0x0040, 0x008A, 0x0000, 0x0000, 0x0029, 0x0019, 0x00A5, 0x0033,
-
-  /* Gamma Correction. */
-  ESC_REG(ST7796S_PGC), 0x00F0, 0x0004, 0x0008, 0x0009, 0x0008, 0x0015, 0x002F, 0x0042, 0x0046, 0x0028, 0x0015, 0x0016, 0x0029, 0x002D,
-  ESC_REG(ST7796S_NGC), 0x00F0, 0x0004, 0x0009, 0x0009, 0x0008, 0x0015, 0x002E, 0x0046, 0x0046, 0x0028, 0x0015, 0x0015, 0x0029, 0x002D,
-
-  ESC_REG(ST7796S_INVON),      // Display inversion ON
+  #if ENABLED(ST7796S_INVERTED)
+    ESC_REG(ST7796S_INVON),    // Display inversion ON
+  #else
+    ESC_REG(ST7796S_NORON),
+  #endif
   ESC_REG(ST7796S_WRCTRLD), 0x0024,
   ESC_REG(ST7796S_CSCON), 0x003C,  // disable command 2 part I
   ESC_REG(ST7796S_CSCON), 0x0069,  // disable command 2 part II
diff --git a/Marlin/src/lcd/tft_io/tft_ids.h b/Marlin/src/lcd/tft_io/tft_ids.h
index c4f6127c685..2de111366c4 100644
--- a/Marlin/src/lcd/tft_io/tft_ids.h
+++ b/Marlin/src/lcd/tft_io/tft_ids.h
@@ -31,5 +31,4 @@
 #define ILI9341         0x9341
 #define ILI9488         0x9488
 #define ILI9488_ID1     0x8066 // Some ILI9488 have 0x8066 in the 0x04
-#define LERDGE_ST7796   0xFFFE
 #define AUTO            0xFFFF
diff --git a/Marlin/src/lcd/tft_io/tft_io.cpp b/Marlin/src/lcd/tft_io/tft_io.cpp
index ded711b5776..707232b4bb4 100644
--- a/Marlin/src/lcd/tft_io/tft_io.cpp
+++ b/Marlin/src/lcd/tft_io/tft_io.cpp
@@ -97,10 +97,6 @@ if (lcd_id != 0xFFFFFFFF) return;
     write_esc_sequence(ili9341_init);
   #elif TFT_DRIVER == ILI9488
     write_esc_sequence(ili9488_init);
-  #elif TFT_DRIVER == LERDGE_ST7796
-    lcd_id = ST7796;
-    write_esc_sequence(lerdge_st7796s_init);
-
   #elif TFT_DRIVER == AUTO // autodetect
 
     lcd_id = io.GetID() & 0xFFFF;
diff --git a/Marlin/src/pins/linux/pins_RAMPS_LINUX.h b/Marlin/src/pins/linux/pins_RAMPS_LINUX.h
index 1b3cf15e5af..04f9afaad21 100644
--- a/Marlin/src/pins/linux/pins_RAMPS_LINUX.h
+++ b/Marlin/src/pins/linux/pins_RAMPS_LINUX.h
@@ -427,10 +427,10 @@
     #define TFT_DRIVER                    ST7796
   #endif
   #ifndef XPT2046_X_CALIBRATION
-    #define XPT2046_X_CALIBRATION            63934
+    #define XPT2046_X_CALIBRATION          63934
   #endif
   #ifndef XPT2046_Y_CALIBRATION
-    #define XPT2046_Y_CALIBRATION            63598
+    #define XPT2046_Y_CALIBRATION          63598
   #endif
   #ifndef XPT2046_X_OFFSET
     #define XPT2046_X_OFFSET                  -1
diff --git a/Marlin/src/pins/stm32f4/pins_LERDGE_K.h b/Marlin/src/pins/stm32f4/pins_LERDGE_K.h
index 4adc2f65a2f..3cfa3cd3e5c 100644
--- a/Marlin/src/pins/stm32f4/pins_LERDGE_K.h
+++ b/Marlin/src/pins/stm32f4/pins_LERDGE_K.h
@@ -72,42 +72,43 @@
 #define X_DIR_PIN                           PB10
 #define X_ENABLE_PIN                        PG0
 //#ifndef X_CS_PIN
-//  #define X_CS_PIN                        PE0
+//  #define X_CS_PIN                        PB2
 //#endif
 
 #define Y_STEP_PIN                          PF14
 #define Y_DIR_PIN                           PF15
 #define Y_ENABLE_PIN                        PF13
 //#ifndef Y_CS_PIN
-//  #define Y_CS_PIN                        PE1
+//  #define Y_CS_PIN                        PE2
 //#endif
 
 #define Z_STEP_PIN                          PF11
 #define Z_DIR_PIN                           PF12
 #define Z_ENABLE_PIN                        PC5
 //#ifndef Z_CS_PIN
-//  #define Z_CS_PIN                        PE2
+//  #define Z_CS_PIN                        PE3
 //#endif
 
 #define E0_STEP_PIN                         PC14
 #define E0_DIR_PIN                          PC13
 #define E0_ENABLE_PIN                       PC15
 //#ifndef E0_CS_PIN
-//  #define E0_CS_PIN                       PE3
+//  #define E0_CS_PIN                       PE4
 //#endif
 
 #define E1_STEP_PIN                         PF1
 #define E1_DIR_PIN                          PF0
 #define E1_ENABLE_PIN                       PF2
 //#ifndef E1_CS_PIN
-//  #define E1_CS_PIN                       PE4
+//  #define E1_CS_PIN                       PE1
 //#endif
 
-//#define E2_STEP_PIN                       PF4  // best guess
-//#define E2_DIR_PIN                        PF3  // best guess
-//#define E2_ENABLE_PIN                     PF5  // best guess
-//#ifndef E2_CS_PIN
-//  #define E2_CS_PIN                       PB2  // best guess
+//#define Z2_STEP_PIN                       PF4
+//#define Z2_DIR_PIN                        PF3
+//#define Z2_ENABLE_PIN                     PF5
+//#define Z2_STOP_PIN                       PG2
+//#ifndef Z2_CS_PIN
+//  #define Z2_CS_PIN                       PE0
 //#endif
 
 #if HAS_TMC_UART
@@ -144,12 +145,17 @@
   #ifndef E1_SERIAL_RX_PIN
     #define E1_SERIAL_RX_PIN    E1_SERIAL_TX_PIN
   #endif
+  // Ex-motor can be any... X2/Y2/Z2 or E2
   #ifndef EX_SERIAL_TX_PIN
-    #define E2_SERIAL_TX_PIN                PE0
+    #define EX_SERIAL_TX_PIN                PE0
   #endif
   #ifndef EX_SERIAL_RX_PIN
-    #define E2_SERIAL_RX_PIN    E2_SERIAL_TX_PIN
+    #define EX_SERIAL_RX_PIN    EX_SERIAL_TX_PIN
   #endif
+  //#define Z2_SERIAL_RX_PIN EX_SERIAL_RX_PIN
+  //#define Z2_SERIAL_TX_PIN EX_SERIAL_TX_PIN
+  //#define E2_SERIAL_RX_PIN EX_SERIAL_RX_PIN
+  //#define E2_SERIAL_TX_PIN EX_SERIAL_TX_PIN
   // Reduce baud rate to improve software serial reliability
   #define TMC_BAUD_RATE                    19200
 #endif
@@ -193,8 +199,8 @@
 //
 // LED / Lighting
 //
-//#define CASE_LIGHT_PIN_CI                 -1
-//#define CASE_LIGHT_PIN_DO                 -1
+#define LED_PIN                             PA15  // Status LED
+//#define CASE_LIGHT_PIN                    PB6   // LED Ribbon Connector (PWM TIM4_CH1)
 //#define NEOPIXEL_PIN                      -1
 #ifndef RGB_LED_R_PIN
   #define RGB_LED_R_PIN                     PB8   // swap R and G pin for compatibility with real wires
@@ -211,44 +217,54 @@
 //
 #define SDIO_SUPPORT
 #define SDIO_CLOCK                       4800000
+#define SD_DETECT_PIN                       PA8
+#if DISABLED(SDIO_SUPPORT)
+  #define SOFTWARE_SPI
+  #define SD_SCK_PIN                        PC12
+  #define SD_MISO_PIN                       PC8
+  #define SD_MOSI_PIN                       PD2
+  #define SD_SS_PIN                         PC11
+  #define SDSS                              PC11
+#endif
 
 //
 // Misc. Functions
 //
-#define SDSS                                PC11
-#define LED_PIN                             PA15  // Alive
 #define PS_ON_PIN                           PA4
 #define KILL_PIN                            -1
 #define POWER_LOSS_PIN                      PA4   // Power-loss / nAC_FAULT
 
-#define SD_SCK_PIN                          PC12
-#define SD_MISO_PIN                         PC8
-#define SD_MOSI_PIN                         PD2
-#define SD_SS_PIN                           PC11
-
-#define SD_DETECT_PIN                       PA8
-#define BEEPER_PIN                          PC7
-
 //
 // TFT with FSMC interface
 //
 #if HAS_FSMC_TFT
-  //#define TFT_DRIVER             LERDGE_ST7796
+  #ifndef TFT_DRIVER
+    #define TFT_DRIVER                    ST7796
+  #endif
+  #define ST7796S_INVERTED
 
   #define TFT_RESET_PIN                     PD6
   #define TFT_BACKLIGHT_PIN                 PD3
 
-  #define TFT_CS_PIN                        PD7
-  #define TFT_RS_PIN                        PD11
+  #define FSMC_CS_PIN                       PD7
+  #define FSMC_RS_PIN                       PD11
+
+  #define TFT_CS_PIN                 FSMC_CS_PIN
+  #define TFT_RS_PIN                 FSMC_RS_PIN
 
   #define TOUCH_CS_PIN                      PG15
   #define TOUCH_SCK_PIN                     PB3
   #define TOUCH_MOSI_PIN                    PB5
   #define TOUCH_MISO_PIN                    PB4
+  #define TOUCH_INT_PIN                     PG12
 #endif
 
 #if IS_NEWPANEL
-  #define BTN_EN1                           PG10
-  #define BTN_EN2                           PG11
+  #define BEEPER_PIN                        PC7
+  #define BTN_EN1                           PG11
+  #define BTN_EN2                           PG10
   #define BTN_ENC                           PG9
+  #ifndef ENCODER_STEPS_PER_MENU_ITEM
+    #define ENCODER_STEPS_PER_MENU_ITEM 2
+  #endif
 #endif
diff --git a/Marlin/src/pins/stm32f4/pins_LERDGE_S.h b/Marlin/src/pins/stm32f4/pins_LERDGE_S.h
index 4707a16e143..2d5a45eee0a 100644
--- a/Marlin/src/pins/stm32f4/pins_LERDGE_S.h
+++ b/Marlin/src/pins/stm32f4/pins_LERDGE_S.h
@@ -31,8 +31,6 @@
 #define STEP_TIMER                             4
 #define TEMP_TIMER                             2
 
-//#define I2C_EEPROM
-
 // USB Flash Drive support
 #define HAS_OTG_USB_HOST_SUPPORT
 
@@ -150,7 +148,6 @@
 //
 // Misc. Functions
 //
-#define SDSS                                PC11  // SD is working using SDIO, not sure if this definition is needed?
 #define LED_PIN                             PC6   // Mainboard soldered green LED
 #define PS_ON_PIN                           PB2   // Board has a power module connector
 #define KILL_PIN                            -1    // There is no reset button on the LCD
@@ -161,23 +158,25 @@
 //
 #define SDIO_SUPPORT
 #define SDIO_CLOCK                       4800000
-
-#define SD_SCK_PIN                          PC12
-#define SD_MISO_PIN                         PC8
-#define SD_MOSI_PIN                         PD2
-#define SD_SS_PIN                           PC11
-
 #define SD_DETECT_PIN                       PG15
+#if DISABLED(SDIO_SUPPORT)
+  #define SOFTWARE_SPI
+  #define SD_SCK_PIN                        PC12
+  #define SD_MISO_PIN                       PC8
+  #define SD_MOSI_PIN                       PD2
+  #define SD_SS_PIN                         PC11
+  #define SDSS                              PC11
+#endif
 
 //
 // Persistent Storage
 // If no option is selected below the SD Card will be used
-// (this section modelled after pins_LONGER3D_LK.h)
-// Warning: Not tested yet! Pins traced with multimeter, mistakes are possible
-//#define SPI_EEPROM
+// Prefer the I2C option (F-RAM) to store Marlin settings, SPI option is not working yet
 
-#if ENABLED(SPI_EEPROM)
-  // Lerdge has an SPI EEPROM Winbond W25Q128 (128Mbits) https://www.pjrc.com/teensy/W25Q128FV.pdf
+//#define SPI_EEPROM
+//#define I2C_EEPROM
+
+#if ENABLED(SPI_EEPROM)                           // SPI EEPROM Winbond W25Q128 (128Mbits) https://www.pjrc.com/teensy/W25Q128FV.pdf
   #define SPI_CHAN_EEPROM1                     1
   #define SPI_EEPROM1_CS_PIN                PB12  // datasheet: /CS pin, found with multimeter, not tested
   #define EEPROM_SCK_PIN                    PB13  // datasheet: CLK pin, found with multimeter, not tested
@@ -185,29 +184,45 @@
   #define EEPROM_MOSI_PIN                   PB15  // datasheet: DI pin, found with multimeter, not tested
   #define EEPROM_PAGE_SIZE               0x1000U  // 4KB (from datasheet)
   #define MARLIN_EEPROM_SIZE 16UL * (EEPROM_PAGE_SIZE)   // Limit to 64KB for now...
+#elif ENABLED(I2C_EEPROM)                         // FM24CL64BG (CYP1813) 64Kbit F-RAM
+  #define SOFT_I2C_EEPROM                         // Force the use of Software I2C
+  #define I2C_SDA_PIN                       PG13
+  #define I2C_SCL_PIN                       PG14  // To be confirmed on the Lerdge S, but probably same as the K
+  #define MARLIN_EEPROM_SIZE             0x10000
 #else
   #define MARLIN_EEPROM_SIZE              0x800U  // On SD, Limit to 2KB, require this amount of RAM
 #endif
 
 //
-// LCD / Controller
+// TFT with FSMC interface
 //
+#if HAS_FSMC_TFT
+  #ifndef TFT_DRIVER
+    #define TFT_DRIVER                    ST7796
+  #endif
+  #define ST7796S_INVERTED
 
-// The LCD is initialized in FSMC mode
-#define BEEPER_PIN                          PD13
+  #define TFT_RESET_PIN                     PD6
+  #define TFT_BACKLIGHT_PIN                 PD3
 
-#define BTN_EN1                             PC14
-#define BTN_EN2                             PC15
-#define BTN_ENC                             PC13
+  #define FSMC_CS_PIN                       PD7
+  #define FSMC_RS_PIN                       PD11
 
-#define TFT_RESET_PIN                       PD6
-#define TFT_BACKLIGHT_PIN                   PD3
+  #define TFT_CS_PIN                 FSMC_CS_PIN
+  #define TFT_RS_PIN                 FSMC_RS_PIN
 
-#define TFT_CS_PIN                          PD7   // TFT works
-#define TFT_RS_PIN                          PD11  // TFT works
+  #define TOUCH_CS_PIN                      PB6
+  #define TOUCH_SCK_PIN                     PB3
+  #define TOUCH_MOSI_PIN                    PB5
+  #define TOUCH_MISO_PIN                    PB4
+#endif
 
-// There is touch, but calibration is off
-#define TOUCH_CS_PIN                        PB6
-#define TOUCH_SCK_PIN                       PB3
-#define TOUCH_MOSI_PIN                      PB5
-#define TOUCH_MISO_PIN                      PB4
+#if IS_NEWPANEL
+  #define BEEPER_PIN                        PD13
+  #define BTN_EN1                           PC15
+  #define BTN_EN2                           PC14
+  #define BTN_ENC                           PC13
+  #ifndef ENCODER_STEPS_PER_MENU_ITEM
+    #define ENCODER_STEPS_PER_MENU_ITEM 2
+  #endif
+#endif
diff --git a/Marlin/src/pins/stm32f4/pins_LERDGE_X.h b/Marlin/src/pins/stm32f4/pins_LERDGE_X.h
index 3a9c286e001..f65476c0b70 100644
--- a/Marlin/src/pins/stm32f4/pins_LERDGE_X.h
+++ b/Marlin/src/pins/stm32f4/pins_LERDGE_X.h
@@ -113,10 +113,24 @@
 //#define CASE_LIGHT_PIN_DO                 -1
 //#define NEOPIXEL_PIN                      -1
 
+//
+// SD support (On board)
+//
+#define SDIO_SUPPORT
+#define SD_DETECT_PIN                       PA8
+#define SDIO_CLOCK                       4800000
+#if DISABLED(SDIO_SUPPORT)
+  #define SOFTWARE_SPI
+  #define SD_SCK_PIN                        PC12
+  #define SD_MISO_PIN                       PC8
+  #define SD_MOSI_PIN                       PD2
+  #define SD_SS_PIN                         PC11
+  #define SDSS                              PC11
+#endif
+
 //
 // Misc. Functions
 //
-#define SDSS                                PC11
 #define LED_PIN                             PC7   // Alive
 #define PS_ON_PIN                           -1
 #define KILL_PIN                            -1
@@ -124,36 +138,36 @@
 // Lerdge supports auto-power off and power loss sense through a single pin.
 #define POWER_LOSS_PIN                      PC14  // Power-loss / nAC_FAULT
 
-#define SD_SCK_PIN                          PC12
-#define SD_MISO_PIN                         PC8
-#define SD_MOSI_PIN                         PD2
-#define SD_SS_PIN                           PC11
-
 //
-// SD support
+// TFT with FSMC interface
 //
-#define SDIO_SUPPORT
-#define SD_DETECT_PIN                       PA8
-#define SDIO_CLOCK                       4800000
+#if HAS_FSMC_TFT
+  #ifndef TFT_DRIVER
+    #define TFT_DRIVER                    ST7796
+  #endif
+  #define ST7796S_INVERTED
 
-//
-// LCD / Controller
-//
+  #define FSMC_CS_PIN                       PD7
+  #define FSMC_RS_PIN                       PD11
 
-// The LCD is initialized in FSMC mode
-#define BEEPER_PIN                          PD12
+  #define TFT_RESET_PIN                     PD6
+  #define TFT_BACKLIGHT_PIN                 PD3
 
-#define BTN_EN1                             PE3
-#define BTN_EN2                             PE4
-#define BTN_ENC                             PE2
+  #define TFT_CS_PIN                 FSMC_CS_PIN
+  #define TFT_RS_PIN                 FSMC_RS_PIN
 
-#define TFT_RESET_PIN                       PD6
-#define TFT_BACKLIGHT_PIN                   PD3
+  #define TOUCH_CS_PIN                      PB6
+  #define TOUCH_SCK_PIN                     PB3
+  #define TOUCH_MOSI_PIN                    PB5
+  #define TOUCH_MISO_PIN                    PB4
+#endif
 
-#define TFT_CS_PIN                          PD7
-#define TFT_RS_PIN                          PD11
-
-#define TOUCH_CS_PIN                        PB6
-#define TOUCH_SCK_PIN                       PB3
-#define TOUCH_MOSI_PIN                      PB5
-#define TOUCH_MISO_PIN                      PB4
+#if IS_NEWPANEL
+  #define BEEPER_PIN                        PD12
+  #define BTN_EN1                           PE4
+  #define BTN_EN2                           PE3
+  #define BTN_ENC                           PE2
+  #ifndef ENCODER_STEPS_PER_MENU_ITEM
+    #define ENCODER_STEPS_PER_MENU_ITEM 2
+  #endif
+#endif
diff --git a/buildroot/share/PlatformIO/scripts/lerdge.py b/buildroot/share/PlatformIO/scripts/lerdge.py
index 5c35c19e7df..654f0ad4df9 100644
--- a/buildroot/share/PlatformIO/scripts/lerdge.py
+++ b/buildroot/share/PlatformIO/scripts/lerdge.py
@@ -41,7 +41,8 @@ def encrypt(source, target, env):
     renamed.close()
 
 if 'encrypt' in board.get("build").keys():
-    marlin.add_post_action(encrypt);
+    if board.get("build.encrypt") != "":
+        marlin.add_post_action(encrypt)
 else:
     print("LERDGE builds require output file via board_build.encrypt = 'filename' parameter")
-    exit(1);
+    exit(1)
diff --git a/buildroot/share/PlatformIO/scripts/offset_and_rename.py b/buildroot/share/PlatformIO/scripts/offset_and_rename.py
index b42b2f35317..9caed298e43 100644
--- a/buildroot/share/PlatformIO/scripts/offset_and_rename.py
+++ b/buildroot/share/PlatformIO/scripts/offset_and_rename.py
@@ -45,7 +45,8 @@ if 'encrypt' in board_keys:
 	def encrypt(source, target, env):
 		marlin.encrypt_mks(source, target, env, board.get("build.encrypt"))
 
-	marlin.add_post_action(encrypt);
+	if board.get("build.encrypt") != "":
+		marlin.add_post_action(encrypt)
 
 #
 # For build.rename simply rename the firmware file.
diff --git a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_BTT002/hal_conf_extra.h b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_BTT002/hal_conf_extra.h
index 40b340c2056..ef621d57bf2 100644
--- a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_BTT002/hal_conf_extra.h
+++ b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_BTT002/hal_conf_extra.h
@@ -4,6 +4,7 @@
 #define HAL_ADC_MODULE_ENABLED
 #define HAL_CRC_MODULE_ENABLED
 #define HAL_DMA_MODULE_ENABLED
+#define HAL_EXTI_MODULE_ENABLED   // Needed for Endstop (and other external) Interrupts
 #define HAL_GPIO_MODULE_ENABLED
 #define HAL_I2C_MODULE_ENABLED
 #define HAL_PWR_MODULE_ENABLED
@@ -32,7 +33,6 @@
 //#define HAL_SRAM_MODULE_ENABLED
 //#define HAL_SDRAM_MODULE_ENABLED
 //#define HAL_HASH_MODULE_ENABLED
-//#define HAL_EXTI_MODULE_ENABLED
 //#define HAL_SMBUS_MODULE_ENABLED
 //#define HAL_I2S_MODULE_ENABLED
 //#define HAL_IWDG_MODULE_ENABLED
diff --git a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_E3_RRF/hal_conf_extra.h b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_E3_RRF/hal_conf_extra.h
index 2c1557cbbbc..b4eb0f9b5f7 100644
--- a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_E3_RRF/hal_conf_extra.h
+++ b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_E3_RRF/hal_conf_extra.h
@@ -4,6 +4,7 @@
 #define HAL_ADC_MODULE_ENABLED
 #define HAL_CRC_MODULE_ENABLED
 #define HAL_DMA_MODULE_ENABLED
+#define HAL_EXTI_MODULE_ENABLED   // Needed for Endstop (and other external) Interrupts
 #define HAL_GPIO_MODULE_ENABLED
 #define HAL_I2C_MODULE_ENABLED
 #define HAL_PWR_MODULE_ENABLED
@@ -32,7 +33,6 @@
 #undef HAL_SRAM_MODULE_ENABLED
 #undef HAL_SDRAM_MODULE_ENABLED
 #undef HAL_HASH_MODULE_ENABLED
-#undef HAL_EXTI_MODULE_ENABLED
 #undef HAL_SMBUS_MODULE_ENABLED
 #undef HAL_I2S_MODULE_ENABLED
 #undef HAL_IWDG_MODULE_ENABLED
diff --git a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_GTR_V1/hal_conf_extra.h b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_GTR_V1/hal_conf_extra.h
index 40b340c2056..ef621d57bf2 100644
--- a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_GTR_V1/hal_conf_extra.h
+++ b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_GTR_V1/hal_conf_extra.h
@@ -4,6 +4,7 @@
 #define HAL_ADC_MODULE_ENABLED
 #define HAL_CRC_MODULE_ENABLED
 #define HAL_DMA_MODULE_ENABLED
+#define HAL_EXTI_MODULE_ENABLED   // Needed for Endstop (and other external) Interrupts
 #define HAL_GPIO_MODULE_ENABLED
 #define HAL_I2C_MODULE_ENABLED
 #define HAL_PWR_MODULE_ENABLED
@@ -32,7 +33,6 @@
 //#define HAL_SRAM_MODULE_ENABLED
 //#define HAL_SDRAM_MODULE_ENABLED
 //#define HAL_HASH_MODULE_ENABLED
-//#define HAL_EXTI_MODULE_ENABLED
 //#define HAL_SMBUS_MODULE_ENABLED
 //#define HAL_I2S_MODULE_ENABLED
 //#define HAL_IWDG_MODULE_ENABLED
diff --git a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_V1/PeripheralPins.c b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_V1/PeripheralPins.c
index a4f8f696ee8..9df61baf9b1 100644
--- a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_V1/PeripheralPins.c
+++ b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_V1/PeripheralPins.c
@@ -392,9 +392,7 @@ const PinMap PinMap_USB_OTG_FS[] = {
   {PA_12, USB_OTG_FS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_FS)}, // USB_OTG_FS_DP
   {NC,    NP,    0}
 };
-#endif
 
-#ifdef HAL_PCD_MODULE_ENABLED
 const PinMap PinMap_USB_OTG_HS[] = {
     //{PB_12, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_PULLUP, GPIO_AF12_OTG_HS_FS)}, // USB_OTG_HS_ID
     //{PB_13, USB_OTG_HS, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, GPIO_AF_NONE)}, // USB_OTG_HS_VBUS
diff --git a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_V1/hal_conf_extra.h b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_V1/hal_conf_extra.h
index 42c76a4bbff..d62c510095c 100644
--- a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_V1/hal_conf_extra.h
+++ b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_V1/hal_conf_extra.h
@@ -4,6 +4,7 @@
 #define HAL_ADC_MODULE_ENABLED
 #define HAL_CRC_MODULE_ENABLED
 #define HAL_DMA_MODULE_ENABLED
+#define HAL_EXTI_MODULE_ENABLED   // Needed for Endstop (and other external) Interrupts
 #define HAL_GPIO_MODULE_ENABLED
 #define HAL_I2C_MODULE_ENABLED
 #define HAL_PWR_MODULE_ENABLED
@@ -33,7 +34,6 @@
 #undef HAL_SRAM_MODULE_ENABLED
 #undef HAL_SDRAM_MODULE_ENABLED
 #undef HAL_HASH_MODULE_ENABLED
-#undef HAL_EXTI_MODULE_ENABLED
 #undef HAL_SMBUS_MODULE_ENABLED
 #undef HAL_I2S_MODULE_ENABLED
 #undef HAL_IWDG_MODULE_ENABLED
diff --git a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_SKR_PRO_11/hal_conf_extra.h b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_SKR_PRO_11/hal_conf_extra.h
index 40b340c2056..ef621d57bf2 100644
--- a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_SKR_PRO_11/hal_conf_extra.h
+++ b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_SKR_PRO_11/hal_conf_extra.h
@@ -4,6 +4,7 @@
 #define HAL_ADC_MODULE_ENABLED
 #define HAL_CRC_MODULE_ENABLED
 #define HAL_DMA_MODULE_ENABLED
+#define HAL_EXTI_MODULE_ENABLED   // Needed for Endstop (and other external) Interrupts
 #define HAL_GPIO_MODULE_ENABLED
 #define HAL_I2C_MODULE_ENABLED
 #define HAL_PWR_MODULE_ENABLED
@@ -32,7 +33,6 @@
 //#define HAL_SRAM_MODULE_ENABLED
 //#define HAL_SDRAM_MODULE_ENABLED
 //#define HAL_HASH_MODULE_ENABLED
-//#define HAL_EXTI_MODULE_ENABLED
 //#define HAL_SMBUS_MODULE_ENABLED
 //#define HAL_I2S_MODULE_ENABLED
 //#define HAL_IWDG_MODULE_ENABLED
diff --git a/buildroot/share/PlatformIO/variants/MARLIN_BTT_SKR_SE_BX/hal_conf_extra.h b/buildroot/share/PlatformIO/variants/MARLIN_BTT_SKR_SE_BX/hal_conf_extra.h
index 4050fe810f9..99f3a30443b 100644
--- a/buildroot/share/PlatformIO/variants/MARLIN_BTT_SKR_SE_BX/hal_conf_extra.h
+++ b/buildroot/share/PlatformIO/variants/MARLIN_BTT_SKR_SE_BX/hal_conf_extra.h
@@ -51,7 +51,7 @@ extern "C" {
 #define HAL_DMA2D_MODULE_ENABLED
 #define HAL_DSI_MODULE_ENABLED
 #define HAL_ETH_MODULE_ENABLED
-#define HAL_EXTI_MODULE_ENABLED
+#define HAL_EXTI_MODULE_ENABLED   // Needed for Endstop (and other external) Interrupts
 #define HAL_FDCAN_MODULE_ENABLED
 #define HAL_FLASH_MODULE_ENABLED
 #define HAL_GPIO_MODULE_ENABLED
diff --git a/buildroot/share/PlatformIO/variants/MARLIN_F103VE_LONGER/hal_conf_custom.h b/buildroot/share/PlatformIO/variants/MARLIN_F103VE_LONGER/hal_conf_custom.h
index fd20d8fe6f0..3a6b7037adf 100644
--- a/buildroot/share/PlatformIO/variants/MARLIN_F103VE_LONGER/hal_conf_custom.h
+++ b/buildroot/share/PlatformIO/variants/MARLIN_F103VE_LONGER/hal_conf_custom.h
@@ -20,11 +20,6 @@ extern "C" {
   */
 #include "stm32yyxx_hal_conf.h"
 
-#undef HAL_PWR_MODULE_ENABLED
-#define HAL_PWR_MODULE_ONLY   // disable low power & PA0 wakeup pin (its T°c pin)
-
-#define HAL_IWDG_MODULE_ENABLED // USE_WATCHDOG
-
 #ifdef HAL_PCD_MODULE_ENABLED
   #warning "No direct STM32 USB pins on Longer3D board"
   #undef HAL_PCD_MODULE_ENABLED // USB Device
@@ -35,20 +30,20 @@ extern "C" {
   #undef HAL_HCD_MODULE_ENABLED // USB Host
 #endif
 
-#ifndef HAL_USART_MODULE_ENABLED
-  //#define HAL_USART_MODULE_ENABLED // Useless.... UART_MODULE do it
-#endif
+#define HAL_EXTI_MODULE_ENABLED   // Needed for Endstop (and other external) Interrupts
+#define HAL_IWDG_MODULE_ENABLED // USE_WATCHDOG
+
+#undef HAL_PWR_MODULE_ENABLED
+#define HAL_PWR_MODULE_ONLY   // disable low power & PA0 wakeup pin (its T°c pin)
 
 #undef HAL_CAN_LEGACY_MODULE_ENABLED
 #undef HAL_CAN_MODULE_ENABLED
 #undef HAL_DAC_MODULE_ENABLED
 #undef HAL_RTC_MODULE_ENABLED
 
-#define HAL_EXTI_MODULE_ENABLED // for ENDSTOP_INTERRUPTS_FEATURE
-
 /**
-  * @brief List of modules in the framework (first ones enabled by default)
-  */
+ * @brief List of modules in the framework (first ones enabled by default)
+ */
 //#define HAL_MODULE_ENABLED
 //#define HAL_ADC_MODULE_ENABLED
 //#define HAL_CORTEX_MODULE_ENABLED
@@ -66,13 +61,11 @@ extern "C" {
 //#define HAL_SRAM_MODULE_ENABLED
 //#define HAL_TIM_MODULE_ENABLED
 //#define HAL_UART_MODULE_ENABLED
-
 //#define HAL_CAN_MODULE_ENABLED
 //#define HAL_CAN_LEGACY_MODULE_ENABLED
 //#define HAL_CEC_MODULE_ENABLED
 //#define HAL_CRC_MODULE_ENABLED
 //#define HAL_ETH_MODULE_ENABLED
-//#define HAL_EXTI_MODULE_ENABLED
 //#define HAL_HCD_MODULE_ENABLED
 //#define HAL_I2S_MODULE_ENABLED
 //#define HAL_IRDA_MODULE_ENABLED
@@ -81,7 +74,7 @@ extern "C" {
 //#define HAL_NOR_MODULE_ENABLED
 //#define HAL_PCCARD_MODULE_ENABLED
 //#define HAL_SMARTCARD_MODULE_ENABLED
-//#define HAL_USART_MODULE_ENABLED
+//#define HAL_USART_MODULE_ENABLED // Useless.... UART_MODULE does it
 //#define HAL_WWDG_MODULE_ENABLED
 //#define HAL_MMC_MODULE_ENABLED
 
diff --git a/buildroot/share/PlatformIO/variants/MARLIN_F103Zx/hal_conf_custom.h b/buildroot/share/PlatformIO/variants/MARLIN_F103Zx/hal_conf_custom.h
index 7d19d532a59..a41247b9b1f 100644
--- a/buildroot/share/PlatformIO/variants/MARLIN_F103Zx/hal_conf_custom.h
+++ b/buildroot/share/PlatformIO/variants/MARLIN_F103Zx/hal_conf_custom.h
@@ -41,7 +41,7 @@ extern "C" {
 #define HAL_ADC_MODULE_ENABLED
 #define HAL_CRC_MODULE_ENABLED
 #define HAL_DMA_MODULE_ENABLED
-#define HAL_EXTI_MODULE_ENABLED
+#define HAL_EXTI_MODULE_ENABLED   // Needed for Endstop (and other external) Interrupts
 #define HAL_FLASH_MODULE_ENABLED
 #define HAL_GPIO_MODULE_ENABLED
 #define HAL_I2C_MODULE_ENABLED
diff --git a/buildroot/share/PlatformIO/variants/MARLIN_F407VE/hal_conf_custom.h b/buildroot/share/PlatformIO/variants/MARLIN_F407VE/hal_conf_custom.h
index 1252bc70595..58e9646b57f 100644
--- a/buildroot/share/PlatformIO/variants/MARLIN_F407VE/hal_conf_custom.h
+++ b/buildroot/share/PlatformIO/variants/MARLIN_F407VE/hal_conf_custom.h
@@ -36,6 +36,7 @@ extern "C" {
 #define HAL_CRC_MODULE_ENABLED
 #define HAL_DAC_MODULE_ENABLED
 #define HAL_DMA_MODULE_ENABLED
+#define HAL_EXTI_MODULE_ENABLED   // Needed for Endstop (and other external) Interrupts
 #define HAL_FLASH_MODULE_ENABLED
 #define HAL_GPIO_MODULE_ENABLED
 #define HAL_I2C_MODULE_ENABLED
@@ -61,7 +62,6 @@ extern "C" {
 //#define HAL_SRAM_MODULE_ENABLED
 //#define HAL_SDRAM_MODULE_ENABLED
 //#define HAL_HASH_MODULE_ENABLED
-//#define HAL_EXTI_MODULE_ENABLED
 //#define HAL_SMBUS_MODULE_ENABLED
 //#define HAL_I2S_MODULE_ENABLED
 //#define HAL_IWDG_MODULE_ENABLED
diff --git a/buildroot/share/PlatformIO/variants/MARLIN_F4x7Vx/hal_conf_extra.h b/buildroot/share/PlatformIO/variants/MARLIN_F4x7Vx/hal_conf_extra.h
index 0c44f087422..952fe3c5b88 100644
--- a/buildroot/share/PlatformIO/variants/MARLIN_F4x7Vx/hal_conf_extra.h
+++ b/buildroot/share/PlatformIO/variants/MARLIN_F4x7Vx/hal_conf_extra.h
@@ -40,6 +40,7 @@
 #define HAL_CRC_MODULE_ENABLED
 #define HAL_DAC_MODULE_ENABLED
 #define HAL_DMA_MODULE_ENABLED
+#define HAL_EXTI_MODULE_ENABLED   // Needed for Endstop (and other external) Interrupts
 #define HAL_GPIO_MODULE_ENABLED
 #define HAL_I2C_MODULE_ENABLED
 #define HAL_PWR_MODULE_ENABLED
@@ -64,7 +65,6 @@
 //#define HAL_SRAM_MODULE_ENABLED
 //#define HAL_SDRAM_MODULE_ENABLED
 //#define HAL_HASH_MODULE_ENABLED
-//#define HAL_EXTI_MODULE_ENABLED
 //#define HAL_SMBUS_MODULE_ENABLED
 //#define HAL_I2S_MODULE_ENABLED
 //#define HAL_IWDG_MODULE_ENABLED
diff --git a/buildroot/share/PlatformIO/variants/MARLIN_FYSETC_CHEETAH_V20/hal_conf_custom.h b/buildroot/share/PlatformIO/variants/MARLIN_FYSETC_CHEETAH_V20/hal_conf_custom.h
index 395bfcd4b76..2ff2fd686ea 100644
--- a/buildroot/share/PlatformIO/variants/MARLIN_FYSETC_CHEETAH_V20/hal_conf_custom.h
+++ b/buildroot/share/PlatformIO/variants/MARLIN_FYSETC_CHEETAH_V20/hal_conf_custom.h
@@ -35,6 +35,7 @@ extern "C" {
 #define HAL_ADC_MODULE_ENABLED
 #define HAL_CRC_MODULE_ENABLED
 #define HAL_DMA_MODULE_ENABLED
+#define HAL_EXTI_MODULE_ENABLED   // Needed for Endstop (and other external) Interrupts
 #define HAL_FLASH_MODULE_ENABLED
 #define HAL_GPIO_MODULE_ENABLED
 #define HAL_I2C_MODULE_ENABLED
@@ -61,7 +62,6 @@ extern "C" {
 //#define HAL_SRAM_MODULE_ENABLED
 //#define HAL_SDRAM_MODULE_ENABLED
 //#define HAL_HASH_MODULE_ENABLED
-//#define HAL_EXTI_MODULE_ENABLED
 //#define HAL_SMBUS_MODULE_ENABLED
 //#define HAL_I2S_MODULE_ENABLED
 //#define HAL_LTDC_MODULE_ENABLED
diff --git a/buildroot/share/PlatformIO/variants/MARLIN_LERDGE/PeripheralPins.c b/buildroot/share/PlatformIO/variants/MARLIN_LERDGE/PeripheralPins.c
index 044f555a410..7f6b32c2280 100644
--- a/buildroot/share/PlatformIO/variants/MARLIN_LERDGE/PeripheralPins.c
+++ b/buildroot/share/PlatformIO/variants/MARLIN_LERDGE/PeripheralPins.c
@@ -398,3 +398,21 @@ const PinMap PinMap_USB_OTG_HS[] = {
   {NC,    NP,    0}
 };
 #endif
+
+//*** SD ***
+
+#ifdef HAL_SD_MODULE_ENABLED
+WEAK const PinMap PinMap_SD[] = {
+//{PB_8,  SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_SDIO)}, // SDIO_D4
+//{PB_9,  SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_SDIO)}, // SDIO_D5
+//{PC_6,  SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_SDIO)}, // SDIO_D6
+//{PC_7,  SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_SDIO)}, // SDIO_D7
+  {PC_8,  SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_SDIO)}, // SDIO_D0
+  {PC_9,  SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_SDIO)}, // SDIO_D1
+  {PC_10, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_SDIO)}, // SDIO_D2
+  {PC_11, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_SDIO)}, // SDIO_D3
+  {PC_12, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_SDIO)}, // SDIO_CK
+  {PD_2,  SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_SDIO)}, // SDIO_CMD
+  {NC,    NP,    0}
+};
+#endif
diff --git a/buildroot/share/PlatformIO/variants/MARLIN_LERDGE/variant.h b/buildroot/share/PlatformIO/variants/MARLIN_LERDGE/variant.h
index 87033a68e5f..f4488356b7d 100644
--- a/buildroot/share/PlatformIO/variants/MARLIN_LERDGE/variant.h
+++ b/buildroot/share/PlatformIO/variants/MARLIN_LERDGE/variant.h
@@ -163,32 +163,37 @@ extern "C" {
 // Below SPI and I2C definitions already done in the core
 // Could be redefined here if differs from the default one
 // SPI Definitions
-#define PIN_SPI_SS              PF11
-#define PIN_SPI_MOSI            PB15
-#define PIN_SPI_MISO            PB14
-#define PIN_SPI_SCK             PB13
 
+// SPI1 (Winbond on the Lerdge-K)
+//#define PIN_SPI_SS            PC4
+//#define PIN_SPI_SCK           PA5
+//#define PIN_SPI_MISO          PA6
+//#define PIN_SPI_MOSI          PA7
 
+// SPI2 (Winbond on the Lerdge-S)
+//#define PIN_SPI_SS            PB12
+//#define PIN_SPI_SCK           PB13
+//#define PIN_SPI_MISO          PB14
+//#define PIN_SPI_MOSI          PB15
 
-//max6675
-//#define PIN_SPI_SS              PA4
-//#define PIN_SPI_SCK             PA5
-//#define PIN_SPI_MISO            PA6
-//#define PIN_SPI_MOSI            PA7
-
-
-
-
-// I2C Definitions
-#define PIN_WIRE_SDA            PB7
-#define PIN_WIRE_SCL            PB6
+// I2C Definitions (Software I2C)
+//#define PIN_WIRE_SDA          PG13
+//#define PIN_WIRE_SCL          PG14
 
 // Timer Definitions
-//Do not use timer used by PWM pins when possible. See PinMap_PWM in PeripheralPins.c
-#define TIMER_TONE              TIM6
-
-// Do not use basic timer: OC is required
-#define TIMER_SERVO             TIM1  //TODO: advanced-control timers don't work
+// Do not use timer used by PWM pins when possible. See PinMap_PWM in PeripheralPins.c
+// FANs may require PWM timers 3 10 11 13
+// The LED/RGB connectors timer 4
+// Beware: STEP_TIMER default is 6 and TEMP_TIMER 14 for the F407
+#ifndef TIMER_TONE
+  #define TIMER_TONE            TIM8  // TIM3 or TIM8 for SPEAKER compat on the lerdge K (PC6)
+#endif                                // TIM4 for that on the Lerdge S (PD11)
+#ifndef TIMER_SERVO
+  #define TIMER_SERVO           TIM1  // Ideally TIM2 for Hardware PWM (PB11)
+#endif                                // TIM4 on the S (PD12)
+#ifndef TIMER_SERIAL
+  #define TIMER_SERIAL          TIM7  // Default used in SoftwareSerial lib
+#endif
 
 // UART Definitions
 // Define here Serial instance number to map on Serial generic name
@@ -208,6 +213,8 @@ extern "C" {
 /* Extra HAL modules */
 //#define HAL_DAC_MODULE_ENABLED
 #define HAL_SD_MODULE_ENABLED
+#define HAL_SRAM_MODULE_ENABLED
+#define HAL_EXTI_MODULE_ENABLED   // Needed for Endstop (and other external) Interrupts
 
 #ifdef __cplusplus
 } // extern "C"
diff --git a/buildroot/share/PlatformIO/variants/MARLIN_STEVAL_F401VE/hal_conf_custom.h b/buildroot/share/PlatformIO/variants/MARLIN_STEVAL_F401VE/hal_conf_custom.h
index aeaaf890f24..7d013d2b27f 100644
--- a/buildroot/share/PlatformIO/variants/MARLIN_STEVAL_F401VE/hal_conf_custom.h
+++ b/buildroot/share/PlatformIO/variants/MARLIN_STEVAL_F401VE/hal_conf_custom.h
@@ -35,6 +35,7 @@ extern "C" {
 #define HAL_ADC_MODULE_ENABLED
 #define HAL_CRC_MODULE_ENABLED
 #define HAL_DMA_MODULE_ENABLED
+#define HAL_EXTI_MODULE_ENABLED   // Needed for Endstop (and other external) Interrupts
 #define HAL_FLASH_MODULE_ENABLED
 #define HAL_GPIO_MODULE_ENABLED
 #define HAL_I2C_MODULE_ENABLED
@@ -62,7 +63,6 @@ extern "C" {
 //#define HAL_SRAM_MODULE_ENABLED
 //#define HAL_SDRAM_MODULE_ENABLED
 //#define HAL_HASH_MODULE_ENABLED
-//#define HAL_EXTI_MODULE_ENABLED
 //#define HAL_SMBUS_MODULE_ENABLED
 //#define HAL_I2S_MODULE_ENABLED
 //#define HAL_LTDC_MODULE_ENABLED
diff --git a/buildroot/share/PlatformIO/variants/MARLIN_TH3D_EZBOARD_LITE_V2/hal_conf_extra.h b/buildroot/share/PlatformIO/variants/MARLIN_TH3D_EZBOARD_LITE_V2/hal_conf_extra.h
index 8c46edb50e6..2ad29050233 100755
--- a/buildroot/share/PlatformIO/variants/MARLIN_TH3D_EZBOARD_LITE_V2/hal_conf_extra.h
+++ b/buildroot/share/PlatformIO/variants/MARLIN_TH3D_EZBOARD_LITE_V2/hal_conf_extra.h
@@ -36,6 +36,19 @@
   */
 #define HAL_MODULE_ENABLED
 #define HAL_ADC_MODULE_ENABLED
+#define HAL_DMA_MODULE_ENABLED
+#define HAL_FLASH_MODULE_ENABLED
+#define HAL_GPIO_MODULE_ENABLED
+#define HAL_EXTI_MODULE_ENABLED   // Needed for Endstop (and other external) Interrupts
+#define HAL_PWR_MODULE_ENABLED
+#define HAL_RCC_MODULE_ENABLED
+#define HAL_SPI_MODULE_ENABLED
+#define HAL_TIM_MODULE_ENABLED
+#define HAL_USART_MODULE_ENABLED
+#define HAL_CORTEX_MODULE_ENABLED
+#define HAL_PCD_MODULE_ENABLED
+//#define HAL_UART_MODULE_ENABLED // by default
+
 //#define HAL_CAN_MODULE_ENABLED
 //#define HAL_CAN_LEGACY_MODULE_ENABLED
 //#define HAL_CRC_MODULE_ENABLED
@@ -43,40 +56,28 @@
 //#define HAL_CRYP_MODULE_ENABLED
 //#define HAL_DAC_MODULE_ENABLED
 //#define HAL_DCMI_MODULE_ENABLED
-#define HAL_DMA_MODULE_ENABLED
 //#define HAL_DMA2D_MODULE_ENABLED
 //#define HAL_ETH_MODULE_ENABLED
-#define HAL_FLASH_MODULE_ENABLED
 //#define HAL_NAND_MODULE_ENABLED
 //#define HAL_NOR_MODULE_ENABLED
 //#define HAL_PCCARD_MODULE_ENABLED
 //#define HAL_SRAM_MODULE_ENABLED
 //#define HAL_SDRAM_MODULE_ENABLED
 //#define HAL_HASH_MODULE_ENABLED
-#define HAL_GPIO_MODULE_ENABLED
-//#define HAL_EXTI_MODULE_ENABLED
 //#define HAL_I2C_MODULE_ENABLED
 //#define HAL_SMBUS_MODULE_ENABLED
 //#define HAL_I2S_MODULE_ENABLED
 //#define HAL_IWDG_MODULE_ENABLED
 //#define HAL_LTDC_MODULE_ENABLED
 //#define HAL_DSI_MODULE_ENABLED
-#define HAL_PWR_MODULE_ENABLED
 //#define HAL_QSPI_MODULE_ENABLED
-#define HAL_RCC_MODULE_ENABLED
 //#define HAL_RNG_MODULE_ENABLED
 //#define HAL_RTC_MODULE_ENABLED
 //#define HAL_SAI_MODULE_ENABLED
 //#define HAL_SD_MODULE_ENABLED
-#define HAL_SPI_MODULE_ENABLED
-#define HAL_TIM_MODULE_ENABLED
-//#define HAL_UART_MODULE_ENABLED // by default
-#define HAL_USART_MODULE_ENABLED
 //#define HAL_IRDA_MODULE_ENABLED
 //#define HAL_SMARTCARD_MODULE_ENABLED
 //#define HAL_WWDG_MODULE_ENABLED
-#define HAL_CORTEX_MODULE_ENABLED
-#define HAL_PCD_MODULE_ENABLED
 //#define HAL_HCD_MODULE_ENABLED
 //#define HAL_FMPI2C_MODULE_ENABLED
 //#define HAL_SPDIFRX_MODULE_ENABLED
diff --git a/ini/stm32f4.ini b/ini/stm32f4.ini
index 29dd9330782..6870345121d 100644
--- a/ini/stm32f4.ini
+++ b/ini/stm32f4.ini
@@ -255,14 +255,13 @@ board_build.encrypt = firmware.bin
 board_build.offset  = 0x10000
 build_flags         = ${stm32_variant.build_flags}
                       -DSTM32F4 -DSTM32F4xx -DTARGET_STM32F4
-                      -DDISABLE_GENERIC_SERIALUSB -DARDUINO_ARCH_STM32 -DARDUINO_LERDGE
-                      -DHAL_SRAM_MODULE_ENABLED
+                      -DDISABLE_GENERIC_SERIALUSB -DARDUINO_ARCH_STM32 -DLERDGE_TFT35
 build_unflags       = ${stm32_variant.build_unflags} -DUSBCON -DUSBD_USE_CDC -DUSBD_VID=0x0483
 extra_scripts       = ${stm32_variant.extra_scripts}
                       buildroot/share/PlatformIO/scripts/lerdge.py
 
 #
-# Lerdge X
+# Lerdge X (STM32F407VE)
 #
 [env:LERDGEX]
 platform            = ${lerdge_common.platform}
@@ -279,7 +278,7 @@ platform_packages = ${stm_flash_drive.platform_packages}
 build_flags       = ${stm_flash_drive.build_flags} ${lerdge_common.build_flags}
 
 #
-# Lerdge S
+# Lerdge S (STM32F407ZG)
 #
 [env:LERDGES]
 platform            = ${lerdge_common.platform}
@@ -296,7 +295,7 @@ platform_packages = ${stm_flash_drive.platform_packages}
 build_flags       = ${stm_flash_drive.build_flags} ${lerdge_common.build_flags}
 
 #
-# Lerdge K
+# Lerdge K (STM32F407ZG)
 #
 [env:LERDGEK]
 platform            = ${lerdge_common.platform}