mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Erase Kommando MMC Karte


Autor: Wolfgang Hoch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Wolfgang Hoch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.