software/libbase/spisdcard: add delay to goidle loop

In `spi_sdcard_goidle()`, insert a `busy_wait()` into the CMD55+ACMD41
loop to avoid exhausting the retry counter before the card has a chance
to be ready (required on the trellisboard, also tested OK on nexys4ddr).

Signed-off-by: Gabriel Somlo <gsomlo@gmail.com>
This commit is contained in:
Gabriel Somlo 2020-03-27 07:01:02 -04:00
parent c6b6dee2e7
commit e9054ef65a
1 changed files with 2 additions and 0 deletions

View File

@ -20,6 +20,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <time.h> #include <time.h>
#include <string.h> #include <string.h>
#include <system.h>
#define USE_SPISCARD_RECLOCKING #define USE_SPISCARD_RECLOCKING
@ -217,6 +218,7 @@ uint8_t spi_sdcard_goidle(void)
spi_write_byte( 0xff ); spi_write_byte( 0x69 ); spi_write_byte( 0x40 ); spi_write_byte( 0x00 ); spi_write_byte( 0x00 ); spi_write_byte( 0x00 ); spi_write_byte( 0x00 ); spi_write_byte( 0xff ); spi_write_byte( 0x69 ); spi_write_byte( 0x40 ); spi_write_byte( 0x00 ); spi_write_byte( 0x00 ); spi_write_byte( 0x00 ); spi_write_byte( 0x00 );
r = spi_read_rbyte(); r = spi_read_rbyte();
timeout--; timeout--;
busy_wait(20);
} while ((r != 0x00) && (timeout>0)); } while ((r != 0x00) && (timeout>0));
if(r!=0x00) return FAILURE; if(r!=0x00) return FAILURE;