From 072bd07f178998f2c88cd2ceef86dea7902a1764 Mon Sep 17 00:00:00 2001 From: Damien George Date: Mon, 20 Oct 2014 00:04:27 +0100 Subject: [PATCH] stmhal: Add retry to SD card init. This fixed an issue with a certain SD card sometimes not initialising first time round. See issue #822 for related, and thanks to @iabdalkader for the idea. --- stmhal/sdcard.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/stmhal/sdcard.c b/stmhal/sdcard.c index a628d3e450..63a0bac96e 100644 --- a/stmhal/sdcard.c +++ b/stmhal/sdcard.c @@ -105,10 +105,13 @@ bool sdcard_power_on(void) { sd_handle.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE; sd_handle.Init.ClockDiv = SDIO_TRANSFER_CLK_DIV; - // init the SD interface + // init the SD interface, with retry if it's not ready yet HAL_SD_CardInfoTypedef cardinfo; - if (HAL_SD_Init(&sd_handle, &cardinfo) != SD_OK) { - goto error; + for (int retry = 10; HAL_SD_Init(&sd_handle, &cardinfo) != SD_OK; retry--) { + if (retry == 0) { + goto error; + } + HAL_Delay(50); } // configure the SD bus width for wide operation