Skip to content

Commit

Permalink
stm32/sdcard: Add config option to force MM card capacity.
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
dpgeorge committed Dec 13, 2021
1 parent b26704a commit 6995cf0
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 2 deletions.
3 changes: 3 additions & 0 deletions ports/stm32/boards/PYBD_SF2/mpconfigboard.h
Expand Up @@ -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)
Expand Down
8 changes: 6 additions & 2 deletions ports/stm32/sdcard.c
Expand Up @@ -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
Expand Down

0 comments on commit 6995cf0

Please sign in to comment.