diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h
index 8cfaa95787..149ac610f5 100644
--- a/Marlin/Configuration_adv.h
+++ b/Marlin/Configuration_adv.h
@@ -3387,6 +3387,15 @@
   #define POWER_MONITOR_VOLTAGE_OFFSET  0         // Offset (in volts) applied to the calculated voltage
 #endif
 
+/**
+ * Stepper Driver Anti-SNAFU Protection
+ *
+ * If the SAFE_POWER_PIN is defined for your board, Marlin will check
+ * that stepper drivers are properly plugged in before applying power.
+ * Disable protection if your stepper drivers don't support the feature.
+ */
+//#define DISABLE_DRIVER_SAFE_POWER_PROTECT
+
 /**
  * CNC Coordinate Systems
  *
diff --git a/Marlin/src/MarlinCore.cpp b/Marlin/src/MarlinCore.cpp
index 7139d54f25..209c9b59d0 100644
--- a/Marlin/src/MarlinCore.cpp
+++ b/Marlin/src/MarlinCore.cpp
@@ -232,6 +232,10 @@
   #include "lcd/extui/lib/dgus/DGUSScreenHandler.h"
 #endif
 
+#if HAS_DRIVER_SAFE_POWER_PROTECT
+  #include "feature/stepper_driver_safety.h"
+#endif
+
 PGMSTR(M112_KILL_STR, "M112 Shutdown");
 
 MarlinState marlin_state = MF_INITIALIZING;
@@ -1223,6 +1227,15 @@ void setup() {
     SETUP_RUN(ui.reset_status());     // Load welcome message early. (Retained if no errors exist.)
   #endif
 
+  #if PIN_EXISTS(SAFE_POWER)
+    #if HAS_DRIVER_SAFE_POWER_PROTECT
+      SETUP_RUN(stepper_driver_backward_check());
+    #else
+      SETUP_LOG("SAFE_POWER");
+      OUT_WRITE(SAFE_POWER_PIN, HIGH);
+    #endif
+  #endif
+
   #if ENABLED(PROBE_TARE)
     SETUP_RUN(probe.tare_init());
   #endif
@@ -1467,6 +1480,10 @@ void setup() {
     SETUP_RUN(test_tmc_connection(true, true, true, true));
   #endif
 
+  #if HAS_DRIVER_SAFE_POWER_PROTECT
+    SETUP_RUN(stepper_driver_backward_report());
+  #endif
+
   #if HAS_PRUSA_MMU2
     SETUP_RUN(mmu2.init());
   #endif
diff --git a/Marlin/src/core/boards.h b/Marlin/src/core/boards.h
index 377147504f..614a3b6e9e 100644
--- a/Marlin/src/core/boards.h
+++ b/Marlin/src/core/boards.h
@@ -363,25 +363,26 @@
 #define BOARD_BLACK_STM32F407VE       4204  // BLACK_STM32F407VE
 #define BOARD_BLACK_STM32F407ZE       4205  // BLACK_STM32F407ZE
 #define BOARD_STEVAL_3DP001V1         4206  // STEVAL-3DP001V1 3D PRINTER BOARD
-#define BOARD_BTT_SKR_PRO_V1_1        4207  // BigTreeTech SKR Pro v1.1 (STM32F407ZG)
-#define BOARD_BTT_SKR_PRO_V1_2        4208  // BigTreeTech SKR Pro v1.2 (STM32F407ZG)
-#define BOARD_BTT_BTT002_V1_0         4209  // BigTreeTech BTT002 v1.0 (STM32F407VG)
+#define BOARD_BTT_SKR_PRO_V1_1        4207  // BigTreeTech SKR Pro v1.1 (STM32F407ZGT6)
+#define BOARD_BTT_SKR_PRO_V1_2        4208  // BigTreeTech SKR Pro v1.2 (STM32F407ZGT6)
+#define BOARD_BTT_BTT002_V1_0         4209  // BigTreeTech BTT002 v1.0 (STM32F407VGT6)
 #define BOARD_BTT_E3_RRF              4210  // BigTreeTech E3 RRF (STM32F407VGT6)
-#define BOARD_BTT_GTR_V1_0            4211  // BigTreeTech GTR v1.0 (STM32F407IGT)
-#define BOARD_LERDGE_K                4212  // Lerdge K (STM32F407ZG)
-#define BOARD_LERDGE_S                4213  // Lerdge S (STM32F407VE)
-#define BOARD_LERDGE_X                4214  // Lerdge X (STM32F407VE)
-#define BOARD_VAKE403D                4215  // VAkE 403D (STM32F446VET6)
-#define BOARD_FYSETC_S6               4216  // FYSETC S6 (STM32F446VET6)
-#define BOARD_FYSETC_S6_V2_0          4217  // FYSETC S6 v2.0 (STM32F446VET6)
-#define BOARD_FYSETC_SPIDER           4218  // FYSETC Spider (STM32F446VET6)
-#define BOARD_FLYF407ZG               4219  // FLYF407ZG (STM32F407ZG)
-#define BOARD_MKS_ROBIN2              4220  // MKS_ROBIN2 (STM32F407ZE)
-#define BOARD_MKS_ROBIN_PRO_V2        4221  // MKS Robin Pro V2 (STM32F407VE)
-#define BOARD_MKS_ROBIN_NANO_V3       4222  // MKS Robin Nano V3 (STM32F407VG)
-#define BOARD_ANET_ET4                4223  // ANET ET4 V1.x (STM32F407VGT6)
-#define BOARD_ANET_ET4P               4224  // ANET ET4P V1.x (STM32F407VGT6)
-#define BOARD_FYSETC_CHEETAH_V20      4225  // FYSETC Cheetah V2.0
+#define BOARD_BTT_SKR_V2_0            4211  // BigTreeTech SKR v2.0 (STM32F407VGT6)
+#define BOARD_BTT_GTR_V1_0            4212  // BigTreeTech GTR v1.0 (STM32F407IGT)
+#define BOARD_LERDGE_K                4213  // Lerdge K (STM32F407ZG)
+#define BOARD_LERDGE_S                4214  // Lerdge S (STM32F407VE)
+#define BOARD_LERDGE_X                4215  // Lerdge X (STM32F407VE)
+#define BOARD_VAKE403D                4216  // VAkE 403D (STM32F446VET6)
+#define BOARD_FYSETC_S6               4217  // FYSETC S6 (STM32F446VET6)
+#define BOARD_FYSETC_S6_V2_0          4218  // FYSETC S6 v2.0 (STM32F446VET6)
+#define BOARD_FYSETC_SPIDER           4219  // FYSETC Spider (STM32F446VET6)
+#define BOARD_FLYF407ZG               4220  // FLYF407ZG (STM32F407ZG)
+#define BOARD_MKS_ROBIN2              4221  // MKS_ROBIN2 (STM32F407ZE)
+#define BOARD_MKS_ROBIN_PRO_V2        4222  // MKS Robin Pro V2 (STM32F407VE)
+#define BOARD_MKS_ROBIN_NANO_V3       4223  // MKS Robin Nano V3 (STM32F407VG)
+#define BOARD_ANET_ET4                4224  // ANET ET4 V1.x (STM32F407VGT6)
+#define BOARD_ANET_ET4P               4225 // ANET ET4P V1.x (STM32F407VGT6)
+#define BOARD_FYSETC_CHEETAH_V20      4226  // FYSETC Cheetah V2.0
 
 //
 // ARM Cortex M7
diff --git a/Marlin/src/feature/stepper_driver_safety.cpp b/Marlin/src/feature/stepper_driver_safety.cpp
new file mode 100644
index 0000000000..991f5a5906
--- /dev/null
+++ b/Marlin/src/feature/stepper_driver_safety.cpp
@@ -0,0 +1,171 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ */
+#include "../inc/MarlinConfig.h"
+#include "../lcd/marlinui.h"
+
+#if HAS_DRIVER_SAFE_POWER_PROTECT
+
+#include "stepper_driver_safety.h"
+
+static uint32_t axis_plug_backward = 0;
+
+void stepper_driver_backward_error(PGM_P str) {
+  SERIAL_ERROR_START();
+  SERIAL_ECHOPGM_P(str);
+  SERIAL_ECHOLNPGM(" driver is backward!");
+  ui.status_printf_P(2, PSTR(S_FMT S_FMT), str, GET_TEXT(MSG_DRIVER_BACKWARD));
+}
+
+void stepper_driver_backward_check() {
+
+  OUT_WRITE(SAFE_POWER_PIN, LOW);
+
+  #define TEST_BACKWARD(AXIS, BIT) do { \
+      SET_INPUT(AXIS##_ENABLE_PIN); \
+      OUT_WRITE(AXIS##_STEP_PIN, false); \
+      delay(20); \
+      if (READ(AXIS##_ENABLE_PIN) == false) { \
+        SBI(axis_plug_backward, BIT); \
+        stepper_driver_backward_error(PSTR(STRINGIFY(AXIS))); \
+      } \
+    }while(0)
+
+  #if HAS_X_ENABLE
+    TEST_BACKWARD(X, 0);
+  #endif
+  #if HAS_X2_ENABLE
+    TEST_BACKWARD(X2, 1);
+  #endif
+
+  #if HAS_Y_ENABLE
+    TEST_BACKWARD(Y, 2);
+  #endif
+  #if HAS_Y2_ENABLE
+    TEST_BACKWARD(Y2, 3);
+  #endif
+
+  #if HAS_Z_ENABLE
+    TEST_BACKWARD(Z, 4);
+  #endif
+  #if HAS_Z2_ENABLE
+    TEST_BACKWARD(Z2, 5);
+  #endif
+  #if HAS_Z3_ENABLE
+    TEST_BACKWARD(Z3, 6);
+  #endif
+  #if HAS_Z4_ENABLE
+    TEST_BACKWARD(Z4, 7);
+  #endif
+
+  #if HAS_E0_ENABLE
+    TEST_BACKWARD(E0, 8);
+  #endif
+  #if HAS_E1_ENABLE
+    TEST_BACKWARD(E1, 9);
+  #endif
+  #if HAS_E2_ENABLE
+    TEST_BACKWARD(E2, 10);
+  #endif
+  #if HAS_E3_ENABLE
+    TEST_BACKWARD(E3, 11);
+  #endif
+  #if HAS_E4_ENABLE
+    TEST_BACKWARD(E4, 12);
+  #endif
+  #if HAS_E5_ENABLE
+    TEST_BACKWARD(E5, 13);
+  #endif
+  #if HAS_E6_ENABLE
+    TEST_BACKWARD(E6, 14);
+  #endif
+  #if HAS_E7_ENABLE
+    TEST_BACKWARD(E7, 15);
+  #endif
+
+  if (!axis_plug_backward)
+    WRITE(SAFE_POWER_PIN, HIGH);
+}
+
+void stepper_driver_backward_report() {
+  if (!axis_plug_backward) return;
+
+  auto _report_if_backward = [](PGM_P axis, uint8_t bit) {
+    if (TEST(axis_plug_backward, bit))
+      stepper_driver_backward_error(axis);
+  };
+
+  #define REPORT_BACKWARD(axis, bit) _report_if_backward(PSTR(STRINGIFY(axis)), bit)
+
+  #if HAS_X_ENABLE
+    REPORT_BACKWARD(X, 0);
+  #endif
+  #if HAS_X2_ENABLE
+    REPORT_BACKWARD(X2, 1);
+  #endif
+
+  #if HAS_Y_ENABLE
+    REPORT_BACKWARD(Y, 2);
+  #endif
+  #if HAS_Y2_ENABLE
+    REPORT_BACKWARD(Y2, 3);
+  #endif
+
+  #if HAS_Z_ENABLE
+    REPORT_BACKWARD(Z, 4);
+  #endif
+  #if HAS_Z2_ENABLE
+    REPORT_BACKWARD(Z2, 5);
+  #endif
+  #if HAS_Z3_ENABLE
+    REPORT_BACKWARD(Z3, 6);
+  #endif
+  #if HAS_Z4_ENABLE
+    REPORT_BACKWARD(Z4, 7);
+  #endif
+
+  #if HAS_E0_ENABLE
+    REPORT_BACKWARD(E0, 8);
+  #endif
+  #if HAS_E1_ENABLE
+    REPORT_BACKWARD(E1, 9);
+  #endif
+  #if HAS_E2_ENABLE
+    REPORT_BACKWARD(E2, 10);
+  #endif
+  #if HAS_E3_ENABLE
+    REPORT_BACKWARD(E3, 11);
+  #endif
+  #if HAS_E4_ENABLE
+    REPORT_BACKWARD(E4, 12);
+  #endif
+  #if HAS_E5_ENABLE
+    REPORT_BACKWARD(E5, 13);
+  #endif
+  #if HAS_E6_ENABLE
+    REPORT_BACKWARD(E6, 14);
+  #endif
+  #if HAS_E7_ENABLE
+    REPORT_BACKWARD(E7, 15);
+  #endif
+}
+
+#endif // HAS_DRIVER_SAFE_POWER_PROTECT
diff --git a/Marlin/src/feature/stepper_driver_safety.h b/Marlin/src/feature/stepper_driver_safety.h
new file mode 100644
index 0000000000..46edf3390d
--- /dev/null
+++ b/Marlin/src/feature/stepper_driver_safety.h
@@ -0,0 +1,28 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ */
+#pragma once
+
+
+#include "../inc/MarlinConfigPre.h"
+
+void stepper_driver_backward_check();
+void stepper_driver_backward_report();
diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h
index 772c8bc3c1..208c875982 100644
--- a/Marlin/src/inc/Conditionals_post.h
+++ b/Marlin/src/inc/Conditionals_post.h
@@ -3042,3 +3042,7 @@
 #if BUTTONS_EXIST(EN1, EN2, ENC)
   #define HAS_ROTARY_ENCODER 1
 #endif
+
+#if PIN_EXISTS(SAFE_POWER) && DISABLED(DISABLE_DRIVER_SAFE_POWER_PROTECT)
+  #define HAS_DRIVER_SAFE_POWER_PROTECT 1
+#endif
diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h
index 12c5a6e42d..f217c96749 100644
--- a/Marlin/src/lcd/language/language_en.h
+++ b/Marlin/src/lcd/language/language_en.h
@@ -706,6 +706,8 @@ namespace Language_en {
   PROGMEM Language_Str MSG_BOTTOM_RIGHT                    = _UxGT("Bottom Right");
   PROGMEM Language_Str MSG_CALIBRATION_COMPLETED           = _UxGT("Calibration Completed");
   PROGMEM Language_Str MSG_CALIBRATION_FAILED              = _UxGT("Calibration Failed");
+
+  PROGMEM Language_Str MSG_DRIVER_BACKWARD                 = _UxGT(" driver backward");
 }
 
 #if FAN_COUNT == 1
diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h
index c2d6b30703..adcf29e5c6 100644
--- a/Marlin/src/pins/pins.h
+++ b/Marlin/src/pins/pins.h
@@ -596,6 +596,8 @@
   #include "stm32f4/pins_BTT_BTT002_V1_0.h"     // STM32F4                                env:BIGTREE_BTT002
 #elif MB(BTT_E3_RRF)
   #include "stm32f4/pins_BTT_E3_RRF.h"          // STM32F4                                env:BIGTREE_E3_RRF
+#elif MB(BTT_SKR_V2_0)
+  #include "stm32f4/pins_BTT_SKR_V2_0.h"        // STM32F4                                env:BIGTREE_SKR_2
 #elif MB(LERDGE_K)
   #include "stm32f4/pins_LERDGE_K.h"            // STM32F4                                env:LERDGEK env:LERDGEK_usb_flash_drive
 #elif MB(LERDGE_S)
diff --git a/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0.h b/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0.h
new file mode 100644
index 0000000000..fa08aedbb0
--- /dev/null
+++ b/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0.h
@@ -0,0 +1,495 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ */
+#pragma once
+
+#include "env_validate.h"
+
+#define BOARD_INFO_NAME "BTT SKR V2.0"
+
+// Use one of these or SDCard-based Emulation will be used
+#if NO_EEPROM_SELECTED
+  //#define SRAM_EEPROM_EMULATION                 // Use BackSRAM-based EEPROM emulation
+  #define FLASH_EEPROM_EMULATION                  // Use Flash-based EEPROM emulation
+#endif
+
+#if ENABLED(FLASH_EEPROM_EMULATION)
+  // Decrease delays and flash wear by spreading writes across the
+  // 128 kB sector allocated for EEPROM emulation.
+  #define FLASH_EEPROM_LEVELING
+#endif
+
+// USB Flash Drive support
+#define HAS_OTG_USB_HOST_SUPPORT
+
+// Avoid conflict with TIMER_TONE
+#define STEP_TIMER                            10
+
+//
+// Servos
+//
+#define SERVO0_PIN                          PE5
+
+//
+// Trinamic Stallguard pins
+//
+#define X_DIAG_PIN                          PC1   // X-STOP
+#define Y_DIAG_PIN                          PC3   // Y-STOP
+#define Z_DIAG_PIN                          PC0   // Z-STOP
+#define E0_DIAG_PIN                         PC2   // E0DET
+#define E1_DIAG_PIN                         PA0   // E1DET
+
+//
+// Limit Switches
+//
+#ifdef X_STALL_SENSITIVITY
+  #define X_STOP_PIN                  X_DIAG_PIN
+  #if X_HOME_DIR < 0
+    #define X_MAX_PIN                       PC2   // E0DET
+  #else
+    #define X_MIN_PIN                       PC2   // E0DET
+  #endif
+#elif ENABLED(X_DUAL_ENDSTOPS)
+  #ifndef X_MIN_PIN
+    #define X_MIN_PIN                       PC1   // X-STOP
+  #endif
+  #ifndef X_MAX_PIN
+    #define X_MAX_PIN                       PC2   // E0DET
+  #endif
+#else
+  #define X_STOP_PIN                        PC1   // X-STOP
+#endif
+
+#ifdef Y_STALL_SENSITIVITY
+  #define Y_STOP_PIN                  Y_DIAG_PIN
+  #if Y_HOME_DIR < 0
+    #define Y_MAX_PIN                       PA0   // E1DET
+  #else
+    #define Y_MIN_PIN                       PA0   // E1DET
+  #endif
+#elif ENABLED(Y_DUAL_ENDSTOPS)
+  #ifndef Y_MIN_PIN
+    #define Y_MIN_PIN                       PC3   // Y-STOP
+  #endif
+  #ifndef Y_MAX_PIN
+    #define Y_MAX_PIN                       PA0   // E1DET
+  #endif
+#else
+  #define Y_STOP_PIN                        PC3   // Y-STOP
+#endif
+
+#ifdef Z_STALL_SENSITIVITY
+  #define Z_STOP_PIN                  Z_DIAG_PIN
+  #if Z_HOME_DIR < 0
+    #define Z_MAX_PIN                       PC15  // PWRDET
+  #else
+    #define Z_MIN_PIN                       PC15  // PWRDET
+  #endif
+#elif ENABLED(Z_MULTI_ENDSTOPS)
+  #ifndef Z_MIN_PIN
+    #define Z_MIN_PIN                       PC0   // Z-STOP
+  #endif
+  #ifndef Z_MAX_PIN
+    #define Z_MAX_PIN                       PC15  // PWRDET
+  #endif
+#else
+  #ifndef Z_STOP_PIN
+    #define Z_STOP_PIN                      PC0   // Z-STOP
+  #endif
+#endif
+
+//
+// Z Probe (when not Z_MIN_PIN)
+//
+#ifndef Z_MIN_PROBE_PIN
+  #define Z_MIN_PROBE_PIN                   PE4
+#endif
+
+//
+// Filament Runout Sensor
+//
+#define FIL_RUNOUT_PIN                      PC2   // E0DET
+#define FIL_RUNOUT2_PIN                     PA0   // E1DET
+
+//
+// Power Supply Control
+//
+#ifndef PS_ON_PIN
+  #define PS_ON_PIN                         PE8   // PS-ON
+#endif
+
+//
+// Power Loss Detection
+//
+#ifndef POWER_LOSS_PIN
+  #define POWER_LOSS_PIN                    PC15  // PWRDET
+#endif
+
+//
+// NeoPixel LED
+//
+#ifndef NEOPIXEL_PIN
+  #define NEOPIXEL_PIN                      PE6
+#endif
+
+//
+// Control pin of driver/heater/fan power supply
+//
+#define SAFE_POWER_PIN                      PC13
+
+//
+// Steppers
+//
+#define X_STEP_PIN                          PE2
+#define X_DIR_PIN                           PE1
+#define X_ENABLE_PIN                        PE3
+#ifndef X_CS_PIN
+  #define X_CS_PIN                          PE0
+#endif
+
+#define Y_STEP_PIN                          PD5
+#define Y_DIR_PIN                           PD4
+#define Y_ENABLE_PIN                        PD6
+#ifndef Y_CS_PIN
+  #define Y_CS_PIN                          PD3
+#endif
+
+#define Z_STEP_PIN                          PA15
+#define Z_DIR_PIN                           PA8
+#define Z_ENABLE_PIN                        PD1
+#ifndef Z_CS_PIN
+  #define Z_CS_PIN                          PD0
+#endif
+
+#define E0_STEP_PIN                         PD15
+#define E0_DIR_PIN                          PD14
+#define E0_ENABLE_PIN                       PC7
+#ifndef E0_CS_PIN
+  #define E0_CS_PIN                         PC6
+#endif
+
+#define E1_STEP_PIN                         PD11
+#define E1_DIR_PIN                          PD10
+#define E1_ENABLE_PIN                       PD13
+#ifndef E1_CS_PIN
+  #define E1_CS_PIN                         PD12
+#endif
+
+//
+// Temperature Sensors
+//
+#define TEMP_BED_PIN                        PA1   // TB
+#define TEMP_0_PIN                          PA2   // TH0
+#define TEMP_1_PIN                          PA3   // TH1
+
+//
+// Heaters / Fans
+//
+#define HEATER_0_PIN                        PB3   // Heater0
+#define HEATER_1_PIN                        PB4   // Heater1
+#define HEATER_BED_PIN                      PD7   // Hotbed
+#define FAN_PIN                             PB7   // Fan0
+#define FAN1_PIN                            PB6   // Fan1
+#define FAN2_PIN                            PB5   // Fan2
+
+//
+// Software SPI pins for TMC2130 stepper drivers
+//
+#if ENABLED(TMC_USE_SW_SPI)
+  #ifndef TMC_SW_MOSI
+    #define TMC_SW_MOSI                     PE14
+  #endif
+  #ifndef TMC_SW_MISO
+    #define TMC_SW_MISO                     PA14
+  #endif
+  #ifndef TMC_SW_SCK
+    #define TMC_SW_SCK                      PE15
+  #endif
+#endif
+
+#if HAS_TMC_UART
+  /**
+   * TMC2208/TMC2209 stepper drivers
+   *
+   * Hardware serial communication ports.
+   * If undefined software serial is used according to the pins below
+   */
+  //#define X_HARDWARE_SERIAL  Serial1
+  //#define X2_HARDWARE_SERIAL Serial1
+  //#define Y_HARDWARE_SERIAL  Serial1
+  //#define Y2_HARDWARE_SERIAL Serial1
+  //#define Z_HARDWARE_SERIAL  Serial1
+  //#define Z2_HARDWARE_SERIAL Serial1
+  //#define E0_HARDWARE_SERIAL Serial1
+  //#define E1_HARDWARE_SERIAL Serial1
+  //#define E2_HARDWARE_SERIAL Serial1
+  //#define E3_HARDWARE_SERIAL Serial1
+  //#define E4_HARDWARE_SERIAL Serial1
+
+  //
+  // Software serial
+  //
+  #define X_SERIAL_TX_PIN                   PE0
+  #define X_SERIAL_RX_PIN                   PE0
+
+  #define Y_SERIAL_TX_PIN                   PD3
+  #define Y_SERIAL_RX_PIN                   PD3
+
+  #define Z_SERIAL_TX_PIN                   PD0
+  #define Z_SERIAL_RX_PIN                   PD0
+
+  #define E0_SERIAL_TX_PIN                  PC6
+  #define E0_SERIAL_RX_PIN                  PC6
+
+  #define E1_SERIAL_TX_PIN                  PD12
+  #define E1_SERIAL_RX_PIN                  PD12
+
+  // Reduce baud rate to improve software serial reliability
+  #define TMC_BAUD_RATE                    19200
+#endif
+
+//
+// SD Connection
+//
+#ifndef SDCARD_CONNECTION
+  #define SDCARD_CONNECTION LCD
+#endif
+
+/**
+ *               -----                                             -----
+ *           NC | 1 2 | GND                                    5V | 1 2 | GND
+ *        RESET | 3 4 | PC4 (SD_DETECT)             (LCD_D7) PE13 | 3 4 | PE12 (LCD_D6)
+ *   (MOSI) PA7 | 5 6   PB2 (BTN_EN2)               (LCD_D5) PE11 | 5 6   PE10 (LCD_D4)
+ *  (SD_SS) PA4 | 7 8 | PE7 (BTN_EN1)               (LCD_RS)  PE9 | 7 8 | PB1  (LCD_EN)
+ *    (SCK) PA5 | 9 10| PA6 (MISO)                 (BTN_ENC)  PB0 | 9 10| PC5  (BEEPER)
+ *               -----                                             -----
+ *               EXP2                                              EXP1
+ */
+
+#define EXP1_03_PIN                         PE13
+#define EXP1_04_PIN                         PE12
+#define EXP1_05_PIN                         PE11
+#define EXP1_06_PIN                         PE10
+#define EXP1_07_PIN                         PE9
+#define EXP1_08_PIN                         PB1
+#define EXP1_09_PIN                         PB0
+#define EXP1_10_PIN                         PC5
+
+#define EXP2_03_PIN                         -1
+#define EXP2_04_PIN                         PC4
+#define EXP2_05_PIN                         PA7
+#define EXP2_06_PIN                         PB2
+#define EXP2_07_PIN                         PA4
+#define EXP2_08_PIN                         PE7
+#define EXP2_09_PIN                         PA5
+#define EXP2_10_PIN                         PA6
+
+//
+// Onboard SD card
+// Must use soft SPI because Marlin's default hardware SPI is tied to LCD's EXP2
+//
+#if SD_CONNECTION_IS(ONBOARD)
+
+  #define SDIO_SUPPORT                            // Use SDIO for onboard SD
+  #define SDIO_D0_PIN                       PC8
+  #define SDIO_D1_PIN                       PC9
+  #define SDIO_D2_PIN                       PC10
+  #define SDIO_D3_PIN                       PC11
+  #define SDIO_CK_PIN                       PC12
+  #define SDIO_CMD_PIN                      PD2
+
+#elif SD_CONNECTION_IS(LCD)
+
+  #define CUSTOM_SPI_PINS
+  #define SDSS                              PA4
+  #define SD_SS_PIN                         SDSS
+  #define SD_SCK_PIN                        PA5
+  #define SD_MISO_PIN                       PA6
+  #define SD_MOSI_PIN                       PA7
+  #define SD_DETECT_PIN                     PC4
+
+#elif SD_CONNECTION_IS(CUSTOM_CABLE)
+  #error "CUSTOM_CABLE is not a supported SDCARD_CONNECTION for this board"
+#endif
+
+#if ENABLED(BTT_MOTOR_EXPANSION)
+  /**
+   *               _____                                      _____
+   *           NC | · · | GND                             NC | · · | GND
+   *           NC | · · | PF12 (M1EN)            (M2EN)  PG7 | · · | PG6  (M3EN)
+   * (M1STP) PB15 | · ·   PF11 (M1DIR)           (M1RX)  PG3 | · ·   PG2  (M1DIAG)
+   * (M2DIR) PB12 | · · | PG10 (M2STP)           (M2RX) PD10 | · · | PD11 (M2DIAG)
+   * (M3DIR) PB13 | · · | PB14 (M3STP)           (M3RX)  PA8 | · · | PG4  (M3DIAG)
+   *               -----                                      -----
+   *               EXP2                                       EXP1
+   */
+
+  // M1 on Driver Expansion Module
+  #define E3_STEP_PIN                EXP2_05_PIN
+  #define E3_DIR_PIN                 EXP2_06_PIN
+  #define E3_ENABLE_PIN              EXP2_04_PIN
+  #define E3_DIAG_PIN                EXP1_06_PIN
+  #define E3_CS_PIN                  EXP1_05_PIN
+  #if HAS_TMC_UART
+    #define E3_SERIAL_TX_PIN         EXP1_05_PIN
+    #define E3_SERIAL_RX_PIN         EXP1_05_PIN
+  #endif
+
+  // M2 on Driver Expansion Module
+  #define E4_STEP_PIN                EXP2_08_PIN
+  #define E4_DIR_PIN                 EXP2_07_PIN
+  #define E4_ENABLE_PIN              EXP1_03_PIN
+  #define E4_DIAG_PIN                EXP1_08_PIN
+  #define E4_CS_PIN                  EXP1_07_PIN
+  #if HAS_TMC_UART
+    #define E4_SERIAL_TX_PIN         EXP1_07_PIN
+    #define E4_SERIAL_RX_PIN         EXP1_07_PIN
+  #endif
+
+  // M3 on Driver Expansion Module
+  #define E5_STEP_PIN                EXP2_10_PIN
+  #define E5_DIR_PIN                 EXP2_09_PIN
+  #define E5_ENABLE_PIN              EXP1_04_PIN
+  #define E5_DIAG_PIN                EXP1_10_PIN
+  #define E5_CS_PIN                  EXP1_09_PIN
+  #if HAS_TMC_UART
+    #define E5_SERIAL_TX_PIN         EXP1_09_PIN
+    #define E5_SERIAL_RX_PIN         EXP1_09_PIN
+  #endif
+
+#endif // BTT_MOTOR_EXPANSION
+
+//
+// LCDs and Controllers
+//
+#if IS_TFTGLCD_PANEL
+
+  #if ENABLED(TFTGLCD_PANEL_SPI)
+    #define TFTGLCD_CS               EXP2_08_PIN
+  #endif
+
+#elif HAS_WIRED_LCD
+
+  #define BEEPER_PIN                 EXP1_10_PIN
+  #define BTN_ENC                    EXP1_09_PIN
+
+  #if ENABLED(CR10_STOCKDISPLAY)
+
+    #define LCD_PINS_RS              EXP1_04_PIN
+
+    #define BTN_EN1                  EXP1_08_PIN
+    #define BTN_EN2                  EXP1_06_PIN
+
+    #define LCD_PINS_ENABLE          EXP1_03_PIN
+    #define LCD_PINS_D4              EXP1_05_PIN
+
+    // CR10_STOCKDISPLAY default timing is too fast
+    #undef BOARD_ST7920_DELAY_1
+    #undef BOARD_ST7920_DELAY_2
+    #undef BOARD_ST7920_DELAY_3
+
+  #elif ENABLED(MKS_MINI_12864)
+
+    #define DOGLCD_A0                EXP1_04_PIN
+    #define DOGLCD_CS                EXP1_05_PIN
+    #define BTN_EN1                  EXP2_08_PIN
+    #define BTN_EN2                  EXP2_06_PIN
+
+  #else
+
+    #define LCD_PINS_RS              EXP1_07_PIN
+
+    #define BTN_EN1                  EXP2_08_PIN
+    #define BTN_EN2                  EXP2_06_PIN
+
+    #define LCD_PINS_ENABLE          EXP1_08_PIN
+    #define LCD_PINS_D4              EXP1_06_PIN
+
+    #if ENABLED(FYSETC_MINI_12864)
+      #define DOGLCD_CS              EXP1_08_PIN
+      #define DOGLCD_A0              EXP1_07_PIN
+      //#define LCD_BACKLIGHT_PIN           -1
+      #define LCD_RESET_PIN          EXP1_06_PIN  // Must be high or open for LCD to operate normally.
+      #if EITHER(FYSETC_MINI_12864_1_2, FYSETC_MINI_12864_2_0)
+        #ifndef RGB_LED_R_PIN
+          #define RGB_LED_R_PIN      EXP1_05_PIN
+        #endif
+        #ifndef RGB_LED_G_PIN
+          #define RGB_LED_G_PIN      EXP1_04_PIN
+        #endif
+        #ifndef RGB_LED_B_PIN
+          #define RGB_LED_B_PIN      EXP1_03_PIN
+        #endif
+      #elif ENABLED(FYSETC_MINI_12864_2_1)
+        #define NEOPIXEL_PIN         EXP1_05_PIN
+      #endif
+    #endif // !FYSETC_MINI_12864
+
+    #if IS_ULTIPANEL
+      #define LCD_PINS_D5            EXP1_05_PIN
+      #define LCD_PINS_D6            EXP1_04_PIN
+      #define LCD_PINS_D7            EXP1_03_PIN
+
+      #if ENABLED(REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER)
+        #define BTN_ENC_EN           LCD_PINS_D7  // Detect the presence of the encoder
+      #endif
+
+    #endif
+
+  #endif
+
+#endif // HAS_WIRED_LCD
+
+// Alter timing for graphical display
+#if HAS_MARLINUI_U8GLIB
+  #ifndef BOARD_ST7920_DELAY_1
+    #define BOARD_ST7920_DELAY_1    DELAY_NS(96)
+  #endif
+  #ifndef BOARD_ST7920_DELAY_2
+    #define BOARD_ST7920_DELAY_2    DELAY_NS(48)
+  #endif
+  #ifndef BOARD_ST7920_DELAY_3
+    #define BOARD_ST7920_DELAY_3   DELAY_NS(600)
+  #endif
+#endif
+
+//
+// WIFI
+//
+
+/**
+ *                      -------
+ *            GND | 9  |       | 8 | 3.3V
+ *  (ESP-CS) PB12 | 10 |       | 7 | PB15 (ESP-MOSI)
+ *           3.3V | 11 |       | 6 | PB14 (ESP-MISO)
+ * (ESP-IO0) PB10 | 12 |       | 5 | PB13 (ESP-CLK)
+ * (ESP-IO4) PB11 | 13 |       | 4 | NC
+ *             NC | 14 |       | 3 | 3.3V (ESP-EN)
+ *  (ESP-RX)  PD8 | 15 |       | 2 | NC
+ *  (ESP-TX)  PD9 | 16 |       | 1 | PC14 (ESP-RST)
+ *                      -------
+ *                       WIFI
+ */
+#define ESP_WIFI_MODULE_COM                    3  // Must also set either SERIAL_PORT or SERIAL_PORT_2 to this
+#define ESP_WIFI_MODULE_BAUDRATE        BAUDRATE  // Must use same BAUDRATE as SERIAL_PORT & SERIAL_PORT_2
+#define ESP_WIFI_MODULE_RESET_PIN           PC14
+#define ESP_WIFI_MODULE_GPIO0_PIN           PB10
+#define ESP_WIFI_MODULE_GPIO4_PIN           PB11
diff --git a/ini/features.ini b/ini/features.ini
index 118392d6d7..9d8bac5713 100644
--- a/ini/features.ini
+++ b/ini/features.ini
@@ -134,6 +134,7 @@ HAS_FILAMENT_SENSOR     = src_filter=+<src/feature/runout.cpp> +<src/gcode/featu
 (EXT|MANUAL)_SOLENOID.* = src_filter=+<src/feature/solenoid.cpp> +<src/gcode/control/M380_M381.cpp>
 MK2_MULTIPLEXER         = src_filter=+<src/feature/snmm.cpp>
 HAS_CUTTER              = src_filter=+<src/feature/spindle_laser.cpp> +<src/gcode/control/M3-M5.cpp>
+HAS_DRIVER_SAFE_POWER_PROTECT = src_filter=+<src/feature/stepper_driver_safety.cpp>
 EXPERIMENTAL_I2CBUS     = src_filter=+<src/feature/twibus.cpp> +<src/gcode/feature/i2c>
 MECHANICAL_GANTRY_CAL.+ = src_filter=+<src/gcode/calibrate/G34.cpp>
 Z_MULTI_ENDSTOPS        = src_filter=+<src/gcode/calibrate/G34_M422.cpp>
diff --git a/ini/stm32f4.ini b/ini/stm32f4.ini
index 881dd17b01..1678b26d89 100644
--- a/ini/stm32f4.ini
+++ b/ini/stm32f4.ini
@@ -225,6 +225,26 @@ build_flags       = ${common_stm32.build_flags}
 extra_scripts     = ${common.extra_scripts}
   pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py
 
+#
+# Bigtreetech SKR V2.0 (STM32F407VGT6 ARM Cortex-M4) with USB Flash Drive Support
+#
+[env:BIGTREE_SKR_2]
+platform             = ${common_stm32.platform}
+platform_packages    = ${stm_flash_drive.platform_packages}
+extends              = common_stm32
+board                = genericSTM32F407VGT6
+board_build.core     = stm32
+board_build.variant  = MARLIN_F4x7Vx
+board_build.ldscript = ldscript.ld
+board_build.offset   = 0x8000
+board_upload.offset_address = 0x08008000
+extra_scripts     = ${common.extra_scripts}
+  pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py
+  buildroot/share/PlatformIO/scripts/stm32_bootloader.py
+build_flags       = ${stm_flash_drive.build_flags}
+  -DUSE_USBHOST_HS -DUSE_USB_HS_IN_FS -DUSBD_IRQ_PRIO=5 -DUSBD_IRQ_SUBPRIO=6
+  -DHSE_VALUE=8000000U -DHAL_SD_MODULE_ENABLED
+
 #
 # Lerdge base
 #
diff --git a/platformio.ini b/platformio.ini
index d17c283b72..bbc9ffd904 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -136,6 +136,7 @@ default_src_filter = +<src/*> -<src/config> -<src/HAL> +<src/HAL/shared>
   -<src/feature/snmm.cpp>
   -<src/feature/solenoid.cpp> -<src/gcode/control/M380_M381.cpp>
   -<src/feature/spindle_laser.cpp> -<src/gcode/control/M3-M5.cpp>
+  -<src/feature/stepper_driver_safety.cpp>
   -<src/feature/tmc_util.cpp> -<src/module/stepper/trinamic.cpp>
   -<src/feature/tramming.cpp>
   -<src/feature/twibus.cpp>