Actually check if SD card is inserted when mounting

This commit is contained in:
d0k3 2016-03-16 15:45:24 +01:00
parent a7853e1cd9
commit 80e96f5815
6 changed files with 20 additions and 11 deletions

View File

@ -105,7 +105,8 @@ DSTATUS disk_initialize (
)
{
if (pdrv == 0) { // a mounted SD card is the preriquisite for everything else
sdmmc_sdcard_init();
if (!sdmmc_sdcard_init())
return RES_PARERR;
} else if (pdrv < 4) {
nand_type_sys = CheckNandType(false);
} else if (pdrv < 7) {

View File

@ -30,6 +30,8 @@ bool InitSDCardFS() {
}
bool InitNandFS() {
if (!fs_mounted[0])
return false;
for (u32 i = 1; i < MAX_FS; i++) {
char fsname[8];
snprintf(fsname, 7, "%lu:", i);

View File

@ -142,9 +142,9 @@ u32 GodMode() {
u32 scroll = 0;
ClearScreenF(true, true, COLOR_STD_BG);
if (!InitSDCardFS()) {
ShowPrompt(false, "Initialising SD card failed!");
return exit_mode;
while (!InitSDCardFS()) {
if (!ShowPrompt(true, "Initialising SD card failed! Retry?"))
return exit_mode;
}
InitNandCrypto();
InitNandFS();
@ -189,9 +189,9 @@ u32 GodMode() {
} else if (pad_state & BUTTON_B) { // unmount SD card
DeinitFS();
ShowPrompt(false, "SD card unmounted, you can eject now.\nPut it back in before you press <A>.");
if (!InitSDCardFS()) {
ShowPrompt(false, "Reinitialising SD card failed!");
return exit_mode;
while (!InitSDCardFS()) {
if (!ShowPrompt(true, "Reinitialising SD card failed! Retry?"))
return exit_mode;
}
InitNandFS();
GetDirContents(current_dir, current_path);

View File

@ -512,7 +512,11 @@ int SD_Init()
{
inittarget(&handelSD);
//waitcycles(0x3E8);
waitcycles(0xF000);
//waitcycles(0xF000);
waitcycles(1u << 19); //Card needs a little bit of time to be detected, it seems
if (!(*((volatile uint16_t*)0x1000601c) & TMIO_STAT0_SIGSTATE)) return -1; // check if card inserted
DEBUGPRINT(topScreen, "0x00000 ", handelSD.error, 10, 20 + 14*8, RGB(40, 40, 40), RGB(208, 208, 208));
sdmmc_send_command(&handelSD,0,0);
DEBUGPRINT(topScreen, "0x10408 ", handelSD.error, 10, 20 + 14*8, RGB(40, 40, 40), RGB(208, 208, 208));
@ -607,7 +611,7 @@ int SD_Init()
return 0;
}
void sdmmc_sdcard_init()
int sdmmc_sdcard_init()
{
DEBUGPRINT(topScreen, "sdmmc_sdcard_init ", handelSD.error, 10, 20 + 2*8, RGB(40, 40, 40), RGB(208, 208, 208));
InitSD();
@ -615,8 +619,10 @@ void sdmmc_sdcard_init()
//Nand_Init();
Nand_Init();
DEBUGPRINT(topScreen, "nand_res ", nand_res, 10, 20 + 3*8, RGB(40, 40, 40), RGB(208, 208, 208));
SD_Init();
if (SD_Init() != 0) return FALSE;
DEBUGPRINT(topScreen, "sd_res ", sd_res, 10, 20 + 4*8, RGB(40, 40, 40), RGB(208, 208, 208));
return TRUE;
}
int sdmmc_get_cid( int isNand, uint32_t *info)

View File

@ -122,7 +122,7 @@ extern "C" {
uint32_t res;
} mmcdevice;
void sdmmc_sdcard_init();
int sdmmc_sdcard_init();
int sdmmc_sdcard_readsector(uint32_t sector_no, uint8_t *out);
int sdmmc_sdcard_readsectors(uint32_t sector_no, uint32_t numsectors, uint8_t *out);
int sdmmc_sdcard_writesector(uint32_t sector_no, uint8_t *in);