Problem bei Initialisierung von Fat Fs nach Elm Chan/Frank Zhao mit ATMEGA 32

Gast #3276278
Lesenswert?

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
Angehängte Dateien:
Gast #3276323
Lesenswert?

> 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
Gast #3284235
Lesenswert?

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
Gast #3288330
Lesenswert?

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
#3288487
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren