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