diff --git a/stmhal/diskio.c b/stmhal/diskio.c
index 9cae46eb18307dcc652ad5920b487df99cc209d8..3b0c86d5b1c6af3ad6b0735277ca696b4c4930a9 100644
--- a/stmhal/diskio.c
+++ b/stmhal/diskio.c
@@ -151,6 +151,10 @@ DRESULT disk_read (
 #endif
 
         case PD_USER:
+            if (fs_user_mount == NULL) {
+                // nothing mounted
+                return RES_ERROR;
+            }
             fs_user_mount->readblocks[2] = MP_OBJ_NEW_SMALL_INT(sector);
             fs_user_mount->readblocks[3] = mp_obj_new_bytearray_by_ref(count * 512, buff);
             mp_call_method_n_kw(2, 0, fs_user_mount->readblocks);
@@ -190,6 +194,10 @@ DRESULT disk_write (
 #endif
 
         case PD_USER:
+            if (fs_user_mount == NULL) {
+                // nothing mounted
+                return RES_ERROR;
+            }
             if (fs_user_mount->writeblocks[0] == MP_OBJ_NULL) {
                 // read-only block device
                 return RES_ERROR;
@@ -243,6 +251,10 @@ DRESULT disk_ioctl (
 #endif
 
         case PD_USER:
+            if (fs_user_mount == NULL) {
+                // nothing mounted
+                return RES_ERROR;
+            }
             switch (cmd) {
                 case CTRL_SYNC:
                     if (fs_user_mount->sync[0] != MP_OBJ_NULL) {