summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAngus Gratton <angus@redyak.com.au>2025-02-18 16:43:58 +1100
committerDamien George <damien@micropython.org>2025-02-26 10:42:28 +1100
commit78728dc94abf9482d07efb3056d03ff6d41d7b1a (patch)
tree20411df9523190c3f107d92ed29bc346383757ed
parent731f7adf4f4541a36b32d59087148f78b39d7a27 (diff)
stm32/sdcard: Drop the pyb.SDCard timeout from 60 to 30 seconds.
60 seconds is long enough that the USB serial connection drops out before it times out (at least on my computer). Also refactor out the timeout argument from sdcard_wait_finished, to try and save a little code size. This work was funded through GitHub Sponsors. Signed-off-by: Angus Gratton <angus@redyak.com.au>
-rw-r--r--ports/stm32/sdcard.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/ports/stm32/sdcard.c b/ports/stm32/sdcard.c
index eef6548dd..706d6315c 100644
--- a/ports/stm32/sdcard.c
+++ b/ports/stm32/sdcard.c
@@ -158,6 +158,8 @@
static uint8_t pyb_sdmmc_flags;
+#define TIMEOUT_MS 30000
+
// TODO: I think that as an optimization, we can allocate these dynamically
// if an sd card is detected. This will save approx 260 bytes of RAM
// when no sdcard was being used.
@@ -441,7 +443,7 @@ static void sdcard_reset_periph(void) {
SDIO->ICR = SDMMC_STATIC_FLAGS;
}
-static HAL_StatusTypeDef sdcard_wait_finished(uint32_t timeout) {
+static HAL_StatusTypeDef sdcard_wait_finished(void) {
// Wait for HAL driver to be ready (eg for DMA to finish)
uint32_t start = HAL_GetTick();
for (;;) {
@@ -463,7 +465,7 @@ static HAL_StatusTypeDef sdcard_wait_finished(uint32_t timeout) {
}
__WFI();
enable_irq(irq_state);
- if (HAL_GetTick() - start >= timeout) {
+ if (HAL_GetTick() - start >= TIMEOUT_MS) {
return HAL_TIMEOUT;
}
}
@@ -490,7 +492,7 @@ static HAL_StatusTypeDef sdcard_wait_finished(uint32_t timeout) {
if (!(state == HAL_SD_CARD_SENDING || state == HAL_SD_CARD_RECEIVING || state == HAL_SD_CARD_PROGRAMMING)) {
return HAL_ERROR;
}
- if (HAL_GetTick() - start >= timeout) {
+ if (HAL_GetTick() - start >= TIMEOUT_MS) {
return HAL_TIMEOUT;
}
__WFI();
@@ -569,7 +571,7 @@ mp_uint_t sdcard_read_blocks(uint8_t *dest, uint32_t block_num, uint32_t num_blo
err = HAL_SD_ReadBlocks_DMA(&sdmmc_handle.sd, dest, block_num, num_blocks);
}
if (err == HAL_OK) {
- err = sdcard_wait_finished(60000);
+ err = sdcard_wait_finished();
}
#if SDIO_USE_GPDMA
@@ -588,14 +590,14 @@ mp_uint_t sdcard_read_blocks(uint8_t *dest, uint32_t block_num, uint32_t num_blo
} else {
#if MICROPY_HW_ENABLE_MMCARD
if (pyb_sdmmc_flags & PYB_SDMMC_FLAG_MMC) {
- err = HAL_MMC_ReadBlocks(&sdmmc_handle.mmc, dest, block_num, num_blocks, 60000);
+ err = HAL_MMC_ReadBlocks(&sdmmc_handle.mmc, dest, block_num, num_blocks, TIMEOUT_MS);
} else
#endif
{
- err = HAL_SD_ReadBlocks(&sdmmc_handle.sd, dest, block_num, num_blocks, 60000);
+ err = HAL_SD_ReadBlocks(&sdmmc_handle.sd, dest, block_num, num_blocks, TIMEOUT_MS);
}
if (err == HAL_OK) {
- err = sdcard_wait_finished(60000);
+ err = sdcard_wait_finished();
}
}
@@ -662,7 +664,7 @@ mp_uint_t sdcard_write_blocks(const uint8_t *src, uint32_t block_num, uint32_t n
err = HAL_SD_WriteBlocks_DMA(&sdmmc_handle.sd, (uint8_t *)src, block_num, num_blocks);
}
if (err == HAL_OK) {
- err = sdcard_wait_finished(60000);
+ err = sdcard_wait_finished();
}
#if SDIO_USE_GPDMA
@@ -681,14 +683,14 @@ mp_uint_t sdcard_write_blocks(const uint8_t *src, uint32_t block_num, uint32_t n
} else {
#if MICROPY_HW_ENABLE_MMCARD
if (pyb_sdmmc_flags & PYB_SDMMC_FLAG_MMC) {
- err = HAL_MMC_WriteBlocks(&sdmmc_handle.mmc, (uint8_t *)src, block_num, num_blocks, 60000);
+ err = HAL_MMC_WriteBlocks(&sdmmc_handle.mmc, (uint8_t *)src, block_num, num_blocks, TIMEOUT_MS);
} else
#endif
{
- err = HAL_SD_WriteBlocks(&sdmmc_handle.sd, (uint8_t *)src, block_num, num_blocks, 60000);
+ err = HAL_SD_WriteBlocks(&sdmmc_handle.sd, (uint8_t *)src, block_num, num_blocks, TIMEOUT_MS);
}
if (err == HAL_OK) {
- err = sdcard_wait_finished(60000);
+ err = sdcard_wait_finished();
}
}