summaryrefslogtreecommitdiff
path: root/fw/fe310/eos/dev/drv/sdcard.c
diff options
context:
space:
mode:
Diffstat (limited to 'fw/fe310/eos/dev/drv/sdcard.c')
-rw-r--r--fw/fe310/eos/dev/drv/sdcard.c33
1 files changed, 17 insertions, 16 deletions
diff --git a/fw/fe310/eos/dev/drv/sdcard.c b/fw/fe310/eos/dev/drv/sdcard.c
index 96b01ae..7d21b3d 100644
--- a/fw/fe310/eos/dev/drv/sdcard.c
+++ b/fw/fe310/eos/dev/drv/sdcard.c
@@ -126,18 +126,18 @@ static void sdc_buf_recv(unsigned char *buffer, uint16_t len) {
}
static void sdc_select(void) {
- sdc_spi_cs_set();
+ sdc_spi_set_cs();
sdc_spi_xchg8(0xff, 0);
}
static void sdc_deselect(void) {
- sdc_spi_cs_clear();
+ sdc_spi_clear_cs();
sdc_spi_xchg8(0xff, 0);
}
static int sdc_xchg_cmd(uint8_t cmd, uint32_t arg, uint8_t flags) {
int i;
- uint8_t ret;
+ uint8_t rv;
uint8_t crc = 0x7f;
cmd |= 0x40;
@@ -156,11 +156,11 @@ static int sdc_xchg_cmd(uint8_t cmd, uint32_t arg, uint8_t flags) {
i = SDC_NCR;
do {
- ret = sdc_xchg8(0xff);
- } while ((ret & 0x80) && --i);
- if (ret & 0x80) return SDC_ERR_BUSY;
+ rv = sdc_xchg8(0xff);
+ } while ((rv & 0x80) && --i);
+ if (rv & 0x80) return SDC_ERR_BUSY;
- return ret;
+ return rv;
}
static int sdc_ready(uint32_t timeout) {
@@ -256,11 +256,12 @@ int sdc_init(uint32_t timeout) {
uint32_t start;
start = sdc_get_tick();
- sdc_sleep(5);
- for (i=10; i--;) sdc_xchg8(0xff); /* 80 dummy cycles */
+ do {
+ if (sdc_tdelta_ms(start) > timeout) return SDC_ERR_BUSY;
+ for (i=10; i--;) sdc_xchg8(0xff); /* 80 dummy cycles */
- rv = sdc_cmd(GO_IDLE_STATE, 0, SDC_CMD_FLAG_CRC, SDC_TIMEOUT_CMD);
- if (rv != SDC_R1_IDLE_STATE) return SDC_RV2ERR(rv);
+ rv = sdc_cmd(GO_IDLE_STATE, 0, SDC_CMD_FLAG_CRC, SDC_TIMEOUT_CMD);
+ } while (rv != SDC_R1_IDLE_STATE);
sdc_select();
rv = sdc_cmd(SEND_IF_COND, 0x1aa, SDC_CMD_FLAG_CRC | SDC_CMD_FLAG_NOCS, sdc_nto(start, timeout));
@@ -341,11 +342,11 @@ int sdc_init(uint32_t timeout) {
if (rv) return rv;
#ifdef SDC_DEBUG
- printf("SDCARD CSD: ");
+ SDC_LOG(SDC_LOG_INFO, "SDCARD CSD: ");
for (i=0; i<16; i++) {
- printf("%.2x ", csd[i]);
+ SDC_LOG(SDC_LOG_INFO, "%.2x ", csd[i]);
}
- printf("\n");
+ SDC_LOG(SDC_LOG_INFO, "\n");
#endif
if (csd[10] & 0x40) _type |= SDC_CAP_ERASE_EN;
}
@@ -366,7 +367,7 @@ void sdc_clear(void) {
sdc_type = SDC_TYPE_NONE;
}
-int sdc_get_sect_count(uint32_t timeout, uint32_t *sectors) {
+int sdc_get_sect_count(uint32_t *sectors, uint32_t timeout) {
int rv;
uint8_t csd[16];
uint32_t start;
@@ -393,7 +394,7 @@ int sdc_get_sect_count(uint32_t timeout, uint32_t *sectors) {
return SDC_OK;
}
-int sdc_get_blk_size(uint32_t timeout, uint32_t *size) {
+int sdc_get_blk_size(uint32_t *size, uint32_t timeout) {
int rv;
uint8_t rbl[64]; /* SD Status or CSD register */
uint32_t start;