Forum: Mikrocontroller und Digitale Elektronik SD Karte im SPI Mode debuggen


von Christian F. (christianf)


Lesenswert?

Moin !

Ich bin gerade dabei mein geschriebenes C - Programm zu debuggen, indem 
ich eine SD Karte initialisiere und Daten schreibe/lese.

Funktioniert alles einwandfrei, jedoch reagiert die Karte ab und an ein 
wenig "zickig".

Da ich debugge kommt es häufiger vor, dass ich den Prozess zwischendrin 
terminiere um den Fehler auszumerzen bzw. debug schnittstellen 
einzufügen.

Starte ich danach das Programm erneut, reagiert die SD Karte nichtmehr 
und meine Zählvariable, die auf "in IDLE Mode?" gelinkt ist, schlägt an.

Die Karte reagiert nichtmehr auf ein CMD0 und ich lese nur noch 0xFF's 
von der MISO Leitung ein.

Nehme ich die Spannungsversorgung weg und/oder steck die SD Karte erneut 
in den Slot, funktioniert es wieder.

Beim direktem "run", also ohne terminiertem debug, habe ich das 
Verhalten noch nicht beobachtet.

Was mich interessiert ist ob jemand von Euch schonmal das gleiche 
Verhalten beobachtet hat.

Es verwundert mich halt nur, da vor jedem CMD0 eine Warmlaufphase 
erfolgt indem ich Dummyclocks etc. sende.

Verwenden tu ich:

XPS SPI Core
SanDisk 2Gb (2) SD Karte

Gruss!

von Oliver J. (skriptkiddy)


Lesenswert?

Wie sieht den die Spannungsversorgung zur SD-Karte aus?

von Christian F. (christianf)


Angehängte Dateien:

Lesenswert?

So :)

Pmod-Adapter von digilent.

Gruss !

von Turbo J (Gast)


Lesenswert?

> Es verwundert mich halt nur, da vor jedem CMD0 eine Warmlaufphase
> erfolgt indem ich Dummyclocks etc. sende.

Auch die 8 dummy clocks vor der High-> Low Flanke auf dem Chip Select 
(CS)?

Um ein CS "high" - also NICHT selektiert - zu erkennen, brauchen die 
SD-Karten bis zu 8 clocks (also einfach 0xFF via SPI senden bei 
CS=high).

Macht man das nicht, könnte es beim Debuggen passieren dass der µC und 
die SD Karte unterschiedlicher Meinung sind, welches Bit vom Byte grade 
über die Leitung geht - weil eine Übertragung mitten im Byte abgebrochen 
wurde. Dann ist natürlich keine Kommunikation möglich.

von Bernhard D. (pc1401)


Lesenswert?

Hallo,

schau Dir mal diese Seite an: http://elm-chan.org/docs/mmc/mmc_e.html, 
besonders den Abschnitt über die Stromversorgung, bzw. auch die 
Beispielschaltung in diesem Archiv:
http://elm-chan.org/fsw/ff/ffsample.zip
Evtl. könntest Du wie bei Chan einen PMOS Highside Schalter einbauen, um 
hängende Karten resetten zu können.

Die Versorgungsspannung sollte wirklich ausreichend glatt sein. Mehr als 
60mV Ripple sind unzulässig, ich hatte auch schon Probleme mit einem 
bestimmten Kartenfabrikat, als die Versorgung nicht ganz sauber war.

Gruß,
Bernhard

von Christian F. (christianf)


Lesenswert?

Turbo J schrieb:
>> Es verwundert mich halt nur, da vor jedem CMD0 eine Warmlaufphase
>> erfolgt indem ich Dummyclocks etc. sende.
>
> Auch die 8 dummy clocks vor der High-> Low Flanke auf dem Chip Select
> (CS)?
>
> Um ein CS "high" - also NICHT selektiert - zu erkennen, brauchen die
> SD-Karten bis zu 8 clocks (also einfach 0xFF via SPI senden bei
> CS=high).
>
> Macht man das nicht, könnte es beim Debuggen passieren dass der µC und
> die SD Karte unterschiedlicher Meinung sind, welches Bit vom Byte grade
> über die Leitung geht - weil eine Übertragung mitten im Byte abgebrochen
> wurde. Dann ist natürlich keine Kommunikation möglich.

Jo mache ich :).

Danke dir für die Info Bernhard !

Ich werd das mal durchlesen.

Gruss

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.