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
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.
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.
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.
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?
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.
> 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.
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.
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.