From aacc2d3dc5657b17a26cde09d0146486ea72b17e Mon Sep 17 00:00:00 2001
From: InsanityAutomation
 <38436470+InsanityAutomation@users.noreply.github.com>
Date: Wed, 20 Jul 2022 04:08:19 -0400
Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Fix=20Archim2=20USB=20Hang=20(#2?=
 =?UTF-8?q?4314)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

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

diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h
index 77e8c0ae252..e81b0c3deea 100644
--- a/Marlin/Configuration_adv.h
+++ b/Marlin/Configuration_adv.h
@@ -1605,6 +1605,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 ecff888ff05..310dd8e2ac2 100644
--- a/Marlin/src/pins/sam/pins_ARCHIM2.h
+++ b/Marlin/src/pins/sam/pins_ARCHIM2.h
@@ -245,8 +245,6 @@
   #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)
@@ -255,3 +253,10 @@
   #define BTN_EN2                             13  // D13 PB27_TIOB0
   #define BTN_ENC                             16  // D16 PA13_TXD1 // the click
 #endif
+
+#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
diff --git a/Marlin/src/sd/usb_flashdrive/Sd2Card_FlashDrive.cpp b/Marlin/src/sd/usb_flashdrive/Sd2Card_FlashDrive.cpp
index 7d698247e56..b5968b7021f 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) {
-          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);
+          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;