Forum: Mikrocontroller und Digitale Elektronik Micro SD Karte SPI an Xmega


von Tuffi (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen, ich wollte gerne eine SD Karte per Xmega ansprechen. 
Hardware aufgebaut, soweit so gut. Ich habe im Fundus nur eine 16 GB SD 
Micro Karte gefunden, angesteckt, kann SPI lesen und schreiben (vermute 
ich). Ich nutze von Roland Riegel die Treiber, welche ich etwas auf den 
Xmega angepasst habe.  Aktuell mache ich nichts, außer die Funktion 
aufzurufen und mir den Returnwert per Uart auszugeben.

16 GB HC:
Initialisiere ich die als normale Karte (kein HC) dann steigt er bei 4. 
aus
Initalisiere ich als HC, steigt er bei 11 aus

Ich habe dann eine 1GB gekauft, da steigt er bei 2 aus, resp. die 
reagiert gar nicht, aber am PC läuft die.

Ich habe alle 4 SPI Modi getestet, bis auf SPI_3 scheint es keinen 
Unterschied zu machen, welcher genutzt wird. Ich bekomme von der 16 GB 
Karte Werte die auch logisch erscheinen, daher gehe ich davon aus, das 
HW okay ist.

Hat jmd. eine Idee, was ich falsch mache oder wo das Problem sein kann? 
Ich bekomme einfach die Blockgröße nicht gesetzt. Habe auch schon andere 
Werte getestet, der Xmega hat 12kb Ram, daher wäre das egal wenn ich 
Blockgröße von 4kb machen würde aber das geht alles nicht

von Tuffi (Gast)


Lesenswert?

Kurzer Nachtrag:

Gibt es einen Befehl, mit dem man Specifikationen lesen kann wie bei 
Feldbusgeräten üblich? Seriennummer, Herstelelr etc.? Dann könnte ich 
zumindest 100% ausschließen, das es an der Hardware/Anschluss liegt. Ich 
bekomme jetzt zwar auch Werte aber keine Ahnung ob die Sinn ergeben.

von Programmierer (Gast)


Lesenswert?

Was sind 2, 4, 11...?

Bei SDHC-Karten (2-32 GB) ist die Blockgröße fix bei 512B, d.h. CMD16 
ist sinnlos. Das ist auch gut so, denn es vereinfacht die 
Programmierung.

Tuffi schrieb:
> Gibt es einen Befehl, mit dem man Specifikationen lesen kan

ja, es gibt das CID register. Auszulesen mit CMD10. Wenn du allerdings 
schon so weit bist, dass CMD10 gesendet werden kann, hast du kein 
Hardwareproblem; schließlich musst du ja vorher schon CMD8 und ACMD41 
erfolgreich ausgeführt haben, wozu die Hardware intakt sein muss.

von S: Landolt (Gast)


Lesenswert?

Ist diese Seite
http://elm-chan.org/
bzw.
http://elm-chan.org/docs/mmc/mmc_e.html
bekannt? Hatte mir (vor über zehn Jahren) geholfen.

von Tuffi (Gast)


Lesenswert?

Programmierer schrieb:
> Was sind 2, 4, 11...?
>
> Bei SDHC-Karten (2-32 GB) ist die Blockgröße fix bei 512B, d.h. CMD16
> ist sinnlos. Das ist auch gut so, denn es vereinfacht die
> Programmierung.
>
> Tuffi schrieb:
>> Gibt es einen Befehl, mit dem man Specifikationen lesen kan
>
> ja, es gibt das CID register. Auszulesen mit CMD10. Wenn du allerdings
> schon so weit bist, dass CMD10 gesendet werden kann, hast du kein
> Hardwareproblem; schließlich musst du ja vorher schon CMD8 und ACMD41
> erfolgreich ausgeführt haben, wozu die Hardware intakt sein muss.

Die Nummern sind die Rückgabewerte, also wenn etwas nicht ausführbar 
ist, diese sind in der .h zu finden in der init Funktion.

von Tuffi (Gast)


Lesenswert?

Hallo nochmal, so ganz rund läuft das noch nicht.

Ich habe noch einmal 2 SD Karten je 1GB gekauft von versch. Herstellern. 
Komischerweise funktioniert nur die 16 GB, alle anderen (64GB, 3 1GB) 
gehen am PC aber reagieren 0 auf SPI Befehle. Rückgabe immer nur 255.

Jetzt habe ich die Initialisierung gemacht, sprich

CMD_GO_IDLE_STATE => Wenn Rückgabewert = 1 => OK
CMD_APP
CMD_SD_SEND_OP_COND => Wenn R1_ILL_COMMAND (bit 2) = 0 => OK
FERTIG. Läuft durch. Denke ich.

Dann habe ich CMD_SEND_CID => 192 bekomme ich zurück. Alles weitere 255 
was ich zurück bekomme. Also entweder mache ich was grundlegendes bei 
der Initialisierung falsch oder hier läuft insg. was schief.

Könnte mir jmd. noch einmal auf die Sprünge helfen resp. die Befehle 
(HEX) zeigen, welche gesendet (und empfangen) werden müssen für Korrekte 
Initialisierung?? Warum gehen die 1GB Karten nicht?

von Falk B. (falk)


Lesenswert?

Tuffi schrieb:
> Könnte mir jmd. noch einmal auf die Sprünge helfen resp. die Befehle
> (HEX) zeigen, welche gesendet (und empfangen) werden müssen für Korrekte
> Initialisierung??

Warum? Willst du dich WIRKLICH mit dem Urschleim befassen? Wenn ja, kann 
ich dir nicht helfen. Wenn nein, nimm eine fertige, funktionierende 
Bibliothek. Die hier ist Spitze und sehr zu empfehlen.

http://elm-chan.org/fsw/ff/00index_e.html

> Warum gehen die 1GB Karten nicht?

Möglicherweise gibt es auch ein Hardwareproblem. Hast du einen Pull-Up 
am Datenausgang DAT0 der SD-Karte? Der ist nämlich während der 
INIT-Phase ein Open Drain Ausgang. Wie es scheint, ahben aber einige 
Karten einen internen Pull-Up, sodaß sie mit einem am Host fehlenden 
Pull-Up trotzdem funktionieren. 10k sind OK.
Zeig mal deinen Schaltplan und ein Bild vom Aufbau.

von S. Landolt (Gast)


Lesenswert?

> Ich habe noch einmal 2 SD Karten je 1GB gekauft ...
> ... Warum gehen die 1GB Karten nicht?

1 GB? Die gibt es tatsächlich noch zu kaufen? Dann ist das wohl noch 
Version 1.nn.

von Programmierer (Gast)


Lesenswert?

Tuffi schrieb:
> Komischerweise funktioniert nur die 16 GB, alle anderen (64GB, 3 1GB)
> gehen am PC aber reagieren 0 auf SPI Befehle

Wie gesagt: 1 GB Karten sind SDSC, 16 GB Karten sind SDHC, 64 GB Karten 
sind SDXC. Die sind unterschiedlich anzusteuern. Die kannst du nicht 
über einen Kamm scheren.

Tuffi schrieb:
> Könnte mir jmd. noch einmal auf die Sprünge helfen resp. die Befehle
> (HEX) zeigen, welche gesendet (und empfangen) werden müssen für Korrekte
> Initialisierung??

Die stehen alle in der Spezifikation. Lies die doch einfach mal.

von Jim M. (turboj)


Lesenswert?

Programmierer schrieb:
>> Könnte mir jmd. noch einmal auf die Sprünge helfen resp. die Befehle
>> (HEX) zeigen, welche gesendet (und empfangen) werden müssen für Korrekte
>> Initialisierung??
>
> Die stehen alle in der Spezifikation. Lies die doch einfach mal.

Schau Dir zusätzlich mal an wie Chan Fatfs die Karten initialisiert. Die 
machen da ein paar Dinge die man nicht direkt aus den Specs auslesen 
kann - Stichwort Fehlerbehandlung.

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.