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
30
31
32
diff --git a/firmware/target/arm/as3525/ata_sd_as3525.c b/firmware/target/arm/as3525/ata_sd_as3525.c
index 6270f43..43c1a37 100644
--- a/firmware/target/arm/as3525/ata_sd_as3525.c
+++ b/firmware/target/arm/as3525/ata_sd_as3525.c
@@ -312,9 +312,6 @@ static int sd_init_card(const int drive)

     /*  End of Card Identification Mode   ************************************/

-    /* Boost MCICLK to operating speed */ /*FIXME: v1 at 31 MHz still too high*/
-    MCI_CLOCK(drive) = (sd_v2 ? MCI_HALFSPEED : MCI_HALFSPEED);
-
 #ifdef HAVE_MULTIDRIVE        /*  The internal SDs are v1 */

     /* Try to switch V2 cards to HS timings, non HS seem to ignore this */
@@ -323,6 +320,7 @@ static int sd_init_card(const int 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 -5;
+        mci_delay();

         if(sd_wait_for_state(drive, SD_TRAN))
             return -6;
@@ -338,6 +336,9 @@ static int sd_init_card(const int drive)
     }
 #endif /*  HAVE_MULTIDRIVE  */

+    /* Boost MCICLK to operating speed */ /*FIXME: v1 at 31 MHz still too high*/
+    MCI_CLOCK(drive) = (sd_v2 ? MCI_HALFSPEED : MCI_HALFSPEED);
+
     /* CMD9 send CSD */
     if(!send_cmd(drive, SD_SEND_CSD, card_info[drive].rca,
                  MCI_RESP|MCI_LONG_RESP|MCI_ARG, temp_reg))