diff --git a/Marlin/src/lcd/ultralcd.cpp b/Marlin/src/lcd/ultralcd.cpp index 56255fb959..0564126410 100644 --- a/Marlin/src/lcd/ultralcd.cpp +++ b/Marlin/src/lcd/ultralcd.cpp @@ -5035,17 +5035,19 @@ void lcd_update() { const bool sd_status = IS_SD_INSERTED; if (sd_status != lcd_sd_status && lcd_detected()) { + bool old_sd_status = lcd_sd_status; // prevent re-entry to this block! + lcd_sd_status = sd_status; + if (sd_status) { safe_delay(1000); // some boards need a delay or the LCD won't show the new status card.initsd(); - if (lcd_sd_status != 2) LCD_MESSAGEPGM(MSG_SD_INSERTED); + if (old_sd_status != 2) LCD_MESSAGEPGM(MSG_SD_INSERTED); } else { card.release(); - if (lcd_sd_status != 2) LCD_MESSAGEPGM(MSG_SD_REMOVED); + if (old_sd_status != 2) LCD_MESSAGEPGM(MSG_SD_REMOVED); } - lcd_sd_status = sd_status; lcdDrawUpdate = LCDVIEW_CLEAR_CALL_REDRAW; lcd_implementation_init( // to maybe revive the LCD if static electricity killed it. #if ENABLED(LCD_PROGRESS_BAR)