diff --git a/src/ersky9x/audio.cpp b/src/ersky9x/audio.cpp index 91b903471..38704791c 100644 --- a/src/ersky9x/audio.cpp +++ b/src/ersky9x/audio.cpp @@ -481,7 +481,7 @@ void AudioQueue::playFile(const char *filename, uint8_t flags, uint8_t id) printf("playFile(\"%s\")\n", filename); fflush(stdout); #endif - if (!CardIsConnected() || (Card_state != SD_ST_MOUNTED && Card_state != SD_ST_STARTUP)) + if (Card_initialized && !sd_card_mounted()) return; CoEnterMutexSection(audioMutex); diff --git a/src/ersky9x/board.h b/src/ersky9x/board.h index 9efa39e89..b0f95ecfa 100644 --- a/src/ersky9x/board.h +++ b/src/ersky9x/board.h @@ -512,6 +512,7 @@ #define SD_ST_MOUNTED 10 extern int32_t Card_state; +extern uint32_t Card_initialized; /* #define BOARD_PSRAM_PINS PIN_EBI_DATA_BUS, PIN_EBI_NCS0, PIN_EBI_NRD, PIN_EBI_NWE, \ diff --git a/src/ersky9x/diskio.c b/src/ersky9x/diskio.c index 42cae763e..8ab79e6b7 100644 --- a/src/ersky9x/diskio.c +++ b/src/ersky9x/diskio.c @@ -70,6 +70,7 @@ uint32_t Card_ID[4] ; uint32_t Card_SCR[2] ; uint32_t Card_CSD[4] ; int32_t Card_state = SD_ST_STARTUP ; +uint32_t Card_initialized = 0; uint32_t Sd_128_resp[4] ; uint32_t Sd_rca ; uint32_t Cmd_8_resp ; @@ -801,7 +802,7 @@ void retrieveAvailableAudioFiles(); void sdPoll10mS() { - if (Card_state == SD_ST_STARTUP) + if (!Card_initialized) return; if (!CardIsConnected()) { @@ -903,21 +904,17 @@ void sdInit() sdCmd9(); sdCmd7(); // Select Card - CoTickDelay(1); // 2ms - sdAcmd51(); sdAcmd6(); // Set bus width to 4 bits, and speed to 9 MHz - CoTickDelay(1); // 2ms - // Should check the card can do this **** - if (f_mount(0, &g_FATFS_Obj) != FR_OK) { - Card_state = SD_ST_DATA; - return; - } + Card_state = SD_ST_DATA; + f_mount(0, &g_FATFS_Obj); retrieveAvailableAudioFiles(); Card_state = SD_ST_MOUNTED; + + Card_initialized = 1; } // Checks for card ready for read/write diff --git a/src/open9x.cpp b/src/open9x.cpp index a2824de52..b2c86ce6a 100644 --- a/src/open9x.cpp +++ b/src/open9x.cpp @@ -3128,7 +3128,7 @@ inline void open9xInit(OPEN9X_INIT_ARGS) doSplash(); #if defined(PCBARM) - while (Card_state == SD_ST_STARTUP) { + while (!Card_initialized) { CoTickDelay(1); // 2ms } #endif