@@ -142,10 +142,16 @@ char sdCommand(uint8_t pdrv, char cmd, unsigned int arg, unsigned int* resp)
142
142
}
143
143
144
144
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 ;
147
150
} else if (token & 0x08 ) {
148
151
log_w (" crc error" );
152
+ sdDeselectCard (pdrv);
153
+ delay (100 );
154
+ sdSelectCard (pdrv);
149
155
continue ;
150
156
} else if (token > 1 ) {
151
157
log_w (" token error [%u] 0x%x" , cmd, token);
@@ -443,6 +449,7 @@ DSTATUS ff_sd_initialize(uint8_t pdrv)
443
449
card->spi ->beginTransaction (SPISettings (400000 , MSBFIRST, SPI_MODE0));
444
450
445
451
if (sdTransaction (pdrv, GO_IDLE_STATE, 0 , NULL ) != 1 ) {
452
+ log_w (" GO_IDLE_STATE failed" );
446
453
goto unknown_card;
447
454
}
448
455
@@ -451,15 +458,18 @@ DSTATUS ff_sd_initialize(uint8_t pdrv)
451
458
// old card maybe
452
459
card->supports_crc = false ;
453
460
} else if (token != 1 ) {
461
+ log_w (" CRC_ON_OFF failed: %u" , token);
454
462
goto unknown_card;
455
463
}
456
464
457
465
if (sdTransaction (pdrv, SEND_IF_COND, 0x1AA , &resp) == 1 ) {
458
466
if ((resp & 0xFFF ) != 0x1AA ) {
467
+ log_w (" SEND_IF_COND failed: %03X" , resp & 0xFFF );
459
468
goto unknown_card;
460
469
}
461
470
462
471
if (sdTransaction (pdrv, READ_OCR, 0 , &resp) != 1 || !(resp & (1 << 20 ))) {
472
+ log_w (" READ_OCR failed: %X" , resp);
463
473
goto unknown_card;
464
474
}
465
475
@@ -469,6 +479,7 @@ DSTATUS ff_sd_initialize(uint8_t pdrv)
469
479
} while (token == 1 && (millis () - start) < 1000 );
470
480
471
481
if (token) {
482
+ log_w (" APP_OP_COND failed: %u" , token);
472
483
goto unknown_card;
473
484
}
474
485
@@ -479,10 +490,12 @@ DSTATUS ff_sd_initialize(uint8_t pdrv)
479
490
card->type = CARD_SD;
480
491
}
481
492
} else {
493
+ log_w (" READ_OCR failed: %X" , resp);
482
494
goto unknown_card;
483
495
}
484
496
} else {
485
497
if (sdTransaction (pdrv, READ_OCR, 0 , &resp) != 1 || !(resp & (1 << 20 ))) {
498
+ log_w (" READ_OCR failed: %X" , resp);
486
499
goto unknown_card;
487
500
}
488
501
@@ -502,19 +515,22 @@ DSTATUS ff_sd_initialize(uint8_t pdrv)
502
515
if (token == 0x00 ) {
503
516
card->type = CARD_MMC;
504
517
} else {
518
+ log_w (" SEND_OP_COND failed: %u" , token);
505
519
goto unknown_card;
506
520
}
507
521
}
508
522
}
509
523
510
524
if (card->type != CARD_MMC) {
511
525
if (sdTransaction (pdrv, APP_CLR_CARD_DETECT, 0 , NULL )) {
526
+ log_w (" APP_CLR_CARD_DETECT failed" );
512
527
goto unknown_card;
513
528
}
514
529
}
515
530
516
531
if (card->type != CARD_SDHC) {
517
532
if (sdTransaction (pdrv, SET_BLOCKLEN, 512 , NULL ) != 0x00 ) {
533
+ log_w (" SET_BLOCKLEN failed" );
518
534
goto unknown_card;
519
535
}
520
536
}
0 commit comments