Forum: Mikrocontroller und Digitale Elektronik FatFS Beispiel STM3210C-EVAL f_open Fehler


von User861 (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
ich habe hier das STM3210C-Eval Board und versuche darauf, das FatFs 
Beispiel von ST zum laufen zu bekommen.
Laut readme sollte das Projekt direkt lauffähig sein.
Ich habe es mit SW4STM32 geöffnet, kann es ohne Fehler und Warnungen 
kompelieren und kann es auf den Controller laden. Es läuft auch zunächst 
ohne Probleme.
Die Karte wird gefunden, eingebunden und formatiert. Bei diesen 
Funktionen tritt kein Fehler auf.
Jedoch dann beim Versuch eine Datei zu öffnen respektive zu schreiben. 
Die Funktion f_open gibt immer den Fehler FR_NO_FILESYSTEM zurück.
Formatiert wurde die Karte jedoch, sehe ich in Windows. Habe die Karte 
mal testweise mit dem SD Card Formatter formatiert, und die Zeilen zum 
formatieren im Code auskommentiert, selber Fehler. Auch wenn ich die 
Datei am PC erstelle und drauf kopiere, kann der STM32 die Datei nicht 
lesen, wieder selber Fehler.

Beim debuggen habe ich den Fehler zurück verfolgen können. Innerhalb von 
f_open wird find_volume aufgerufen. Hier scheint dann das Problem von 
der Funktion check_fs zu kommen, da diese 2 zurück gibt.
Das ist der Teil vom Code, bei dem die 2 gesetzt wird:
1
/* 0:FAT boor sector, 1:Valid boor sector but not FAT, 2:Not a boot sector, 3:Disk error */
2
if (LD_WORD(&fs->win.d8[BS_55AA]) != 0xAA55)  /* Check boot record signature (always placed at offset 510 even if the sector size is >512) */
3
    return 2;

Laut dem Kommentar darüber scheint es keinen boot sector zu geben.

Wo liegt mein Fehler?
Danke :)

von Adapter (Gast)


Lesenswert?

Die Signatur 0xaa55 weisst darauf hin, dass das FS versucht, auf einem 
Jedec kompatiblen externen Flash Baustein zu arbeiten. Wenn dein FS aber 
(wie Du schreibst) auf einer SD Karte liegt, musst Du einen Anderen low 
level Treiber einsetzen. Soweit ich weiss, kriegt Du von einer SD Karte 
niemals Werte von "absoluten Adressen" zurück.

BTW, der ST Beispielcode is traditionell völlig unbrauchbar.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Adapter schrieb:
> Die Signatur 0xaa55 weisst darauf hin, dass das FS versucht, auf einem
> Jedec kompatiblen externen Flash Baustein zu arbeiten.

Was bringt Dich auf diese überaus interessante Idee?

Nein, mit JEDEC oder Flash hat das nichts zu tun.

> At the end of the boot sector is a two-byte structure
> called a signature word or end of sector marker,
> which is always set to 0x55AA.

Quelle:

https://technet.microsoft.com/en-us/library/cc976796.aspx

von Adapter (Gast)


Lesenswert?

ok, sorry, hast mich erwischt... erst nachdenken, dann posten... bitte 
löschen.

von User861 (Gast)


Lesenswert?

Hallo ihr zwei,

ich habe jetzt mal eine andere SD Karte probiert, und siehe da, damit 
ging es sofort. Keine Ahnung von welchem Hersteller die Karte ist, die 
dabei war, steht nichts drauf. Aber sie hat 2 GB und ist eine uSD.
Ich habe jetzt die uSD HC von SanDisk mit 32 GB probiert und die 
funktioniert einwandfrei.

Aber vielleicht findet sich trotzdem eine Lösung warum die beiliegende 
Karte nicht funktioniert.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

User861 schrieb:
> Aber vielleicht findet sich trotzdem eine Lösung warum die beiliegende
> Karte nicht funktioniert.

Vielleicht war sie nicht formatiert bzw. nicht richtig formatiert?

Wenn sie z.B. in einem Raspberry Pi o.ä. verwendet wurde, bestehen 
Chancen, daß sie mit irgendeinem unixoiden Dateisystem und nicht FAT16 
formatiert wurde.

Mit dem "SD Card Formatter" kannst Du SD-Karten standardkonform 
formatieren:

https://www.sdcard.org/downloads/formatter_4/

von User861 (Gast)


Lesenswert?

Hallo Rufus,

das hatte ich auch bereits getestet. Aber half leider nichts. Habe 
sowohl die schnelle als auch die ausführliche Formatierung getestet.

Heute habe ich noch zwei weitere SD-Karten ausprobieren können. Eine 
etwas ältere microSD mit 128 MB (ja, Mega, nicht Giga), mit welcher es 
ebenfalls nicht funktioniert.

Und dann noch eine 4 GB microSD HC von SanDisk, welche wiederum 
einwandfrei funktioniert.

Unter Windows funktionieren sie alle, aber auf dem Eval Board nur die HC 
Karten, wobei es auch egal ist, ob sie mit FAT oder FAT32 formatiert 
werden, entweder sie gehen immer, oder gar nicht.

von FloMann (Gast)


Lesenswert?

Die älteren v1 sd Karten i.r. Bis 2gb werden byteweise adressiert, die 
neueren dann per lba
wobei 1block immer 512Byte sind... Der Treiber muss erkennen um was es 
sich handelt
und entsprechend beim senden von befehlen wie read/write bei dem 
Adressen Parameter
berücksichtigen. Das wird beim initialisieren der karte festgestellt um 
was es sich handelt.
Die Sd card spec kann man runterladen, dicker wälzer, schaue dir die 
Initialisierung an und vergleiche mal mit deiner Implementierung. 
Eventuell liegt hier der Hase begraben wenn durch falsche Annahme nicht 
richtig adressiert wird, dann ließt man wider Erwartung ganz andere 
werte....

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
Noch kein Account? Hier anmelden.