Commit 4a18b828 authored by Florent Kermarrec's avatar Florent Kermarrec

software/liblitesdcard/spisdcard: remove optimization on receive_block (not...

software/liblitesdcard/spisdcard: remove optimization on receive_block (not working on all configs) and increase max clk_freq to 20MHz.
parent 100aa5a4
......@@ -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) {
for (i=0; i<512; i++) {
spisdcard_control_write(8*SPI_LENGTH | SPI_START);
*buf = spisdcard_miso_read();
if (i == 512)
break;
if (i != 0)
buf++;
i++;
}
while (spisdcard_status_read() != SPI_DONE);
*buf++ = spisdcard_miso_read();
}
/* Discard CRC */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment