From 6995cf03dda98f490ab95ff90bf395a5667067d6 Mon Sep 17 00:00:00 2001 From: Damien George Date: Tue, 14 Dec 2021 00:07:34 +1100 Subject: [PATCH] stm32/sdcard: Add config option to force MM card capacity. The current ST HAL does not support reading the extended CSD so cannot correctly detect the capacity of high-capacity cards. As a workaround, the capacity can be forced via the MICROPY_HW_MMCARD_LOG_BLOCK_NBR config option. Signed-off-by: Damien George --- ports/stm32/boards/PYBD_SF2/mpconfigboard.h | 3 +++ ports/stm32/sdcard.c | 8 ++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/ports/stm32/boards/PYBD_SF2/mpconfigboard.h b/ports/stm32/boards/PYBD_SF2/mpconfigboard.h index ea0abc6ea5..9ac789a83b 100644 --- a/ports/stm32/boards/PYBD_SF2/mpconfigboard.h +++ b/ports/stm32/boards/PYBD_SF2/mpconfigboard.h @@ -181,6 +181,9 @@ extern struct _spi_bdev_t spi_bdev2; #define MICROPY_HW_SDCARD_DETECT_PRESENT (GPIO_PIN_RESET) #define MICROPY_HW_SDCARD_MOUNT_AT_BOOT (0) +// MM card: the size is hard-coded to support the WBUS-EMMC add-on +#define MICROPY_HW_MMCARD_LOG_BLOCK_NBR (7469056 + 2048) + // USB config #define MICROPY_HW_USB_FS (1) #define MICROPY_HW_USB_HS (1) diff --git a/ports/stm32/sdcard.c b/ports/stm32/sdcard.c index 4e461749ac..cb773f29db 100644 --- a/ports/stm32/sdcard.c +++ b/ports/stm32/sdcard.c @@ -309,8 +309,12 @@ STATIC HAL_StatusTypeDef sdmmc_init_mmc(void) { return status; } - // As this is an eMMC card, overwrite LogBlockNbr with actual value - sdmmc_handle.mmc.MmcCard.LogBlockNbr = 7469056 + 2048; + #ifdef MICROPY_HW_MMCARD_LOG_BLOCK_NBR + // A board can override the number of logical blocks (card capacity) if needed. + // This is needed when a card is high capacity because the extended CSD command + // is not supported by the current version of the HAL. + sdmmc_handle.mmc.MmcCard.LogBlockNbr = MICROPY_HW_MMCARD_LOG_BLOCK_NBR; + #endif #if MICROPY_HW_SDCARD_BUS_WIDTH >= 4 // Configure the SDIO bus width for 4/8-bit wide operation