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.
> 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
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!
@ 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.