Skip to content

Commit 78728dc

Browse files
projectgusdpgeorge
authored andcommitted
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 <[email protected]>
1 parent 731f7ad commit 78728dc

File tree

1 file changed

+13
-11
lines changed

1 file changed

+13
-11
lines changed

ports/stm32/sdcard.c

+13-11
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,8 @@
158158

159159
static uint8_t pyb_sdmmc_flags;
160160

161+
#define TIMEOUT_MS 30000
162+
161163
// TODO: I think that as an optimization, we can allocate these dynamically
162164
// if an sd card is detected. This will save approx 260 bytes of RAM
163165
// when no sdcard was being used.
@@ -441,7 +443,7 @@ static void sdcard_reset_periph(void) {
441443
SDIO->ICR = SDMMC_STATIC_FLAGS;
442444
}
443445

444-
static HAL_StatusTypeDef sdcard_wait_finished(uint32_t timeout) {
446+
static HAL_StatusTypeDef sdcard_wait_finished(void) {
445447
// Wait for HAL driver to be ready (eg for DMA to finish)
446448
uint32_t start = HAL_GetTick();
447449
for (;;) {
@@ -463,7 +465,7 @@ static HAL_StatusTypeDef sdcard_wait_finished(uint32_t timeout) {
463465
}
464466
__WFI();
465467
enable_irq(irq_state);
466-
if (HAL_GetTick() - start >= timeout) {
468+
if (HAL_GetTick() - start >= TIMEOUT_MS) {
467469
return HAL_TIMEOUT;
468470
}
469471
}
@@ -490,7 +492,7 @@ static HAL_StatusTypeDef sdcard_wait_finished(uint32_t timeout) {
490492
if (!(state == HAL_SD_CARD_SENDING || state == HAL_SD_CARD_RECEIVING || state == HAL_SD_CARD_PROGRAMMING)) {
491493
return HAL_ERROR;
492494
}
493-
if (HAL_GetTick() - start >= timeout) {
495+
if (HAL_GetTick() - start >= TIMEOUT_MS) {
494496
return HAL_TIMEOUT;
495497
}
496498
__WFI();
@@ -569,7 +571,7 @@ mp_uint_t sdcard_read_blocks(uint8_t *dest, uint32_t block_num, uint32_t num_blo
569571
err = HAL_SD_ReadBlocks_DMA(&sdmmc_handle.sd, dest, block_num, num_blocks);
570572
}
571573
if (err == HAL_OK) {
572-
err = sdcard_wait_finished(60000);
574+
err = sdcard_wait_finished();
573575
}
574576

575577
#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
588590
} else {
589591
#if MICROPY_HW_ENABLE_MMCARD
590592
if (pyb_sdmmc_flags & PYB_SDMMC_FLAG_MMC) {
591-
err = HAL_MMC_ReadBlocks(&sdmmc_handle.mmc, dest, block_num, num_blocks, 60000);
593+
err = HAL_MMC_ReadBlocks(&sdmmc_handle.mmc, dest, block_num, num_blocks, TIMEOUT_MS);
592594
} else
593595
#endif
594596
{
595-
err = HAL_SD_ReadBlocks(&sdmmc_handle.sd, dest, block_num, num_blocks, 60000);
597+
err = HAL_SD_ReadBlocks(&sdmmc_handle.sd, dest, block_num, num_blocks, TIMEOUT_MS);
596598
}
597599
if (err == HAL_OK) {
598-
err = sdcard_wait_finished(60000);
600+
err = sdcard_wait_finished();
599601
}
600602
}
601603

@@ -662,7 +664,7 @@ mp_uint_t sdcard_write_blocks(const uint8_t *src, uint32_t block_num, uint32_t n
662664
err = HAL_SD_WriteBlocks_DMA(&sdmmc_handle.sd, (uint8_t *)src, block_num, num_blocks);
663665
}
664666
if (err == HAL_OK) {
665-
err = sdcard_wait_finished(60000);
667+
err = sdcard_wait_finished();
666668
}
667669

668670
#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
681683
} else {
682684
#if MICROPY_HW_ENABLE_MMCARD
683685
if (pyb_sdmmc_flags & PYB_SDMMC_FLAG_MMC) {
684-
err = HAL_MMC_WriteBlocks(&sdmmc_handle.mmc, (uint8_t *)src, block_num, num_blocks, 60000);
686+
err = HAL_MMC_WriteBlocks(&sdmmc_handle.mmc, (uint8_t *)src, block_num, num_blocks, TIMEOUT_MS);
685687
} else
686688
#endif
687689
{
688-
err = HAL_SD_WriteBlocks(&sdmmc_handle.sd, (uint8_t *)src, block_num, num_blocks, 60000);
690+
err = HAL_SD_WriteBlocks(&sdmmc_handle.sd, (uint8_t *)src, block_num, num_blocks, TIMEOUT_MS);
689691
}
690692
if (err == HAL_OK) {
691-
err = sdcard_wait_finished(60000);
693+
err = sdcard_wait_finished();
692694
}
693695
}
694696

0 commit comments

Comments
 (0)