altos: Shorten SD initialization timeouts.
authorKeith Packard <keithp@keithp.com>
Tue, 2 Apr 2013 23:41:29 +0000 (16:41 -0700)
committerKeith Packard <keithp@keithp.com>
Tue, 2 Apr 2013 23:41:29 +0000 (16:41 -0700)
This makes failure when no card is present much quicker.

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

index 59ac94008f84aafb6974f903923caa649e0ad570..6314a30c95f876ce4a196208693b59261cc1b25f 100644 (file)
@@ -30,7 +30,7 @@ extern uint8_t ao_radio_mutex;
 #define ao_sdcard_deselect()           ao_gpio_set(AO_SDCARD_SPI_CS_PORT,AO_SDCARD_SPI_CS_PIN,AO_SDCARD_SPI_CS,1)
 
 /* Include SD card commands */
 #define ao_sdcard_deselect()           ao_gpio_set(AO_SDCARD_SPI_CS_PORT,AO_SDCARD_SPI_CS_PIN,AO_SDCARD_SPI_CS,1)
 
 /* Include SD card commands */
-#define SDCARD_DEBUG   1
+#define SDCARD_DEBUG   0
 
 /* Spew SD tracing */
 #define SDCARD_TRACE   0
 
 /* Spew SD tracing */
 #define SDCARD_TRACE   0
@@ -326,11 +326,11 @@ ao_sdcard_setup(void)
        ao_sdcard_send_fixed(0xff, 10);
 
        /* Reset the card and get it into SPI mode */
        ao_sdcard_send_fixed(0xff, 10);
 
        /* Reset the card and get it into SPI mode */
-       for (i = 0; i < SDCARD_IDLE_WAIT; i++) {
+       for (i = 0; i < SDCARD_IDLE_RETRY; i++) {
                if (ao_sdcard_go_idle_state() == SDCARD_STATUS_IDLE_STATE)
                        break;
        }
                if (ao_sdcard_go_idle_state() == SDCARD_STATUS_IDLE_STATE)
                        break;
        }
-       if (i == SDCARD_IDLE_WAIT)
+       if (i == SDCARD_IDLE_RETRY)
                goto bail;
 
        /* Figure out what kind of card we have */
                goto bail;
 
        /* Figure out what kind of card we have */
@@ -346,14 +346,14 @@ ao_sdcard_setup(void)
                        sdver2 = 1;
                }
 
                        sdver2 = 1;
                }
 
-               for (i = 0; i < SDCARD_IDLE_WAIT; i++) {
+               for (i = 0; i < SDCARD_IDLE_RETRY; i++) {
                        ret = ao_sdcard_app_send_op_cond(arg);
                        if (ret != SDCARD_STATUS_IDLE_STATE)
                                break;
                }
                if (ret != SDCARD_STATUS_READY_STATE) {
                        /* MMC */
                        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_WAIT; i++) {
+                       for (i = 0; i < SDCARD_IDLE_RETRY; i++) {
                                ret = ao_sdcard_send_op_cond();
                                if (ret != SDCARD_STATUS_IDLE_STATE)
                                        break;
                                ret = ao_sdcard_send_op_cond();
                                if (ret != SDCARD_STATUS_IDLE_STATE)
                                        break;
@@ -396,11 +396,11 @@ _ao_sdcard_reset(void)
        uint8_t ret;
        uint8_t response[10];
 
        uint8_t ret;
        uint8_t response[10];
 
-       for (i = 0; i < SDCARD_IDLE_WAIT; i++) {
+       for (i = 0; i < SDCARD_IDLE_RETRY; i++) {
                if (ao_sdcard_go_idle_state() == SDCARD_STATUS_IDLE_STATE)
                        break;
        }
                if (ao_sdcard_go_idle_state() == SDCARD_STATUS_IDLE_STATE)
                        break;
        }
-       if (i == SDCARD_IDLE_WAIT) {
+       if (i == SDCARD_IDLE_RETRY) {
                ret = 0x3f;
                goto bail;
        }
                ret = 0x3f;
                goto bail;
        }
@@ -418,7 +418,7 @@ _ao_sdcard_reset(void)
                        sdver2 = 1;
                }
 
                        sdver2 = 1;
                }
 
-               for (i = 0; i < SDCARD_IDLE_WAIT; i++) {
+               for (i = 0; i < SDCARD_IDLE_RETRY; i++) {
                        ret = ao_sdcard_app_send_op_cond(arg);
                        if (ret != SDCARD_STATUS_IDLE_STATE)
                                break;
                        ret = ao_sdcard_app_send_op_cond(arg);
                        if (ret != SDCARD_STATUS_IDLE_STATE)
                                break;
@@ -426,7 +426,7 @@ _ao_sdcard_reset(void)
 
                if (ret != SDCARD_STATUS_READY_STATE) {
                        /* MMC */
 
                if (ret != SDCARD_STATUS_READY_STATE) {
                        /* MMC */
-                       for (i = 0; i < SDCARD_IDLE_WAIT; i++) {
+                       for (i = 0; i < SDCARD_IDLE_RETRY; i++) {
                                ret = ao_sdcard_send_op_cond();
                                if (ret != SDCARD_STATUS_IDLE_STATE)
                                        break;
                                ret = ao_sdcard_send_op_cond();
                                if (ret != SDCARD_STATUS_IDLE_STATE)
                                        break;
index e55a3dec38c87c15d3afc51d5baa46fdf17bc480..0d1464b379c0cab70af714bfe374b81615bea201 100644 (file)
@@ -65,10 +65,10 @@ ao_sdcard_init(void);
 #define SDCARD_DATA_RES_MASK           0x1f
 #define SDCARD_DATA_RES_ACCEPTED       0x05
 
 #define SDCARD_DATA_RES_MASK           0x1f
 #define SDCARD_DATA_RES_ACCEPTED       0x05
 
-#define SDCARD_CMD_TIMEOUT             AO_MS_TO_TICKS(100)
-#define SDCARD_BUSY_TIMEOUT            AO_MS_TO_TICKS(100)
-#define SDCARD_IDLE_WAIT               10000
-#define SDCARD_BLOCK_TIMEOUT           AO_MS_TO_TICKS(1000)
+#define SDCARD_CMD_TIMEOUT             AO_MS_TO_TICKS(20)
+#define SDCARD_BUSY_TIMEOUT            AO_MS_TO_TICKS(20)
+#define SDCARD_BLOCK_TIMEOUT           AO_MS_TO_TICKS(200)
+#define SDCARD_IDLE_RETRY              10
 
 enum ao_sdtype {
        ao_sdtype_unknown,
 
 enum ao_sdtype {
        ao_sdtype_unknown,