Forum: Mikrocontroller und Digitale Elektronik STM32F4discovery und SD-Card


von Thomas R. (Gast)


Lesenswert?

Hallo,
ich versuche gerade ein Filesystem für eine SD-Card am STM32F4discovery 
zu nutzen.
Dazu möchte ich das Filesystem von ChaN einbauen.
Hat das schon mal jemand geschafft?

von MyName (Gast)


Lesenswert?

Klar,wenn Du bei Chan auf der Seite schaust dann siehst Du dass es da 
fur STM und.LPC schon Implementierungen gibt...

von Thomas R. (Gast)


Lesenswert?

Dort habe ich nur Implementierungen für stm32f10x gefunden.
Beim Umbau für den STM32F4 komme ich vom Hundertsten ins Tausendste...
z.B.:
      error: 'DMA2_FLAG_TC4' undeclared (first use in this function)
      error: 'DMA2_FLAG_TE4' undeclared (first use in this function)
      error: 'DMA2_FLAG_HT4' undeclared (first use in this function)
      error: 'DMA2_FLAG_GL4' undeclared (first use in this function)
usw.....
Da werden die Umbauarbeiten wohl sehr umfangreich.

von Thomas W. (diddl)


Lesenswert?

Habe SDIO am discovery F4 am laufen. Mit polling und DMA, 1 bit und 4 
bit.

Habe die standard ST samples leicht modifiziert damit sie unter CooCox 
laufen. Ich habe auch mit einer nativen Implementierung aus einem GIT im 
Netz herumgespielt. Die benötigt ganz wenig Platz, was beim f4 ja 
relativ unwichtig ist.

Kann dir ein CooCox Beispielprojekt zur Verfügung stellen, das die LED 
blinken lässt, das SD root Verzeichnis ausliest und am USART2 ausgibt. 
kein schöner Code, aus meinen ersten gehversuchen halt ...

---

Etwas tückisch ist das DMA, weil Blöcke an geraden Adressen beginnen 
müssen und weil nicht jeder Speicherbereich geht (zb. der freie 64K 
SRAM).

Deshalb habe ich jetzt in der entgültigen Version zwei 512 Byte Buffer 
eingebaut, die abwechselnd geschrieben werden. Und nur dann, wenn der 
DMA nicht direkt funktioniert.

von Thomas R. (Gast)


Lesenswert?

Hallo Namensvetter,
danke für das Angebot.
stm32f4_discovery_sdio_sd.c funktioniert auch bei mir prächtig.
Da drüber will ich aber das Filesystem von ChaN setzen - und da hapert 
es.
Meine Hardware ist ok, alle SD-low-level-Funktionen klappen, aber keine 
vom Filesystem - wie etwa f_open f_write etc.
f_open liefert z.B. /* (13) There is no valid FAT volume */
Da muss ich noch etwas weiter forschen...ich verwende übrigens auch 
CooCox.

von Thomas W. (diddl)


Lesenswert?

Ich verwende doch auch das FatFS von ChaN in Version R0.08b.

Die Anbindung im DiskIO habe ich nur rudimentär und einfach gemacht. 
Aber es läuft äußerst stabil und es gehen alle highlevel routinen 
tadellos.

Allerdings verwende ich die nicht direkt, weil ich bestehenden Code 
portiert habe wo die CLIB funktionen (fread, fwrite, fopen) bereits 
verwendet wurden. Aus diesem Grunde habe ich mir einen kleinen Wrapper 
geschrieben, damit ich den anderen Code nicht ändern muss. Der Wrapper 
ist allerdings nicht 100% implementiert, da ich zb. "append" bei fopen 
nicht benutze ...

Wenn ich nach Hause komme, suche ich dir das Zeugs mal zusammen.

von Thomas R. (Gast)


Lesenswert?

Es wär nett, wenn du mir das mal schicken könntest.
Ich verwende R0.09a von ChaN, habe dort alle Anpassungen an 
stm32f4_discovery_sdio_sd.c gemacht und bekomme nur Schrott bei den 
High-Level-Funktionen raus.

von Thomas W. (diddl)


Lesenswert?

Vielleicht liegts auch an deiner Toolchain? Probier mal mein mini 
Projekt:

vc20final.t-winkler.net/zip/M4/Stm32F407_blink_05.zip

von Thomas R. (Gast)


Lesenswert?

Besten Dank!!!
Dein Projekt funktioniert bei mir schon mal wunderbar.
Nun kann ich suchen, wo ich bei mir einen ganz gemeinen Fehler 
produziert hatte.

von Thomas W. (diddl)


Lesenswert?

Das ist schon mal gut. Wenn das Projekt geht (nicht nur die binaries), 
dann scheint deine Toolchain ok zu sein.

Hast du denn die PLL Einstellungen angepasst? Mit den originalen CooCox 
Dateien gehen die von 25MHz Quarz aus. Am Discovery ist aber ein 8MHz 
Quarz drauf. Außerdem ist die SystemInit() nicht aufgerufen worden.

von Thomas R. (Gast)


Lesenswert?

Hallo,
bei mir funktioniert inzwischen wirklich ALLES!
Im Moment läuft gerade ein Dauertest, bei dem ich eine SD mit Textfiles 
vollschreibe und anschliessend überprüfe. Das geht bisher fehlerfrei.
Den von dir mitgelieferten Wrapper habe ich mal testweise ausgeschaltet.
Es geht auch ohne ihn!?!
Meinen ursprünglichen Fehler habe ich auch gefunden:
FIL *myfile
statt richtig
FIL myfile
Manchmal sieht man den Wald vor lauter Tomaten nicht.
Die CLK-Leitung zur SD-Karte ist übrigens ziemlich empfindlich - mit 
einem Tastkopf dran geht nichts mehr.
Nochmals vielen Dank!

von Thomas R. (Gast)


Lesenswert?

Thomas Winkler schrieb:
> Außerdem ist die SystemInit() nicht aufgerufen worden.

Die wird doch schon von startup_stm32f4xx.c aufgerufen.
Inzwischen habe ich noch etwas rumgespielt:
Ohne irgendwelche Anpassungen schaffe ich ca. 180kByte/sec auf die 
SD-Card zu schreiben.

von Thomas W. (diddl)


Lesenswert?

Schön dass jetzt alles geht!

KB/s ist doch schon was. Mit 4 Bit geht es dann ertst wirklich schnell. 
Es hängt aber auch von der SD Karte ab. Für meine Zwecke alle male 
schnell genug.

von Robert H. (userx)


Lesenswert?

Thomas R. schrieb:
> bei mir funktioniert inzwischen wirklich ALLES!

Hallo Thomas,
könntest du mir eventuell dein Projekt zur Verfügung stellen.
Hätte mich in das Fat Fs von Albert McGilvra eingearbeite, welches 
jedoch irgendwelche windows.h usw. Libs verwendet, welche ich weder in 
coocox noch im Projektordner finde.

von Thomas W. (diddl)


Lesenswert?

Welchen Thomas meinst Du denn?

xs1541.t-winkler.net/zip/Zoomfloppy/Stm32F407_blink_06.zip

von Robert H. (userx)


Lesenswert?

Hey danke
lt. Zitat meinte ich eigentlich Thomas R.
arbeite mich aber gerade in deine 5er Version ein

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.