Forum: Mikrocontroller und Digitale Elektronik SD Card in SPI Modus Initilisieren


von Michael (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
ich habe einen ATxmega über SPI an eine SD Karte angeschlossen.
Genauer gesagt nutze ich den USARTE0 im SPI Modus mit 200KHz.
Wie beinahe alle Artikel vorschlagen führe ich folgende Sequenz aus um 
die SD Karte im SPI Modus zu initialisieren:

1. Set CS HIGH
2. Send 100 x 0xFF Dummy Bytes
3. Set CS LOW
4. Send CMD0 (0x400000000095)
   -> Receive 0x01
5. Send CMD8 (0x48000001AA87)
   -> Receive 0x01000001AA
6. Send CMD55 (0x7700000000FF)
   -> Receive 0x01
7. Send ACMD41 (0x6940000000FF)
   -> Receive 0x01
8. Jump to 5. if 0x01

Bei den Schritten 4. & 5. Erhalte ich die richtigen Rückmeldungen von 
der SD Karte.
Die Schleife 6. & 7. wird aber nie verlassen, da die SD Karte immer im 
Idle Modus bleibt und 0x01 zurückgibt.
Ich habe schon sehr viel ausprobiert was in anderen Threads 
vorgeschlagen wurde aber ich konnte das Problem nicht lösen.
Ich habe auch 5 verschiedene SD Karten ausprobiert.
Von einer 16MB SD Karte bis zur 4GB SD HC ist alles dabei.
Im Anhang ist die Aufzeichnung vom Logic Analyzer (Saleae).

von Jim m. (Gast)


Lesenswert?

Eventuell den CS zwischen den Kommandos mal für ein dummy Byte hoch 
legen.

von Simon B. (zmon)


Lesenswert?

Michael schrieb:
> 7. Send ACMD41 (0x6940000000FF)

Wozu ist die 4 im Argument? Müsste das nicht 0x6900000000FF heißen?

: Bearbeitet durch User
von Jim M. (turboj)


Lesenswert?

Simon B. schrieb:
> Wozu ist die 4 im Argument? Müsste das nicht 0x6900000000FF heißen?

Nein. Das ist das HCS Bit für Karten >=4GB, und der OP hat nur die.

Der Code hier aus FATFS sendet das ACMD41 solange bis das 0x01 Bit nicht 
mehr gesetzt wird (oder ein Timeout auftritt).
Danach wird noch mittels CMD58 das OCR Register gelesen - nur dann weiss 
man ob man eine SD oder SDHC Karte im Sockel hat.

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.