software/liblitesdcard/spisdcard: remove optimization on receive_block (not working on all configs) and increase max clk_freq to 20MHz.

This commit is contained in:
Florent Kermarrec 2020-07-20 12:28:29 +02:00
parent 100aa5a4ca
commit 4a18b828bc
1 changed files with 6 additions and 15 deletions

View File

@ -24,7 +24,7 @@
#define SPISDCARD_CLK_FREQ_INIT 400000
#endif
#ifndef SPISDCARD_CLK_FREQ
#define SPISDCARD_CLK_FREQ 12500000
#define SPISDCARD_CLK_FREQ 20000000
#endif
/*-----------------------------------------------------------------------*/
@ -40,7 +40,7 @@
static void spi_set_clk_freq(uint32_t clk_freq) {
uint32_t divider;
divider = CONFIG_CLOCK_FREQUENCY/clk_freq;
divider = CONFIG_CLOCK_FREQUENCY/clk_freq + 1;
divider = max(divider, 2);
divider = min(divider, 256);
#ifdef SPISDCARD_DEBUG
@ -135,7 +135,6 @@ static void busy_wait_us(unsigned int us)
static uint8_t spisdcardreceive_block(uint8_t *buf) {
uint16_t i;
uint8_t done;
uint32_t timeout;
/* Wait 100ms for a start of block */
@ -151,18 +150,10 @@ static uint8_t spisdcardreceive_block(uint8_t *buf) {
/* Receive block */
spisdcard_mosi_write(0xff);
i = 0;
for (;;) {
done = spisdcard_status_read() & SPI_DONE;
if (done) {
spisdcard_control_write(8*SPI_LENGTH | SPI_START);
*buf = spisdcard_miso_read();
if (i == 512)
break;
if (i != 0)
buf++;
i++;
}
for (i=0; i<512; i++) {
spisdcard_control_write(8*SPI_LENGTH | SPI_START);
while (spisdcard_status_read() != SPI_DONE);
*buf++ = spisdcard_miso_read();
}
/* Discard CRC */