From 33333147843b0f6f2095aaf9eda938fd2b839a07 Mon Sep 17 00:00:00 2001
From: InsanityAutomation <d.menzel@insanityautomation.com>
Date: Wed, 8 Jun 2022 19:43:34 -0400
Subject: [PATCH 1/3] Archim2 USB Hang Fix

---
 Marlin/Configuration_adv.h                    |  2 ++
 Marlin/src/pins/sam/pins_ARCHIM2.h            |  8 ++++++--
 .../sd/usb_flashdrive/Sd2Card_FlashDrive.cpp  | 20 +++++++++----------
 3 files changed, 18 insertions(+), 12 deletions(-)

diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h
index 96a3e04d0b77..b650450ad2ef 100644
--- a/Marlin/Configuration_adv.h
+++ b/Marlin/Configuration_adv.h
@@ -1585,6 +1585,8 @@
     //#define USE_UHS2_USB
     //#define USE_UHS3_USB
 
+    #define DISABLE_DUE_SD_MMC // Disable USB Host access to USB Drive to prevent hangs on block access for DUE platform
+
     /**
      * Native USB Host supported by some boards (USB OTG)
      */
diff --git a/Marlin/src/pins/sam/pins_ARCHIM2.h b/Marlin/src/pins/sam/pins_ARCHIM2.h
index ecff888ff05e..173f02377237 100644
--- a/Marlin/src/pins/sam/pins_ARCHIM2.h
+++ b/Marlin/src/pins/sam/pins_ARCHIM2.h
@@ -237,7 +237,7 @@
 //
 // LCD / Controller
 //
-#if ANY(HAS_WIRED_LCD, TOUCH_UI_ULTIPANEL, TOUCH_UI_FTDI_EVE)
+#if ANY(HAS_WIRED_LCD, TOUCH_UI_ULTIPANEL, TOUCH_UI_FTDI_EVE, USB_FLASH_DRIVE_SUPPORT)
   #define BEEPER_PIN                          23  // D24 PA15_CTS1
   #define LCD_PINS_RS                         17  // D17 PA12_RXD1
   #define LCD_PINS_ENABLE                     24  // D23 PA14_RTS1
@@ -249,9 +249,13 @@
   #define SD_DETECT_PIN                        2  // D2  PB25_TIOA0
 #endif
 
-#if ANY(IS_ULTIPANEL, TOUCH_UI_ULTIPANEL, TOUCH_UI_FTDI_EVE)
+#if ANY(IS_ULTIPANEL, TOUCH_UI_ULTIPANEL, TOUCH_UI_FTDI_EVE, USB_FLASH_DRIVE_SUPPORT)
   // Buttons on AUX-2
   #define BTN_EN1                             60  // D60 PA3_TIOB1
   #define BTN_EN2                             13  // D13 PB27_TIOB0
   #define BTN_ENC                             16  // D16 PA13_TXD1 // the click
 #endif
+
+#if ENABLED(USB_FLASH_DRIVE_SUPPORT)
+  #define DISABLE_DUE_SD_MMC
+#endif
diff --git a/Marlin/src/sd/usb_flashdrive/Sd2Card_FlashDrive.cpp b/Marlin/src/sd/usb_flashdrive/Sd2Card_FlashDrive.cpp
index a681af4efa63..f0165690e240 100644
--- a/Marlin/src/sd/usb_flashdrive/Sd2Card_FlashDrive.cpp
+++ b/Marlin/src/sd/usb_flashdrive/Sd2Card_FlashDrive.cpp
@@ -161,16 +161,16 @@ void DiskIODriver_USBFlash::idle() {
         laststate = task_state;
         #define UHS_USB_DEBUG(x) case UHS_STATE(x): SERIAL_ECHOLNPGM(#x); break
         switch (task_state) {
-          UHS_USB_DEBUG(IDLE);
-          UHS_USB_DEBUG(RESET_DEVICE);
-          UHS_USB_DEBUG(RESET_NOT_COMPLETE);
-          UHS_USB_DEBUG(DEBOUNCE);
-          UHS_USB_DEBUG(DEBOUNCE_NOT_COMPLETE);
-          UHS_USB_DEBUG(WAIT_SOF);
-          UHS_USB_DEBUG(ERROR);
-          UHS_USB_DEBUG(CONFIGURING);
-          UHS_USB_DEBUG(CONFIGURING_DONE);
-          UHS_USB_DEBUG(RUNNING);
+          SERIAL_ECHOLNPGM("IDLE");
+          SERIAL_ECHOLNPGM("RESET_DEVICE");
+          SERIAL_ECHOLNPGM("RESET_NOT_COMPLETE");
+          SERIAL_ECHOLNPGM("DEBOUNCE");
+          SERIAL_ECHOLNPGM("DEBOUNCE_NOT_COMPLETE");
+          SERIAL_ECHOLNPGM("WAIT_SOF");
+          SERIAL_ECHOLNPGM("ERROR");
+          SERIAL_ECHOLNPGM("CONFIGURING");
+          SERIAL_ECHOLNPGM("CONFIGURING_DONE");
+          SERIAL_ECHOLNPGM("RUNNING");
           default:
             SERIAL_ECHOLNPGM("UHS_USB_HOST_STATE: ", task_state);
             break;

From 79b8bca1f26ae461d6d5d684cb3554d273f79ec3 Mon Sep 17 00:00:00 2001
From: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date: Mon, 18 Jul 2022 20:19:36 -0500
Subject: [PATCH 2/3] Update Sd2Card_FlashDrive.cpp

---
 .../sd/usb_flashdrive/Sd2Card_FlashDrive.cpp  | 22 +++++++++----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/Marlin/src/sd/usb_flashdrive/Sd2Card_FlashDrive.cpp b/Marlin/src/sd/usb_flashdrive/Sd2Card_FlashDrive.cpp
index f0165690e240..692739061e98 100644
--- a/Marlin/src/sd/usb_flashdrive/Sd2Card_FlashDrive.cpp
+++ b/Marlin/src/sd/usb_flashdrive/Sd2Card_FlashDrive.cpp
@@ -159,18 +159,18 @@ void DiskIODriver_USBFlash::idle() {
       static uint8_t laststate = 232;
       if (task_state != laststate) {
         laststate = task_state;
-        #define UHS_USB_DEBUG(x) case UHS_STATE(x): SERIAL_ECHOLNPGM(#x); break
+        #define UHS_USB_DEBUG(x,y) case UHS_STATE(x): SERIAL_ECHOLNPGM(y); break
         switch (task_state) {
-          SERIAL_ECHOLNPGM("IDLE");
-          SERIAL_ECHOLNPGM("RESET_DEVICE");
-          SERIAL_ECHOLNPGM("RESET_NOT_COMPLETE");
-          SERIAL_ECHOLNPGM("DEBOUNCE");
-          SERIAL_ECHOLNPGM("DEBOUNCE_NOT_COMPLETE");
-          SERIAL_ECHOLNPGM("WAIT_SOF");
-          SERIAL_ECHOLNPGM("ERROR");
-          SERIAL_ECHOLNPGM("CONFIGURING");
-          SERIAL_ECHOLNPGM("CONFIGURING_DONE");
-          SERIAL_ECHOLNPGM("RUNNING");
+          UHS_USB_DEBUG(IDLE, "IDLE");
+          UHS_USB_DEBUG(RESET_DEVICE, "RESET_DEVICE");
+          UHS_USB_DEBUG(RESET_NOT_COMPLETE, "RESET_NOT_COMPLETE");
+          UHS_USB_DEBUG(DEBOUNCE, "DEBOUNCE");
+          UHS_USB_DEBUG(DEBOUNCE_NOT_COMPLETE, "DEBOUNCE_NOT_COMPLETE");
+          UHS_USB_DEBUG(WAIT_SOF, "WAIT_SOF");
+          UHS_USB_DEBUG(ERROR, "ERROR");
+          UHS_USB_DEBUG(CONFIGURING, "CONFIGURING");
+          UHS_USB_DEBUG(CONFIGURING_DONE, "CONFIGURING_DONE");
+          UHS_USB_DEBUG(RUNNING, "RUNNING");
           default:
             SERIAL_ECHOLNPGM("UHS_USB_HOST_STATE: ", task_state);
             break;

From 45f8752e90f2cc77e068b8282905893c00b67ab9 Mon Sep 17 00:00:00 2001
From: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date: Mon, 18 Jul 2022 20:23:07 -0500
Subject: [PATCH 3/3] probably SD_DETECT_PIN

---
 Marlin/src/pins/sam/pins_ARCHIM2.h | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/Marlin/src/pins/sam/pins_ARCHIM2.h b/Marlin/src/pins/sam/pins_ARCHIM2.h
index 173f02377237..310dd8e2ac27 100644
--- a/Marlin/src/pins/sam/pins_ARCHIM2.h
+++ b/Marlin/src/pins/sam/pins_ARCHIM2.h
@@ -237,7 +237,7 @@
 //
 // LCD / Controller
 //
-#if ANY(HAS_WIRED_LCD, TOUCH_UI_ULTIPANEL, TOUCH_UI_FTDI_EVE, USB_FLASH_DRIVE_SUPPORT)
+#if ANY(HAS_WIRED_LCD, TOUCH_UI_ULTIPANEL, TOUCH_UI_FTDI_EVE)
   #define BEEPER_PIN                          23  // D24 PA15_CTS1
   #define LCD_PINS_RS                         17  // D17 PA12_RXD1
   #define LCD_PINS_ENABLE                     24  // D23 PA14_RTS1
@@ -245,17 +245,18 @@
   #define LCD_PINS_D5                         54  // D54 PA16_SCK1
   #define LCD_PINS_D6                         68  // D68 PA1_CANRX0
   #define LCD_PINS_D7                         34  // D34 PC2_PWML0
-
-  #define SD_DETECT_PIN                        2  // D2  PB25_TIOA0
 #endif
 
-#if ANY(IS_ULTIPANEL, TOUCH_UI_ULTIPANEL, TOUCH_UI_FTDI_EVE, USB_FLASH_DRIVE_SUPPORT)
+#if ANY(IS_ULTIPANEL, TOUCH_UI_ULTIPANEL, TOUCH_UI_FTDI_EVE)
   // Buttons on AUX-2
   #define BTN_EN1                             60  // D60 PA3_TIOB1
   #define BTN_EN2                             13  // D13 PB27_TIOB0
   #define BTN_ENC                             16  // D16 PA13_TXD1 // the click
 #endif
 
-#if ENABLED(USB_FLASH_DRIVE_SUPPORT)
-  #define DISABLE_DUE_SD_MMC
+#if ANY(HAS_WIRED_LCD, TOUCH_UI_ULTIPANEL, TOUCH_UI_FTDI_EVE, USB_FLASH_DRIVE_SUPPORT)
+  #define SD_DETECT_PIN                        2  // D2  PB25_TIOA0
+  #if ENABLED(USB_FLASH_DRIVE_SUPPORT)
+    #define DISABLE_DUE_SD_MMC
+  #endif
 #endif