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.
Kann dir im Detail nicht helfen, aber im Sinne einer Fehlereingrenzung sollte man testen, wie andere 2GB Karten reagieren.
Beliebter Fehler ist die falsche Einstellung der SPI (CPHA, CPOL).
Hallo Harald, und dke für deine schnelle Antwort. Leider habe ich keine andere 2GB SD-Karte.
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.
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?
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?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.