Forum: Mikrocontroller und Digitale Elektronik SD-Karte per Software resetten?!


von Ronny (Gast)


Lesenswert?

Hallo,

ich habe an meinem MC eine SD-Karte. Beim Start schicke ich
0=Go_Idle_State gefolgt von 1=Send_Op_Cond. Soweit klapp alles prima.

Jetzt kann es aber vorkommen, dass mein MC von der Watchdog einen Reset 
bekommt. Dann würde die Sequenz wieder losgehen, obwohl vorher die 
SD-Karte NICHT von der Spannung getrennt wurde.

Frage: Kann man eine SD-Karte beliegig oft mit oben angeführter Sequenz 
initialisieren oder muss jedesmal vorher ein Reset der SD-Karte 
erfolgen?
Und falls ein Reset erforderlich ist, wie (abgesehen von Strom-Weg, was 
ich nicht kann)?

Danke!

von holger (Gast)


Lesenswert?

>Frage: Kann man eine SD-Karte beliegig oft mit oben angeführter Sequenz
>initialisieren oder muss jedesmal vorher ein Reset der SD-Karte
>erfolgen?

Bei meinen Karten geht das. Wenn ich z.B. das Programm im uC update
schalte ich sie nicht aus.

Bissiger Watchdog und SD Karte ist aber keine gute
Kombination. Gerade beim schreiben.

von Ronny (Gast)


Lesenswert?

@Holger
Die SD-Karte wird nur gelesen. Ausserdem kommt die Watchdog alle 10ms 
und wird von einem Timer getaktet, der beim interrupt einiges an 
Daten/Zuständen kontrolliert. Die SD-Karte kann man ja unterbrechen, das 
macht keine Probleme.

von holger (Gast)


Lesenswert?

>Die SD-Karte kann man ja unterbrechen, das
>macht keine Probleme.

Doch, tut es. Ich hab gerade mal meinen simplen MP3 Player
mit ständigen Hardwareresets unterbrochen. Nach ca. 30 Versuchen
meldete sich die Karte nicht mehr. Da hab ich wohl genau
den Zeitpunkt getroffen wo ein Sektor gelesen wurde.

Man muss immer einen kompletten Sektor und die 2 Byte
Checksumme abholen. Solange man das nicht tut reagiert
die Karte nicht auf Kommandos. Nach einem erneuten
Reset lief sie dann wieder. Ohne Power On/Off. CMD0
wird bei mir sehr oft gesendet. Das holte quasi den Rest
des Sektors und die Checksumme ab. Scheinbar sende ich CMD0
aber noch nicht oft genug für den Fall das ein WDT das
lesen eines Sektors mitten drin unterbricht.

Was mir auch noch zu denken gibt ist, das CMD0 in dieser
Zeit nicht als Kommando erkannt wird, in den Daten aber
etwas wie eine korrekte Response stehen könnte. Da hilft
wohl nur erst mal blind einige 0xFF zu senden um eventuelle
Sektordaten und die Checksumme aus der Karte zu takten.

Oder den WDT während eines SD Zugriffs immer wieder zu resetten.

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.