Schreiben auf SD-Karte über SPI funktioniert nicht

Gast #3132994
Lesenswert?

Hallo zusammen,

ich habe mich jetzt ca. eine Woche sehr intensiv mit der Thematik Chans 
FatFs im Zusammenhang mit dem STM32 und SPI auseinander gesetzt.
Mit Hilfe der Bibliotheken von Martin Thomas und einigen anderen 
Codeschnipseln ist es mir nun gelungen, auf eine FAT32 formatierte Karte 
über SPI zuzugreifen.(vielen Dank schon mal für die hilfreichen Beiträge 
hier im Forum) Es ist mir möglich Ordner und Dateien anzulegen und diese 
auszulesen.

Was allerdings nicht funktioniert, ist das Schreiben in eine Datei. Beim 
Debuggen konnte ich feststellen, dass der Fehler: FR_INT_ERR von der 
Funktion remove_chain ausgegeben wird. Ich habe nun schon viele Sachen 
ausprobiert, aber nichts konnte den Fehler beseitigen.

Hatte jemand dieses Problem schon mal bzw. hat Tipps, was ich noch 
untersuchen könnte?
Gast #3133246
Lesenswert?

Andy schrieb:

> Was allerdings nicht funktioniert, ist das Schreiben in eine Datei. Beim
> Debuggen konnte ich feststellen, dass der Fehler: FR_INT_ERR von der
> Funktion remove_chain ausgegeben wird.

Da wäre mal interessant zu wissen, was FR_INT_ERR eigentlich bedeuten 
soll.

Aber abgesehen davon kommt mir eine Funktion namens "remove_chain" beim 
Schreiben in eine Datei einigermaßen deplaziert vor, denn dabei wird 
eigentlich niemals irgendeine Kette entfernt. Das passiert normalerweise 
nur beim Löschen oder Abschneiden einer Datei.
Moderator Persönliche Seite #3133382
Lesenswert?

Testweise zuerst
- die SPI-Frequenz verringern
- die SD-Karte neue formatieren
- DMA-Unterstützung deaktivieren (falls es noch der vor mir verbrochene 
Low-Level-Code ist, gibt es dafür ein define)
Wenn weiterhin Probleme bestehen, mit Hilfe des Debuggers die 
low-level-Funktion write_block untersuchen (wenn richtig erinnert in 
sd_spi_stm32.c). Chans FAT-Code ist eigentlich recht ordentlich, Fehler 
sind meistens eine Ebene darunter zu suchen.
Gast #3137266
Lesenswert?

Danke schon mal für die Hinweise.
@Martin
- mit der SPI-Frequenz war ne gute Idee, hat aber nichts geändert, war 
sogar runter bis auf 200kHz
- SD-Karten hab ich schon verschiedene ausprobiert und auch mehrfach neu 
formatiert mit FAT16/FAT32, zeigen aber alle das gleiche Verhalten
- ich hab nur Teile deines Codes ohne DMA verwendet

Ich habe die LowLevel-Datei jetzt nochmal mit angehängt, vielleicht 
fällt jemandem dort ja etwas auf.

Außerdem habe ich noch ein komisches Verhalten festgestellt, wenn ich 
Schritt für Schritt debugge, dann springt er nicht mit einem Fehler aus 
der Cluster-Funktion, sondern sucht den richtigen Cluster raus und die 
f_write-Funktion gibt die korrekte Anzahl geschriebener Bytes aus. 
Allerdings wird auch dann nichts auf die Karte geschrieben, sondern es 
wird lediglich angezeigt.
Angehängte Dateien:
Gast #3138417
Lesenswert?

Lösung gefunden!
Für alle Leute die auf ein ähnliches Problem stoßen, hier meine Lösung.
Es lag bei mir daran, dass die wait_ready Funktion scheinbar nicht lange 
genug gewartet hat. Nachdem ich den dortigen Timer wesentlich erhöht 
habe, funktioniert der Schreibvorgang einwandfrei. Außerdem muss man 
unbedingt darauf achten, dass man nach dem Schreiben f_close ausführt.

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