Hallo, ich wollte Fragen ob sich schon jemand mit dem Erase Kommando der MMC Karte im SPI Modus beschäftigt hat und mir Infos über die Funktion geben kann. Ich habe Probleme bei der Definition, welchen Speicherbereich ich löschen möchte. Erase Groups usw..... Danke Wolfgang
Hallo Wolfgang! Ich habe mich mal mit dem Löschbefehl beschäftigt. Es ist aber schon wieder lange her. Aber ich habe damals eine Funktion programmiert, die es erlaubt, bestimmte Speicherbereichte, die man angibt, löscht. Man gibt hier die Start und Endadresse, des zu löschenden Bereichs an. Hier der Code: void sd_ende (void) { sd_card_cs=1; spi(0xff); } //Sendet ein Commando an die MMC/SD-Karte char sd_write_command (char *CMD) { unsigned int a; char tmp = 0xff; unsigned int Timeout = 0; //sendet 8 Clock Impulse //sd_ende(); //delay_ms(1); //sendet 6 Byte Commando sd_card_cs=0; for (a = 0;a<0x06;a++) //sendet 6 Byte Commando zur MMC/SD-Karte { spi(*CMD++); } while (tmp == 0xff) //Wartet auf ein gültige Antwort von der MMC/SD-Karte { tmp = spi(0xFF); Timeout++; if (Timeout > 10) { #ifdef sd_debug printf ("Keine Antwort nach dem Senden eines Kommandos\r\n"); #endif break; //Abbruch da die MMC/SD-Karte nicht Antwortet } } return(tmp); } //Routine zum Löschen der SD-Karte(SPI-MODE) char sd_loeschen (unsigned long addrs,unsigned long addrz) { char tmp; unsigned int a; char CMD32[] = {0x60,0x00,0x00,0x00,0x00,0xFF}; char CMD33[] = {0x61,0x00,0x00,0x00,0x00,0xFF}; char CMD38[] = {0x66,0x00,0x00,0x00,0x00,0xFF}; /*Die Adressierung der MMC/SD-Karte wird in Bytes angegeben, addr wird von Blocks auf Bytes umgerechnet danach werden diese in das Commando eingefügt*/ addrs = addrs << 9; //addr = addr * 512 addrz = addrz << 9; //addr = addr * 512 CMD32[1] = ((addrs & 0xFF000000) >>24 ); CMD32[2] = ((addrs & 0x00FF0000) >>16 ); CMD32[3] = ((addrs & 0x0000FF00) >>8 ); CMD33[1] = ((addrz & 0xFF000000) >>24 ); CMD33[2] = ((addrz & 0x00FF0000) >>16 ); CMD33[3] = ((addrz & 0x0000FF00) >>8 ); //Sendet Commando an MMC/SD-Karte if ((tmp=sd_write_command (CMD32)) != 0) { sd_ende(); //printf("cmd32: %d\r\n",tmp); return(tmp); } sd_ende(); if ((tmp=sd_write_command (CMD33)) != 0) { sd_ende(); //printf("cmd33: %d\r\n",tmp); return(tmp); } sd_ende(); if ((tmp=sd_write_command (CMD38)) != 0) { sd_ende(); //printf("cmd38: %d\r\n",tmp); return(tmp); } while(spi(0xff)==0); sd_ende(); return(0); } Tschüss Max
Hallo Max, danke für Deine Antwort. Leider hilft sie mir nicht weiter. Du verwendest in Deinen Sourcen die Kommandos CMD32 und CMD33. Diese scheinen aber von den MMC Karten nicht bzw. nicht mehr unterstützt zu werden. Bei CMD32 zum Beispiel antwortet die Karte mit R1 = 0x04, Illegal Command. Die einzigen Kommandos die akzeptiert werden sind CMD35, CMD36 und CMD38. Allerdings kann ich als Adressen in den Kommandos angeben was ich will, es wird immer derselbe Bereich gelöscht, bzw. nicht gelöscht. Mittlerweile habe ich auch schon Karten unterschiedlichster Hersteller versucht.... Überall dasselbe Ergebnis. Gruß Wolfgang
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.