liblitesdcard/sdcard: add timeout when waiting card to be ready.
authorFlorent Kermarrec <florent@enjoy-digital.fr>
Mon, 6 Jul 2020 18:07:06 +0000 (20:07 +0200)
committerFlorent Kermarrec <florent@enjoy-digital.fr>
Mon, 6 Jul 2020 18:07:20 +0000 (20:07 +0200)
litex/soc/software/liblitesdcard/sdcard.c

index 48959b50fcf5ba2a698b427b6f4d661a3505abc0..440c8f61ce16fbd84ff0cd8a93529b025541fbf7 100644 (file)
@@ -448,6 +448,7 @@ void sdcard_decode_csd(void) {
 
 int sdcard_init(void) {
        unsigned short rca;
+    uint16_t timeout;
 
        /* initialize freq */
        sdcard_set_clk_freq(16000000);
@@ -461,15 +462,18 @@ int sdcard_init(void) {
        busy_wait(1);
        sdcard_send_ext_csd();
        /* wait for card to be ready */
-       /* FIXME: 1.8v support */
-       for(;;) {
+       timeout = 10;
+       while (timeout) {
                sdcard_app_cmd(0);
                sdcard_app_send_op_cond(1, 0);
                if (sdcard_response[3] & 0x80000000) {
                        break;
                }
                busy_wait(1);
+               timeout--;
        }
+       if (timeout == 0)
+               return 0;
 
        /* send identification */
        sdcard_all_send_cid();