altos: Delay while waking up SD card a bit
authorKeith Packard <keithp@keithp.com>
Fri, 12 Apr 2013 08:55:33 +0000 (01:55 -0700)
committerKeith Packard <keithp@keithp.com>
Fri, 12 Apr 2013 08:55:33 +0000 (01:55 -0700)
This seems to make bringing the card from idle to ready mode more
reliable. If you spam the card with requests, it will eventually
whinge and shut down communications.

Signed-off-by: Keith Packard <keithp@keithp.com>
src/drivers/ao_sdcard.c
src/drivers/ao_sdcard.h

index 6314a30c95f876ce4a196208693b59261cc1b25f..c13017f07b1c6ad5f3b6b0523d909a859678c8e8 100644 (file)
@@ -346,14 +346,16 @@ ao_sdcard_setup(void)
                        sdver2 = 1;
                }
 
-               for (i = 0; i < SDCARD_IDLE_RETRY; i++) {
+               for (i = 0; i < SDCARD_OP_COND_RETRY; i++) {
+                       ao_delay(AO_MS_TO_TICKS(10));
                        ret = ao_sdcard_app_send_op_cond(arg);
                        if (ret != SDCARD_STATUS_IDLE_STATE)
                                break;
                }
                if (ret != SDCARD_STATUS_READY_STATE) {
                        /* MMC */
-                       for (i = 0; i < SDCARD_IDLE_RETRY; i++) {
+                       for (i = 0; i < SDCARD_OP_COND_RETRY; i++) {
+                               ao_delay(AO_MS_TO_TICKS(10));
                                ret = ao_sdcard_send_op_cond();
                                if (ret != SDCARD_STATUS_IDLE_STATE)
                                        break;
index 0d1464b379c0cab70af714bfe374b81615bea201..50b70c73fd24a1d63d2dc67e226fa34915586f21 100644 (file)
@@ -69,6 +69,7 @@ ao_sdcard_init(void);
 #define SDCARD_BUSY_TIMEOUT            AO_MS_TO_TICKS(20)
 #define SDCARD_BLOCK_TIMEOUT           AO_MS_TO_TICKS(200)
 #define SDCARD_IDLE_RETRY              10
+#define SDCARD_OP_COND_RETRY           10
 
 enum ao_sdtype {
        ao_sdtype_unknown,