From 072bd07f178998f2c88cd2ceef86dea7902a1764 Mon Sep 17 00:00:00 2001
From: Damien George <damien.p.george@gmail.com>
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 a628d3e45..63a0bac96 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
-- 
GitLab