diff --git a/drivers/esp.c b/drivers/esp.c
index 78478f6..2766e87 100644
--- a/drivers/esp.c
+++ b/drivers/esp.c
@@ -28,6 +28,7 @@
 
 #define BUFSIZE         4096
 
+#define CONFIG_DEBUG_ESP
 #ifdef CONFIG_DEBUG_ESP
 #define DPRINTF(fmt, args...)                   \
     do { printk(fmt , ##args); } while (0)
@@ -176,12 +177,14 @@ read_capacity(esp_private_t *esp, sd_private_t *sd)
     if (do_command(esp, sd, 11, 8)) {
         sd->sectors = 0;
         sd->bs = 0;
-
+        DPRINTF("read_capacity id %d failed\n", sd->id);
         return 0;
     }
     sd->bs = (esp->buffer[4] << 24) | (esp->buffer[5] << 16) | (esp->buffer[6] << 8) | esp->buffer[7];
     sd->sectors = ((esp->buffer[0] << 24) | (esp->buffer[1] << 16) | (esp->buffer[2] << 8) | esp->buffer[3]) * (sd->bs / 512);
 
+    DPRINTF("read_capacity id %d bs %d sectors %d\n", sd->id, sd->bs,
+            sd->sectors);
     return 1;
 }
 
@@ -224,6 +227,26 @@ inquiry(esp_private_t *esp, sd_private_t *sd)
 }
 
 
+static unsigned int
+request_sense(esp_private_t *esp, sd_private_t *sd)
+{
+    /* Setup command = Request Sense */
+    memset(esp->buffer, 0, 6);
+    esp->buffer[0] = 0x80;
+    esp->buffer[1] = REQUEST_SENSE;
+
+    esp->buffer[5] = 252;
+
+    if (do_command(esp, sd, 7, 252)) {
+        DPRINTF("request_sense id %d failed\n", sd->id);
+    DPRINTF("request_sense id %d sense key %d\n", sd->id, esp->buffer[0]);
+        return 0;
+    }
+
+    DPRINTF("request_sense id %d sense key %d\n", sd->id, esp->buffer[0]);
+    return 1;
+}
+
 static void
 ob_sd_read_blocks(sd_private_t **sd)
 {
@@ -478,7 +501,9 @@ ob_esp_init(unsigned int slot, uint64_t base, unsigned long espoffset,
         esp->sd[id].id = id;
         if (!inquiry(esp, &esp->sd[id]))
             continue;
+        request_sense(esp, &esp->sd[id]);
         read_capacity(esp, &esp->sd[id]);
+        request_sense(esp, &esp->sd[id]);
 
 #ifdef CONFIG_DEBUG_ESP
         dump_drive(&esp->sd[id]);