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