Hallo, ich weiß, das Thema gab es schon oft. Ich habe aber in der Suche nichts passendes zu meinem Problem gefunden. Ich versuche mit einem ATmega8 eine 2GB SD-Karte von SanDisk anzusteuern. Zum testen benutze ich den unveränderten Programm-Code von Ulrich Radig. Allerdings lässt sich die Karte überhaupt nicht initialisieren. Nach dem cmd0 soll sie 0x01 senden (Idle State). Stattdessen kommt 0x80 an. Das kann doch eigentlich nicht sein, oder? Das MSB muss doch immer 0 sein. Woran kann das liegen? Die Verdrahtung habe ich schon oft überprüft, habe aber keine Fehler finden können. Der AVR läuft mit 5V, der Spannungsteiler zur SD-Karte ist mit zwei 1k-Widerständen aufgebaut. Es kommen also 2,5V bei den Eingängen der Karte an. Sicher nicht optimal, aber da die Karte antwortet, kann das doch nicht das Problem sein. Gruß, Jan
>Der AVR läuft mit 5V, der Spannungsteiler zur SD-Karte >ist mit zwei 1k-Widerständen aufgebaut. Es kommen also 2,5V bei den >Eingängen der Karte an. Sicher nicht optimal, aber da die Karte >antwortet, kann das doch nicht das Problem sein. Das Thema Spannungsteiler als Pegelwandler für SD Karten wurde hier durchaus schon öfter durchgekaut. Meist endete es damit das die Probleme mit vernünftigen Pegelwandlern behoben waren. Kannst ja mal ein bißchen suchen.
Also 2,5V klingt extrem schlecht für SD Cards, meine SD Card Schaltung steht zwar noch aus, aber von meiner Vorabinformierung kann ich nur wiederholen das immer wieder erwähnt wird wie kritisch die Spannungsversorgung solcher Karten ist. Übrigens eine einfach, wenn auch nicht gute, Schaltung mit Wiederständen von 220 Ohm und 430 Ohm ergeben ziemlich genau 3,3V. Bei mir nach einer auf 5V stabilisierten Spannung aus einem 7805er komm ich auf 3,34V :) Bei Last kann die so einfach erzeugte Teilspannung aber leicht schwanken. Richtige Spannungsteiler sind zwar nicht billig aber sicher ratsam. Hab hier immer ein 4 Bein SIL DC/DC 5V->3,3V Steinchen rumfliegen, ist für verlässliche Tests wo man sich um wichtigeres kümmern will super. Passt aufs Breadboard aber kostet gerne 4€ bei Reichelt. EDIT: Reichelt Artikel-Nr.: SIM1-0503 SIL4
So, jetzt läuft es. Im Code von Ulrich Radig war das Clock-Signal invertiert. Ich habe Software-SPI benutzt. Hat das echt noch nie jemand vorher bemerkt? Oder muss es bei manchen SD-Karten invertiert sein?
Ich habe in den letzten Tagen ebenfalls mit der Ansteuerung einer SD-Karte herumexperimentiert und den Code von Ulrich Radig als Ausgangsbasis genommen. Da ich den Code aber auf einen LPC935 (8051) portieren musste, habe ich teile davon neu geschrieben. Dabei sind mir auch ein paar Sachen im Code aufgefallen, die meiner Meinung nach nicht so ganz richtig sind (Vor allem die Steuerung des CS Signals). Aber alles in allem war der Code schon eine große Hilfe um nicht jede einzelne Methode komplett neu schreiben zu müssen. Ich habe beim Portieren vor allem die Initialisierung von CMD1 auf ACMD41 abgeändert, was für SD-Karten der richtige Befehl ist und SD-Karten nach Spezifikation v2.0 CMD1 nicht mehr unterstützen. Somit kann ich unterscheiden zwischen SD-Karten v1.0 und v2.0 sowie SD und SDHC. Mittlerweile klappt die Initialisierung (v1.0 und v2.0) und ich kann das CID und CSD Register auslesen. :) Ciao, Rainer
Mir hat dieses Projekt geholfen, einen AVR mit einer SD-Card zu verheiraten: http://pontoppidan.info/lars/index.php?proj=mmc2iec Ist eigentlich für einen C-64 gedacht, aber man kann die FAT-Routinen wunderbar für andere Projekte verwenden.
Hallo, für avr kann man auch http://www.mikrocontroller.net/articles/AVR_FAT32 diese lib benutzen. Soft und Hardware-SPI, multi-Block Write und Read, rekursives Löschen von Ordnern usw...
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.