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:
parent
c6b6dee2e7
commit
e9054ef65a
|
@ -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;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue