diff --git a/include/arm9/hardware/sdmmc.h b/include/arm9/hardware/sdmmc.h index ac08efc..cb8224c 100644 --- a/include/arm9/hardware/sdmmc.h +++ b/include/arm9/hardware/sdmmc.h @@ -177,9 +177,8 @@ static inline void setckl(uint32_t data) { - sdmmc_mask16(REG_SDCLKCTL,0x100,0); - sdmmc_mask16(REG_SDCLKCTL,0x2FF,data&0x2FF); - sdmmc_mask16(REG_SDCLKCTL,0x0,0x100); + sdmmc_write16(REG_SDCLKCTL, 0); + sdmmc_write16(REG_SDCLKCTL, 1u<<8 | (data & 0x2FF)); } #endif diff --git a/source/arm9/hardware/sdmmc.c b/source/arm9/hardware/sdmmc.c index 0310937..e7c53ce 100644 --- a/source/arm9/hardware/sdmmc.c +++ b/source/arm9/hardware/sdmmc.c @@ -359,7 +359,7 @@ handleNAND.SDOPT = 0; handleNAND.res = 0; handleNAND.initarg = 1; - handleNAND.clk = 0x80; + handleNAND.clk = 0x10; // ~523 KHz handleNAND.devicenumber = 1; //SD @@ -367,7 +367,7 @@ handleSD.SDOPT = 0; handleSD.res = 0; handleSD.initarg = 0; - handleSD.clk = 0x80; + handleSD.clk = 0x20; // ~261 KHz handleSD.devicenumber = 0; *(volatile uint16_t*)0x10006100 &= 0xF7FFu; //SDDATACTL32 @@ -433,8 +433,8 @@ if((handleNAND.error & 0x4))return -1; handleNAND.total_size = sdmmc_calc_size((uint8_t*)&handleNAND.ret[0],0); - handleNAND.clk = 1; - setckl(1); + handleNAND.clk = 0; // 16.757 MHz + setckl(0); sdmmc_send_command(&handleNAND,0x10407,handleNAND.initarg << 0x10); if((handleNAND.error & 0x4))return -1; @@ -497,8 +497,8 @@ if((handleSD.error & 0x4)) return -3; handleSD.total_size = sdmmc_calc_size((uint8_t*)&handleSD.ret[0],-1); - handleSD.clk = 1; - setckl(1); + handleSD.clk = 0; // 16.757 MHz + setckl(0); sdmmc_send_command(&handleSD,0x10507,handleSD.initarg << 0x10); if((handleSD.error & 0x4)) return -4;