Browse Source

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 <damien@micropython.org>
pull/8082/head
Damien George 3 years ago
parent
commit
6995cf03dd
  1. 3
      ports/stm32/boards/PYBD_SF2/mpconfigboard.h
  2. 8
      ports/stm32/sdcard.c

3
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)

8
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

Loading…
Cancel
Save