Forum: Mikrocontroller und Digitale Elektronik CMD42 (genauer: Force Erase) scheitert an SDHC Karte via SPI


von Martin Schröder (Gast)


Lesenswert?

Hallo Forum,

hoffe ihr hatte ein frohes Fest und fiebert dem neuen Jahr entgegen. 
Habe mit den neuen SDHC Karten und dem alten uC (ATMega8) über die 
Feiertage ein wenig zu viel rumgespielt und mich nach einem CMD42 
ausgesperrt, da ich das PW (per UART eingegeben) nicht mehr rausbekomme 
(argggghhhh) :=(
Und weil ich nicht lernfähig war, gleich bei mehreren Karten... 
Initalisierung der Karte, CSD/CID Register auslesen usw. klappt auch 
nach wie vor alles einwandfrei, auf CMD13 wird aber nun immer mit 0x00 
01 geantwortet (= Karte ist geschützt). Ja, habe ich vorher ja auch 
(irgendwie) durchgeführt.
Wie auch immer: ein Force Erase sollte eigentlich noch möglich sein, 
sofern ich die SD Spec (v3.01) unter Abschnitt 4.3.7.3 richtig 
interpretiere:
1
- CMD7 ist nicht notwendig, da die Karte via SPI angesprochen wird
2
- über CMD16 Blocklänge von eins einstellen
3
- CMD42 schicken
4
- über das Argument ein Force Erase einleiten, wobei das Argument nur Start Token, Force Erase Byte (0x08) + 2 CRC16 Bytes ist => 4 Bytes
Als Antwort auf CMD42 erhalte ich auch ein 0x00, also noch alles i.O. 
Wenn ich das Resultat jedoch mit einem anschließenden CMD13 überprüfe, 
schaut erst alles gut aus, da die Antwort 0x00 00 ist. Beim nächsten 
CMD13 Aufruf ist die Antwort jedoch 0x00 03 (=Fehler beim 
Löschen/Lock/Unlock + Karte ist geschützt), bei erneutem CMD13 Aufruf 
0x00 01 (= Karte ist geschützt).
Anmerkung: CSD Bits für Schreibschutz sind nicht gesetzt
Komplette Ausgabe der Befehle die ich nach der Initalisierung absetze 
inkl. Antworten der Karte:
1
aktuelles Kommando das an die SDHC Karte gesendet wird: 0x4D 00 00 00 00 0D
2
Antwort: 0xFF FF FF FF FF FF FF 00 01
3
--- WARNUNG --- Antwort auf CMD13 war 0x00 01
4
aktuelles Kommando das an die SDHC Karte gesendet wird: 0x50 00 00 00 01 2B
5
Antwort: 0xFF FF FF FF FF FF FF 00
6
=> alles i.O., Antwort auf CMD16 war 0x00
7
aktuelles Kommando das an die SDHC Karte gesendet wird: 0x6A 00 00 00 00 51
8
Antwort: 0xFF FF FF FF FF FF FF 00
9
=> alles i.O., Antwort auf CMD42 war 0x00
10
Bytes die als Argument gesendet werden: 0xFE 08 FF FF
11
aktuelles Kommando das an die SDHC Karte gesendet wird: 0x4D 00 00 00 00 0D
12
Antwort: 0xFF FF FF F2 80 00 00 00
13
=> alles i.O., Antwort auf CMD13 war 0x00 00
14
aktuelles Kommando das an die SDHC Karte gesendet wird: 0x4D 00 00 00 00 0D
15
Antwort: 0xFF FF FF FF FF FF FF 00 03
16
--- FEHLER --- Antwort auf CMD13 war 0x00 03
17
aktuelles Kommando das an die SDHC Karte gesendet wird: 0x4D 00 00 00 00 0D
18
Antwort: 0xFF FF FF FF FF FF FF 00 01
19
--- WARNUNG --- Antwort auf CMD13 war 0x00 01
Wie gesagt, zum einen ist die Karte nach wie vor geschützt, zum anderen 
ist die erste Antwort auf CMD13 auch "komisch", da ich auch dort 6 Bytes 
0xFF erwarten würde (als Antwort auf meine 6 Bytes für das Kommando das 
ich vorher an die Karten geschoben habe). Weiterhin bin ich mir nicht im 
Klaren darüber, wie ich mich nach der Übermittlung des Arguments zu 
CMD42 zu verhalten habe. Ein Data Response Token (würde ien 0x05 
erwarten) sehe ich nicht...
Wie auch immer, versuchsweise 512 Bytes zu schreiben (= 1 Block bei 
SDHC) schlägt ebenfalls fehl:
1
  SPI_putc (0xFE); // Start Token
2
  SPI_putc (0x08); // Löschen
3
  for (int i = 1; i < 512; i++)
4
  {
5
    SPI_putc (buffer512[i]);
6
  }
7
  SPI_putc (crc16 >> 8); //CRC16 = 0x1584
8
  SPI_putc (crc16);

Nun also die spannende Frage: kann mir bitte jemand beim CMD42 auf die 
Sprünge helfen?

Danke und Gruß, Martin
von Martin Schröder (Gast)


Lesenswert?

ARGHHH
der Kopf rauchte....
Hatte zwischenzeitlich das CS zurückgenommen, das sollte man tunlichst 
unterlassen wenn die Karte auch was machen soll ;=)
=> Nun läuft es auch, alle vier Karten gerettet und neu bespielt.

WO ich mir immer noch unschlüssig bin: was läuft bei der Antwort auf das 
CMD13 schief? Hier hätte die Karte eigentlich mit einem parameter error 
oder error antworten sollen? Wie auch immer, wieder alles gut.

Gruß, Martin
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
Noch kein Account? Hier anmelden.