Forum: Mikrocontroller und Digitale Elektronik SD-Karte antwortet beim CMD24 immer mit 0x02


von Yann B. (yann)


Angehängte Dateien:

Lesenswert?

Hallo,

ich versuche schon seit langem Daten auf eine 2GB SD-Karte von HAMA zu 
schreiben aber es läuft nicht. Das Problem ist, dass die SD-Karte auf 
CMD24 immer mit 0x02 (Erase Reset) antwortet. Ich habe schon alles 
probiert aber ich kriege immer diese Antwort statt 0x00. Was mache ich 
falsch?

Anbei sind 3 C-Dateien zu finden.
- InitSD.c zur Initialisierung der SD-Karte
- sdWriteBlock.c zum Schreiben
- sdSetBlockLength.c zum Setzen der Länge des Datenblocks

Ich freue mich auf irgendwelche Hilfe.

von Harald (Gast)


Lesenswert?

Kann dir im Detail nicht helfen, aber im Sinne einer Fehlereingrenzung 
sollte man testen, wie andere 2GB Karten reagieren.

von H.Joachim S. (crazyhorse)


Lesenswert?

Beliebter Fehler ist die falsche Einstellung der SPI (CPHA, CPOL).

von Yann B. (yann)


Lesenswert?

Hallo Harald,

und dke für deine schnelle Antwort. Leider habe ich keine andere 2GB 
SD-Karte.

von Jim M. (turboj)


Lesenswert?

Schau Dir mal andere SD Karten Implementationen an oder die Spec. Deine 
Karte ist sicher schon eine SD 2.0 Karte, die möchten IMHO erweitere 
Kommndos sehen (CMD8, ACMD41).

Außerdem funktioniert die Initialisierung so nicht wenn die Karte auf 
CMD0 mit was anderem als 0x01 antwortet. Was sie beim Power-Up durchaus 
tun darf falls sie noch nicht betriebsbereit ist.

Deine sdSetBlockLength() Funktion hat keine Fehlerbehandlung.

von Yann B. (yann)


Lesenswert?

Jim M. schrieb:

> Außerdem funktioniert die Initialisierung so nicht wenn die Karte auf
> CMD0 mit was anderem als 0x01 antwortet.

Die Initialisierung der SD-Karte funktioniert vollkommen. Ich kriege 
immer 0x00 nach CMD1.

>Deine
> Karte ist sicher schon eine SD 2.0 Karte, die möchten IMHO erweitere
> Kommndos sehen (CMD8, ACMD41).

Die Initialisierung funktioniert auch mit ACMD41 und CMD55.


> Deine sdSetBlockLength() Funktion hat keine Fehlerbehandlung.

Dke für den Hinweis. Ich habe die Funktion gerade angepasst und 
festgestellt, dass CMD16 nicht angenommen wird. Also wird die Länge des 
Datenblocks auf 512 Bytes nicht gesetzt. Deswegen ging das Programm 
nicht weiter. Woran könnte es liegen? Liegt es an der Initialisierung 
der SD?

von Yann B. (yann)


Lesenswert?

H.Joachim S. schrieb:
> Beliebter Fehler ist die falsche Einstellung der SPI (CPHA, CPOL).

Danke für den Hinweis. Ich steuere zwei SPI gleichzeitig (einen für das 
LCD-Display und das andere für die SD-Karte) und die SPI-Initialisierung 
der SD-Karte war nicht aktiviert. Also ist schon ein Schritt und nach 
der Anmerkung von Jim habe ich bemerkt, dass das Problem eigentlich beim 
CMD24 nicht liegt sondern beim CMD16: Dies wird nicht angenommen und ich 
kriege immer als Antwort 0x01 (SD_BLOCK_SET_ERROR).

Hast du vielleicht eine Ahnung darüber?

von Yann B. (yann)


Lesenswert?

So jetzt ist das Problem mit CMD16 gelöst. Die Länge des Datenblocks 
wird auf 512 Bytes gesetzt aber das Problem mit dem Schreiben ist noch 
aktuell.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Gute Hilfe bietet hier Elm Chan [1]. Wenn man seinem 
Initialisierungsprozess folgt [2], sollte die Karte initialisiert 
werden. Oder man nutzt gleich seine Tools.

[1] http://elm-chan.org/docs/mmc/mmc_e.html
[2] http://elm-chan.org/docs/mmc/gfx1/sdinit.png

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.