1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
diff --git a/firmware/target/arm/as3525/sd-as3525.c b/firmware/target/arm/as3525/sd-as3525.c
index 9c3ff0b..586a670 100644
--- a/firmware/target/arm/as3525/sd-as3525.c
+++ b/firmware/target/arm/as3525/sd-as3525.c
@@ -374,6 +374,24 @@ static int sd_init_card(const int drive)
         const int ret = sd_select_bank(-1);
         if(ret < 0)
             return ret -16;
+
+        /*  CMD7 w/rca = 0: Select card to put it in STBY state */
+        if(!send_cmd(drive, SD_SELECT_CARD, 0, MCI_ARG, NULL))
+            return -17;
+        mci_delay();
+
+        /* CMD9 send CSD again, so we got the correct number of blocks */
+        if(!send_cmd(drive, SD_SEND_CSD, card_info[drive].rca,
+                     MCI_RESP|MCI_LONG_RESP|MCI_ARG, card_info[drive].csd))
+            return -18;
+
+        sd_parse_csd(&card_info[drive]);
+
+        /*  CMD7 w/rca: Select card to put it in TRAN state */
+        if(!send_cmd(drive, SD_SELECT_CARD, card_info[drive].rca, MCI_ARG, NULL))
+            return -19;
+        mci_delay();
+
     }

     card_info[drive].initialized = 1;