From e9054ef65ad518cca6d792d9db767e19b3c60e3b Mon Sep 17 00:00:00 2001 From: Gabriel Somlo Date: Fri, 27 Mar 2020 07:01:02 -0400 Subject: [PATCH] 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 --- litex/soc/software/libbase/spisdcard.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/litex/soc/software/libbase/spisdcard.c b/litex/soc/software/libbase/spisdcard.c index 0befe993b..ab6cbe039 100644 --- a/litex/soc/software/libbase/spisdcard.c +++ b/litex/soc/software/libbase/spisdcard.c @@ -20,6 +20,7 @@ #include #include #include +#include #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 ); r = spi_read_rbyte(); timeout--; + busy_wait(20); } while ((r != 0x00) && (timeout>0)); if(r!=0x00) return FAILURE;