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