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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.