Forum: Mikrocontroller und Digitale Elektronik micro sd card hc antwortet auf cmd0 komisch


von martin (Gast)


Lesenswert?

Hallo,
ich versuche vergeblich eine sandisk µ SD HC Card (8GB) zu 
initialisieren.

Schicke ich CMD0 (nachdem 100 Takte vorgegeben wurde), so kommt als 
Antwort:

0xC0 0x7F 0xFF 0xFF 0xFF 0xFF

Jemand eine Idee??
Martin

von R. W. (quakeman)


Lesenswert?

martin schrieb:
> Hallo,
> ich versuche vergeblich eine sandisk µ SD HC Card (8GB) zu
> initialisieren.
>
> Schicke ich CMD0 (nachdem 100 Takte vorgegeben wurde), so kommt als
> Antwort:
>
> 0xC0 0x7F 0xFF 0xFF 0xFF 0xFF

Eine R1 Antwort auf CMD0 kann im SPI Modus nie mit einer 1 am Anfang 
zurückkommen. Mit welcher Geschwindigkeit arbeitet denn der SPI Bus 
während der Init Phase?
Ich hatte nämlich mal gelesen, dass während der Initialisierung nur mit 
geringer Geschwindigkeit gearbeitet werden sollte. Erst danach kann man 
den SPI Bus auf maximale Geschwindigkeit hochschalten. Ich betreibe beim 
Initialisieren den SPI Bus nur 115200Bps und schalte erst nach dem Init 
in den Mbps Bereich hoch. Damit konnte ich bisher noch alle Karten 
betreiben.

Ciao,
     Rainer

von holger (Gast)


Lesenswert?

>Ich hatte nämlich mal gelesen, dass während der Initialisierung nur mit
>geringer Geschwindigkeit gearbeitet werden sollte.

Das ist richtig. Ein Pullup an MISO hilft auch ungemein bei
der Init. Ohne Pullup muss man CMD0 nach meiner Erfahrung mehrfach
wiederholen. Beim ersten CMD0 ist MISO der Karte noch kein
PushPull Ausgang sondern OpenCollector. Das ändert sich erst wenn
CMD0 einmal ausgeführt wurde.

von eric (Gast)


Lesenswert?

Es sieht so aus, als ob die Antwort um 2 Bit nach rechts verschoben ist.
Vor dem eigentlichen Initialisieren die Karte abwählen (/CS auf high), 
ein Byte senden (0xFF oder so) und /CS wieder auf low hat zumindest hier 
geholfen.

von R. W. (quakeman)


Lesenswert?

eric schrieb:
> Es sieht so aus, als ob die Antwort um 2 Bit nach rechts verschoben ist.
> Vor dem eigentlichen Initialisieren die Karte abwählen (/CS auf high),
> ein Byte senden (0xFF oder so) und /CS wieder auf low hat zumindest hier
> geholfen.

Stimmt, ist auch ein guter Hinweis. Ich sende mit /CS=1 erst mal 15 
Dummybytes bevor ich /CS=0 und dann CMD0 an die Karte sende. Vermutlich 
könnte ich auch etwas weniger Dummybytes senden, aber das hat sich 
bisher ganz gut bei mir bewährt. :)

Wegen dem Pull-Up hatte ich nie Probleme. Ich betreibe die SD-Karte an 
einem LPC935 (8051er) mit dem Portpin im quasi-bidirektionalen Modus. 
Dadurch habe ich einen schwachen Pull-up im Contoller schon drin.

Ciao,
     Rainer

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.