From 5beba178f212e3b1f9e00bf0c44627c9e82a6139 Mon Sep 17 00:00:00 2001 From: Florent Kermarrec Date: Wed, 10 Jun 2020 09:15:12 +0200 Subject: [PATCH] software/libsdcard/spisdcard: add and use busy_wait_us to optimize speed. --- litex/soc/software/liblitesdcard/spisdcard.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/litex/soc/software/liblitesdcard/spisdcard.c b/litex/soc/software/liblitesdcard/spisdcard.c index 069d638b1..b6bf9a3f6 100644 --- a/litex/soc/software/liblitesdcard/spisdcard.c +++ b/litex/soc/software/liblitesdcard/spisdcard.c @@ -114,15 +114,25 @@ static void spisdcardread_bytes(uint8_t* buf, uint16_t n) { /* SPI SDCard blocks Xfer functions */ /*-----------------------------------------------------------------------*/ +static void busy_wait_us(unsigned int us) +{ + timer0_en_write(0); + timer0_reload_write(0); + timer0_load_write(CONFIG_CLOCK_FREQUENCY/1000000*us); + timer0_en_write(1); + timer0_update_value_write(1); + while(timer0_value_read()) timer0_update_value_write(1); +} + static uint8_t spisdcardreceive_block(uint8_t *buf) { - uint16_t timeout; + uint32_t timeout; /* Wait 100ms for a start of block */ - timeout = 100; + timeout = 100000; while(timeout > 0) { if (spi_xfer(0xff) == 0xfe) break; - busy_wait(1); + busy_wait_us(1); timeout--; } if (timeout == 0)