@@ -142,10 +142,16 @@ char sdCommand(uint8_t pdrv, char cmd, unsigned int arg, unsigned int* resp)
142142 }
143143
144144 if (token == 0xFF ) {
145- log_e (" no token received" );
146- break ;
145+ log_w (" no token received" );
146+ sdDeselectCard (pdrv);
147+ delay (100 );
148+ sdSelectCard (pdrv);
149+ continue ;
147150 } else if (token & 0x08 ) {
148151 log_w (" crc error" );
152+ sdDeselectCard (pdrv);
153+ delay (100 );
154+ sdSelectCard (pdrv);
149155 continue ;
150156 } else if (token > 1 ) {
151157 log_w (" token error [%u] 0x%x" , cmd, token);
@@ -443,6 +449,7 @@ DSTATUS ff_sd_initialize(uint8_t pdrv)
443449 card->spi ->beginTransaction (SPISettings (400000 , MSBFIRST, SPI_MODE0));
444450
445451 if (sdTransaction (pdrv, GO_IDLE_STATE, 0 , NULL ) != 1 ) {
452+ log_w (" GO_IDLE_STATE failed" );
446453 goto unknown_card;
447454 }
448455
@@ -451,15 +458,18 @@ DSTATUS ff_sd_initialize(uint8_t pdrv)
451458 // old card maybe
452459 card->supports_crc = false ;
453460 } else if (token != 1 ) {
461+ log_w (" CRC_ON_OFF failed: %u" , token);
454462 goto unknown_card;
455463 }
456464
457465 if (sdTransaction (pdrv, SEND_IF_COND, 0x1AA , &resp) == 1 ) {
458466 if ((resp & 0xFFF ) != 0x1AA ) {
467+ log_w (" SEND_IF_COND failed: %03X" , resp & 0xFFF );
459468 goto unknown_card;
460469 }
461470
462471 if (sdTransaction (pdrv, READ_OCR, 0 , &resp) != 1 || !(resp & (1 << 20 ))) {
472+ log_w (" READ_OCR failed: %X" , resp);
463473 goto unknown_card;
464474 }
465475
@@ -469,6 +479,7 @@ DSTATUS ff_sd_initialize(uint8_t pdrv)
469479 } while (token == 1 && (millis () - start) < 1000 );
470480
471481 if (token) {
482+ log_w (" APP_OP_COND failed: %u" , token);
472483 goto unknown_card;
473484 }
474485
@@ -479,10 +490,12 @@ DSTATUS ff_sd_initialize(uint8_t pdrv)
479490 card->type = CARD_SD;
480491 }
481492 } else {
493+ log_w (" READ_OCR failed: %X" , resp);
482494 goto unknown_card;
483495 }
484496 } else {
485497 if (sdTransaction (pdrv, READ_OCR, 0 , &resp) != 1 || !(resp & (1 << 20 ))) {
498+ log_w (" READ_OCR failed: %X" , resp);
486499 goto unknown_card;
487500 }
488501
@@ -502,19 +515,22 @@ DSTATUS ff_sd_initialize(uint8_t pdrv)
502515 if (token == 0x00 ) {
503516 card->type = CARD_MMC;
504517 } else {
518+ log_w (" SEND_OP_COND failed: %u" , token);
505519 goto unknown_card;
506520 }
507521 }
508522 }
509523
510524 if (card->type != CARD_MMC) {
511525 if (sdTransaction (pdrv, APP_CLR_CARD_DETECT, 0 , NULL )) {
526+ log_w (" APP_CLR_CARD_DETECT failed" );
512527 goto unknown_card;
513528 }
514529 }
515530
516531 if (card->type != CARD_SDHC) {
517532 if (sdTransaction (pdrv, SET_BLOCKLEN, 512 , NULL ) != 0x00 ) {
533+ log_w (" SET_BLOCKLEN failed" );
518534 goto unknown_card;
519535 }
520536 }
0 commit comments