Hallo zusammen wegen meiner Bachelorarbeit arbeite ich mich gerade zum ersten Mal in die Programmierung von Mikrokontrollern ein. Im Zuge dessen habe ich natürlich bei einfachen Sachen wie dem blinken von LEDs angefangen und auch schon einen LCD zum Laufen gebracht. Jedoch muss ich als nächstes eine SD-Karte beschreiben und auslesen. Dies soll durch Chans FAT FS (http://elm-chan.org/fsw/ff/00index_e.html) geschehen. Da ich als Basis einen ATMEGA 32 hernehme, habe ich versucht mich an das Tutorial von Frank Zhao zuhalten(http://www.frank-zhao.com/cache/fat_sd.php). Jedoch habe ich das Problem, dass ich irgendwo einen Fehler gemacht haben muss, da ich die SD-Karte nicht initialisiert bekomme. Soweit ich den Code verstanden habe, liegt dies an der Zeile " if (send_cmd(CMD0, 0) == 1) ", bzw daran, dass ich dann nicht den if Befehl abarbeite sondern diesen überspringe da " send_cmd(CMD0, 0)" scheinbar nicht eins wird. Auch meine ich, dass ich bei "xchg_spi" eine Endlosschleife habe. Da ich noch sehr neu auf diesem Gebiet bin und nur Grundkenntnisse der C-Programmierung habe, fällt es mir schwer den Fehler selber zu beheben. Deshalb würde ich mich über (ausführliche) Lösungsvorschläge sehr freuen. In den Anhang lad ich Euch den von mir abgeänderten Code sowie Schaltplan und ein Photo des am Steckbrett aufgebauten Versuchs. Schon einmal vielen Dank im Voraus! Michl
Ehe du weiter suchst: Investiere bitte in eine Handvoll Stützkondensatoren zwischen VCC und GND, jeweils direkt am IC und auch an der SD-Karte. Wenn es dir dann noch gelingen sollte, den Schaltplan etwas übersichtlicher zu zeichnen, ist allen geholfen.
http://www.mikrocontroller.net/articles/Kondensator#Entkoppelkondensator Ich hab vor einiger Zeit auch mit dem FATfs von ELM Chan gearbeitet, es lief auf Anhieb. Aber auch einer richtigen Platine, nicht so einem Drahtverhau.
> wegen meiner Bachelorarbeit arbeite Achte darauf niemals in die Hardwareentwicklung zu gehen. > Photo des am Steckbrett aufgebauten Versuchs Die Vorstellung eine SD-Karte ueber so einen wackeligen Drahtverhau anzusprechen ist geradezu absurd. Schau doch mal ins Datenblatt deiner SD-Karte mit welchem maximalen Bittakt die arbeiten kann und wie schnell dann wohl ihre Treiber/Reciever sind. Und dann ueberlegst du nochmal was du alles in Impulstechnik und Uebertragungstechnik gelernt hast. Olaf
Hallo zusammen, vorab erst mal ein herzliches Dankeschön für die vielen Beiträge! Ich hab jetzt, wie von Euch geraten, 100 nF Kerkos als Stützkondensatoren angebracht und den SD-Connector jetzt über Pinheader ans Steckbrett angeschlossen. Jedoch kann ich die SD-Karte immer noch nicht initialisieren. Deswegen wollt ich noch mal fragen, ob Euch was einfällt, das ich überprüfen kann? Falls es was bringt, kann ich auch gerne noch mal ein aktuelles Photo vom Aufbau hoch laden. Grüße Michl
Mach mal einen Pullup 10k gegen 3V3 an Miso.
Hallo zusammen, mittlerweile läufts so weit, dass ich bis zum "send_smd(ACMD41,1UL<<30)"Teil des Codes komme. Dadurch sollte, soweit ich das verstanden habe, der Initialisierungsprozess der Karte gestartet werden. Ob die Initialisierung gelungen ist, sehe ich laut Elm Chan daran, dass die Antwort meiner Karte sich von 0x01 nach 0x00 ändert. Jedoch habe ich eine Änderung von 0x01 nach 0xFF. Da Chan darauf hingewiesen hat, dass größere Karten länger brauchen, und ich eine Intenso 4 GB habe, verwende ich momentan als Initialisierungszeitrahmen 2000msec statt 1000msec. Da der Code von Chan bei 0xFF abbricht, wollte ich fragen, ob die Antwort der Karte nach der Initialisierung (also 0x00 bzw. bei mir 0xFF) evtl. vom Hersteller abhängt, oder es was bringt, wenn ich den Initialisierungszeitrahmen nochmals vergrößere? Grüße Michl
@michl (Gast) >daran, dass die Antwort meiner Karte sich von 0x01 nach 0x00 ändert. >Jedoch habe ich eine Änderung von 0x01 nach 0xFF. >Da Chan darauf hingewiesen hat, dass größere Karten länger brauchen, und >ich eine Intenso 4 GB habe, verwende ich momentan als >Initialisierungszeitrahmen 2000msec statt 1000msec. Ich weiß gar nicht was du da auf Low Level Ebene rumbastelst. Wenn das alles gescheit verdrahtet ist, muss man sich damit keine Sekunde abplagen. Einfach die Funktion zur Initialisierung des Filesystems aufrufen und gut. Dann ach Datei öffnen und zugreifen. Fertig. Geht auch problemlos mit modernen Karten, hab ich vor wenigen Monaten mit 4 und 8GM SDHC gemacht. Lief problemlos. Ach ja, die 10K an MISO sind elementar wichtig! Hatte ich am Anfang auch vergessen!
Die 4GByte Karte wird eine High Density Karte sein. Elm-Chan war ursprünglich aber für Standard Karten gemacht.
@ Georg G. (df2au) >Die 4GByte Karte wird eine High Density Karte sein. Elm-Chan war >ursprünglich aber für Standard Karten gemacht. Die Zeit bleibt nicht stehen, SDHC Support ist dort schon viele Jahre drin.
Zumindest die neueren Atmegas funktionieren auch mit 3,3 Volt. Man kann sich damit die Pegelwandelung ersparen. Das erleichtert den Anschluss der sd-Karte ungemein.
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.