diff --git a/Marlin/src/core/language.h b/Marlin/src/core/language.h
index f0ddbdd6d09..1d81ee61fb6 100644
--- a/Marlin/src/core/language.h
+++ b/Marlin/src/core/language.h
@@ -120,6 +120,7 @@
 #define STR_ERR_CHECKSUM_MISMATCH           "checksum mismatch, Last Line: "
 #define STR_ERR_NO_CHECKSUM                 "No Checksum with line number, Last Line: "
 #define STR_FILE_PRINTED                    "Done printing file"
+#define STR_NO_MEDIA                        "No media"
 #define STR_BEGIN_FILE_LIST                 "Begin file list"
 #define STR_END_FILE_LIST                   "End file list"
 #define STR_INVALID_EXTRUDER                "Invalid extruder"
diff --git a/Marlin/src/gcode/sd/M20.cpp b/Marlin/src/gcode/sd/M20.cpp
index 6d4c55752cc..7ac4affdae9 100644
--- a/Marlin/src/gcode/sd/M20.cpp
+++ b/Marlin/src/gcode/sd/M20.cpp
@@ -31,9 +31,13 @@
  * M20: List SD card to serial output
  */
 void GcodeSuite::M20() {
-  SERIAL_ECHOLNPGM(STR_BEGIN_FILE_LIST);
-  card.ls();
-  SERIAL_ECHOLNPGM(STR_END_FILE_LIST);
+  if (card.flag.mounted) {
+    SERIAL_ECHOLNPGM(STR_BEGIN_FILE_LIST);
+    card.ls();
+    SERIAL_ECHOLNPGM(STR_END_FILE_LIST);
+  }
+  else
+    SERIAL_ECHO_MSG(STR_NO_MEDIA);
 }
 
 #endif // SDSUPPORT
diff --git a/Marlin/src/sd/cardreader.cpp b/Marlin/src/sd/cardreader.cpp
index 59a5f1da8b8..3eacf8b69fb 100644
--- a/Marlin/src/sd/cardreader.cpp
+++ b/Marlin/src/sd/cardreader.cpp
@@ -276,8 +276,10 @@ void CardReader::printListing(SdFile parent, const char * const prepend/*=nullpt
 // List all files on the SD card
 //
 void CardReader::ls() {
-  root.rewind();
-  printListing(root);
+  if (flag.mounted) {
+    root.rewind();
+    printListing(root);
+  }
 }
 
 #if ENABLED(LONG_FILENAME_HOST_SUPPORT)