Hi,
ich beschäftige mich momentan mit MMC-Karten im SPI Modus, leider haben
sich bei mir schon jetzt einige Fragen aufgeworfen.
Aus der MMC-Systemspezifikation 3.1 entnehme ich, dass auf das Kommando
CMD0 keine Response kommt.
Dennoch habe ich u.A. hier im Forum, von Ulrich Radig, und aus der
ProcyonAvrLib in einigen Codeschnippseln entdeckt, dass nach dem
Kommando CMD0 auf die Antwort '0x01' gewartet wird.
1 | do
|
2 | {
|
3 | // send dummy bytes with CS high before accessing
|
4 | spiTransferByte(0xFF);
|
5 | spiTransferByte(0xFF);
|
6 | spiTransferByte(0xFF);
|
7 | spiTransferByte(0xFF);
|
8 | // resetting card, go to SPI mode
|
9 | r1 = mmcSendCommand(MMC_GO_IDLE_STATE, 0);
|
10 | #ifdef MMC_DEBUG
|
11 | rprintf("MMC_GO_IDLE_STATE: R1=0x%x\r\n", r1);
|
12 | #endif
|
13 | // do retry counter
|
14 | retry++;
|
15 | if(retry>10) return -1;
|
16 | } while(r1 != 0x01);
|
(Procyon)
1 | //Sendet Commando CMD0 an MMC/SD-Karte
|
2 | Timeout = 0;
|
3 | char CMD[] = {0x40,0x00,0x00,0x00,0x00,0x95};
|
4 | while(tmp!=1)
|
5 | {
|
6 | tmp = Write_Command_MMC (CMD);
|
7 | //printf ("Return Code from MMC/SD Init CMD0 %x\n",tmp);
|
8 | Timeout++;
|
9 | if (Timeout > 20)
|
10 | {
|
11 | return(1); //Abbruch bei Commando1 (Return Code1)
|
12 | }
|
13 | }
|
(Ulrich Radig)
Meine Frage ist nun, habe ich eine veraltete Spezifikation, oder weiss
jemand etwas darüber, warum das so gemacht wird?
Freundlichen Gruss
Michael Sonst