From f18f809cfae3aa3929adc6c631dd5c635ffc9f48 Mon Sep 17 00:00:00 2001 From: Maximilian Rehkopf Date: Wed, 17 Aug 2011 00:13:04 +0200 Subject: [PATCH] Firmware/SD: Ensure SD Card is initialized in SD mode --- src/sdnative.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/sdnative.c b/src/sdnative.c index 3c4ef0e..95abd93 100644 --- a/src/sdnative.c +++ b/src/sdnative.c @@ -27,6 +27,7 @@ #define SEND_CID 10 #define STOP_TRANSMISSION 12 #define SEND_STATUS 13 +#define GO_INACTIVE_STATE 15 #define SET_BLOCKLEN 16 #define READ_SINGLE_BLOCK 17 #define READ_MULTIPLE_BLOCK 18 @@ -199,6 +200,7 @@ static inline void wiggle_fast_pos1(void) { BITBAND(SD_CLKREG->FIOCLR, SD_CLKPIN) = 1; } + int get_and_check_datacrc(uint8_t *buf) { uint16_t crc0=0, crc1=0, crc2=0, crc3=0; uint16_t sdcrc0=0, sdcrc1=0, sdcrc2=0, sdcrc3=0; @@ -574,6 +576,12 @@ int acmd_fast(uint8_t cmd, uint32_t param, uint8_t crc, uint8_t* dat, uint8_t* r return cmd_fast(cmd, param, crc, dat, rsp); } +void sdn_checkinit(BYTE drv) { + if(disk_state == DISK_CHANGED) { + disk_initialize(drv); + } +} + int stream_datablock(uint8_t *buf) { // uint8_t datshift=8; int j=512; @@ -843,6 +851,8 @@ DRESULT sdn_initialize(BYTE drv) { wiggle_slow_neg(1); } printf("sd_init start\n"); + BITBAND(SD_DAT3REG->FIODIR, SD_DAT3PIN) = 1; + BITBAND(SD_DAT3REG->FIOSET, SD_DAT3PIN) = 1; cmd_slow(GO_IDLE_STATE, 0, 0x95, NULL, rsp); if((rsplen=cmd_slow(SEND_IF_COND, 0x000001aa, 0x87, NULL, rsp))) {