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?
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.
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.
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.
Achso, mir fällt noch ein, dass ich die disk_timerproc-funktion weggelassen habe, weil ich die nicht richtig verstanden habe. Könnte das auch einen Einfluss haben?
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.
Oder nen flush auslöst solange das geschriebene noch innerhalb der Sektorengrenze ist.
Wenn ich mich recht erinnere ist in der ffconfig.h ein define 0, 1, 2 drin welches du einstellen kannst Ob nur gelesen wird oder auch geschrieben wird
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.