diff --git a/src/main/drivers/sdcard.c b/src/main/drivers/sdcard.c index fb7fe020a..d27fb4cfe 100644 --- a/src/main/drivers/sdcard.c +++ b/src/main/drivers/sdcard.c @@ -150,7 +150,8 @@ bool sdcard_poll(void) bool sdcard_isFunctional(void) { - // sdcard_isFunctional is called from multiple places + // sdcard_isFunctional is called from multiple places, including the case of hardware implementation + // without a detect pin in which case sdcard_isInserted() always returns true. if (sdcardVTable) { return sdcardVTable->sdcard_isFunctional(); } else { diff --git a/src/main/interface/cli.c b/src/main/interface/cli.c index 358ee17b6..1cef08dfb 100644 --- a/src/main/interface/cli.c +++ b/src/main/interface/cli.c @@ -1999,7 +1999,7 @@ static void cliSdInfo(char *cmdline) return; } - if (!sdcard_isInitialized()) { + if (!sdcard_isFunctional() || !sdcard_isInitialized()) { cliPrintLine("Startup failed"); return; } diff --git a/src/main/interface/msp.c b/src/main/interface/msp.c index b1227b0fb..8407de303 100644 --- a/src/main/interface/msp.c +++ b/src/main/interface/msp.c @@ -304,8 +304,13 @@ static void serializeSDCardSummaryReply(sbuf_t *dst) sbufWriteU8(dst, state); sbufWriteU8(dst, afatfs_getLastError()); // Write free space and total space in kilobytes - sbufWriteU32(dst, afatfs_getContiguousFreeSpace() / 1024); - sbufWriteU32(dst, sdcard_getMetadata()->numBlocks / 2); // Block size is half a kilobyte + if (state == MSP_SDCARD_STATE_READY) { + sbufWriteU32(dst, afatfs_getContiguousFreeSpace() / 1024); + sbufWriteU32(dst, sdcard_getMetadata()->numBlocks / 2); // Block size is half a kilobyte + } else { + sbufWriteU32(dst, 0); + sbufWriteU32(dst, 0); + } #else sbufWriteU8(dst, 0); sbufWriteU8(dst, 0);