diff --git a/docs/pyboard/general.rst b/docs/pyboard/general.rst
index 107bae69a77c7450c896bdd755efaaf5dc1f1ab8..48e0146442abef71854b0d9b3d1f684d10236652 100644
--- a/docs/pyboard/general.rst
+++ b/docs/pyboard/general.rst
@@ -11,6 +11,11 @@ is inserted into the slot, it is available as ``/sd``.
 When the pyboard boots up, it needs to choose a filesystem to boot from.  If
 there is no SD card, then it uses the internal filesystem ``/flash`` as the boot
 filesystem, otherwise, it uses the SD card ``/sd``.
+If needed, you can prevent the use of the SD card by creating an empty file
+called ``/flash/SKIPSD``.  If this file exists when the pyboard boots
+up then the SD card will be skipped and the pyboard will always boot from the
+internal filesystem (in this case the SD card won't be mounted but you can still
+mount and use it later in your program using ``os.mount``).
 
 (Note that on older versions of the board, ``/flash`` is called ``0:/`` and ``/sd``
 is called ``1:/``).
diff --git a/stmhal/main.c b/stmhal/main.c
index 7bf6f6a3afc9ef33e7523944ccd57de5c5100a53..7bfdc52c3e393d88f69513666897059f7905b038 100644
--- a/stmhal/main.c
+++ b/stmhal/main.c
@@ -568,7 +568,10 @@ soft_reset:
 #if MICROPY_HW_HAS_SDCARD
     // if an SD card is present then mount it on /sd/
     if (sdcard_is_present()) {
-        mounted_sdcard = init_sdcard_fs(first_soft_reset);
+        // if there is a file in the flash called "SKIPSD", then we don't mount the SD card
+        if (!mounted_flash || f_stat(&fs_user_mount_flash.fatfs, "/SKIPSD", NULL) != FR_OK) {
+            mounted_sdcard = init_sdcard_fs(first_soft_reset);
+        }
     }
 #endif