X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fdrivers%2Fao_sdcard.c;h=47188ef3cf171ade2d34e5d6e1d1155e8ca149bd;hb=3d5db24708b37d86eac187169e2553a408dfeb83;hp=6314a30c95f876ce4a196208693b59261cc1b25f;hpb=96c32125a780ad6b39c015f4abbae07fead68582;p=fw%2Faltos diff --git a/src/drivers/ao_sdcard.c b/src/drivers/ao_sdcard.c index 6314a30c..47188ef3 100644 --- a/src/drivers/ao_sdcard.c +++ b/src/drivers/ao_sdcard.c @@ -18,11 +18,18 @@ #include "ao.h" #include "ao_sdcard.h" +#if HAS_RADIO extern uint8_t ao_radio_mutex; +#define get_radio() ao_mutex_get(&ao_radio_mutex) +#define put_radio() ao_mutex_put(&ao_radio_mutex) +#else +#define get_radio() +#define put_radio() +#endif -#define ao_sdcard_get_slow() do { ao_mutex_get(&ao_radio_mutex); ao_spi_get(AO_SDCARD_SPI_BUS, AO_SPI_SPEED_250kHz); } while (0) -#define ao_sdcard_get() do { ao_mutex_get(&ao_radio_mutex); ao_spi_get(AO_SDCARD_SPI_BUS, AO_SPI_SPEED_FAST); } while (0) -#define ao_sdcard_put() do { ao_spi_put(AO_SDCARD_SPI_BUS); ao_mutex_put(&ao_radio_mutex); } while (0) +#define ao_sdcard_get_slow() do { get_radio(); ao_spi_get(AO_SDCARD_SPI_BUS, AO_SPI_SPEED_250kHz); } while (0) +#define ao_sdcard_get() do { get_radio(); ao_spi_get(AO_SDCARD_SPI_BUS, AO_SPI_SPEED_FAST); } while (0) +#define ao_sdcard_put() do { ao_spi_put(AO_SDCARD_SPI_BUS); put_radio(); } while (0) #define ao_sdcard_send_fixed(d,l) ao_spi_send_fixed((d), (l), AO_SDCARD_SPI_BUS) #define ao_sdcard_send(d,l) ao_spi_send((d), (l), AO_SDCARD_SPI_BUS) #define ao_sdcard_recv(d,l) ao_spi_recv((d), (l), AO_SDCARD_SPI_BUS) @@ -49,13 +56,13 @@ static enum ao_sdtype sdtype; #if SDCARD_TRACE #define DBG(...) printf(__VA_ARGS__) #else -#define DBG(...) +#define DBG(...) (void) 0 #endif #if SDCARD_WARN #define WARN(...) printf(__VA_ARGS__) #else -#define WARN(...) +#define WARN(...) (void) 0 #endif #define later(x,y) ((int16_t) ((x) - (y)) >= 0) @@ -93,7 +100,6 @@ ao_sdcard_send_cmd(uint8_t cmd, uint32_t arg) { uint8_t data[6]; uint8_t reply; - int i; uint16_t timeout; DBG ("\tsend_cmd %d arg %08x\n", cmd, arg); @@ -104,7 +110,7 @@ ao_sdcard_send_cmd(uint8_t cmd, uint32_t arg) return SDCARD_STATUS_TIMEOUT; } - data[0] = cmd & 0x3f | 0x40; + data[0] = (cmd & 0x3f) | 0x40; data[1] = arg >> 24; data[2] = arg >> 16; data[3] = arg >> 8; @@ -346,14 +352,16 @@ ao_sdcard_setup(void) sdver2 = 1; } - for (i = 0; i < SDCARD_IDLE_RETRY; i++) { + for (i = 0; i < SDCARD_OP_COND_RETRY; i++) { + ao_delay(AO_MS_TO_TICKS(10)); ret = ao_sdcard_app_send_op_cond(arg); if (ret != SDCARD_STATUS_IDLE_STATE) break; } if (ret != SDCARD_STATUS_READY_STATE) { /* MMC */ - for (i = 0; i < SDCARD_IDLE_RETRY; i++) { + for (i = 0; i < SDCARD_OP_COND_RETRY; i++) { + ao_delay(AO_MS_TO_TICKS(10)); ret = ao_sdcard_send_op_cond(); if (ret != SDCARD_STATUS_IDLE_STATE) break; @@ -393,7 +401,7 @@ static uint8_t _ao_sdcard_reset(void) { int i; - uint8_t ret; + uint8_t ret = 0x3f; uint8_t response[10]; for (i = 0; i < SDCARD_IDLE_RETRY; i++) { @@ -410,12 +418,12 @@ _ao_sdcard_reset(void) */ if (ao_sdcard_send_if_cond(0x1aa, response) == SDCARD_STATUS_IDLE_STATE) { uint32_t arg = 0; - uint8_t sdver2 = 0; +// uint8_t sdver2 = 0; /* Check for SD version 2 */ if ((response[2] & 0xf) == 1 && response[3] == 0xaa) { arg = 0x40000000; - sdver2 = 1; +// sdver2 = 1; } for (i = 0; i < SDCARD_IDLE_RETRY; i++) { @@ -478,7 +486,7 @@ ao_sdcard_wait_block_start(void) uint8_t ao_sdcard_read_block(uint32_t block, uint8_t *data) { - uint8_t ret; + uint8_t ret = 0x3f; uint8_t start_block; uint8_t crc[2]; int tries; @@ -509,6 +517,7 @@ ao_sdcard_read_block(uint32_t block, uint8_t *data) WARN ("read block command failed %d status %02x\n", block, ret); status = _ao_sdcard_send_status(); WARN ("\tstatus now %04x\n", status); + (void) status; goto bail; } @@ -558,8 +567,6 @@ ao_sdcard_write_block(uint32_t block, uint8_t *data) uint8_t response[1]; uint8_t start_block[8]; uint16_t status; - static uint8_t check_data[512]; - int i; int tries; ao_sdcard_lock(); @@ -603,7 +610,7 @@ ao_sdcard_write_block(uint32_t block, uint8_t *data) if ((response[0] & SDCARD_DATA_RES_MASK) != SDCARD_DATA_RES_ACCEPTED) { int i; WARN("Data not accepted, response"); - for (i = 0; i < sizeof (response); i++) + for (i = 0; i < (int) sizeof (response); i++) WARN(" %02x", response[i]); WARN("\n"); ret = 0x3f;