diff --git a/firmware/target/arm/as3525/sd-as3525v2.c b/firmware/target/arm/as3525/sd-as3525v2.c index 0886753f61..754b6fa5e2 100644 --- a/firmware/target/arm/as3525/sd-as3525v2.c +++ b/firmware/target/arm/as3525/sd-as3525v2.c @@ -534,11 +534,29 @@ static int sd_init_card(const int drive) sd_parse_csd(&card_info[drive]); - -#ifndef HAVE_MULTIDRIVE /* CMD7 w/rca: Select card to put it in TRAN state */ if(!send_cmd(drive, SD_SELECT_CARD, card_info[drive].rca, MCI_NO_RESP, NULL)) return -12; + +#ifndef BOOTLOADER + /* Switch to to 4 bit widebus mode */ + if(sd_wait_for_state(drive, SD_TRAN) < 0) + return -13; + /* CMD55 */ + if(!send_cmd(drive, SD_APP_CMD, card_info[drive].rca, MCI_NO_RESP, NULL)) + return -14; + /* ACMD6 */ + if(!send_cmd(drive, SD_SET_BUS_WIDTH, 2, MCI_NO_RESP, NULL)) + return -15; + mci_delay(); + /* CMD55 */ + if(!send_cmd(drive, SD_APP_CMD, card_info[drive].rca, MCI_NO_RESP, NULL)) + return -16; + /* ACMD42 */ + if(!send_cmd(drive, SD_SET_CLR_CARD_DETECT, 0, MCI_NO_RESP, NULL)) + return -17; + /* Now that card is widebus make controller aware */ + MCI_CTYPE |= (1<