Hallo zusammen,
nunja,
ich muss für die Uni recht kurzfristig für mein STM32 Board
eine SD Karten anbindung herstellen.
Nunja, hab mir Chan's FatFs "Beispielsprogram"
(bzw. die überarbeitete Version von M. Thomas) runtergeladen.
Abgesehen das man am Anfang vom Quelltext erschlagen wird,
hab ich noch nicht erkennen können,
wie man wirklich damit arbeitet.
Hat denn nicht jemand mal einen Mp3 Player auf Basis eines STM32,
oder irgendwas ähnliches gebastelt (z.B. GPS Logger) gebaut?
Würde mir gerne den Quelltext anschauen,
um daraus zu lernen.
Leider wurden viele Anfragen (ältere Threats von anderen)
unbeantwortet gelassen.
Hoffe dem passiert nicht so
Google überhäuft leider einem mit viel "Müll"
Grüße
Flo
> ich muss für die Uni recht kurzfristig für mein STM32 Board> eine SD Karten anbindung herstellen.
Und ich muss noch den Abwasch machen...
> Leider wurden viele Anfragen (ältere Threats von anderen)> unbeantwortet gelassen.
...aber es klingelt keiner an meine Tuer der mir die Arbeit abnimmt.
Dabei habe ich extra schon Pril besorgt.
> Hoffe dem passiert nicht so
Manchmal ist das Leben einfach hart.
Olaf
Ich sag ja nicht das ich was auf dem Silbertablet
präsentiert bekommen möchte,
nur reicht ja manchmal ein gutes Beispiel aus, um
etwas verständlich zu machen.
Sonst gib mir mal einen guten Hinweis Olaf,
weil meckern und motzen kann jeder.
weiß nicht, ob's hilft: Ich hatte mal ein einfaches FAT16 für AVR
implementiert, lediglich die SPI-Anbindung müsste an den STM32 angepasst
werden:
Beitrag "GPX-/GPS-Logger"
Dany Rosseel hat eine FAT32 Library für PICs geschrieben:
http://www.rosseeld.be/DRO/PIC/index.htm
Die habe ich mir für Atmels angepasst. Funktiniert besser, als was man
sonst noch findet. Ist für SDMMC, HDD und Compact Flash. Ist allerdings
in Pascal geschrieben(my favourite). Wenn du willst kannst du die ja
abkupfern und in deine Sprache übersetzen. Das meiste ist
hardwareunabhängig, bis auf das direkte Ansprechen der Hardware und das
timing.
Das ist irgendwo das Problem.
Bin ziehmlich frisch dabei, nur wie gesagt wird es von mir gefordert.
Ich denke mir die zwei Herren Chan und Thomas
mit Ihrer Entwicklung, eine Entwicklungsumgebung geschaffen haben,
wo es nur noch geht, mit einfachen Funktionen
mit einer SD Karte zu arbeiten.
Nur wie?
Z.B. wie mounte ich eine SD Karte und öffne eine bestimmte Datei?
Kann mir schlecht vorstellen das es so schwer ist,
nur ich als Anfänger hänge natürlich in der Luft.
Ich weiß das es nervtötend ist, einem Newbie etwas zu erklären,
nur komme ich leider nicht vorran -_-
auf der webseite is eine doku für die LIB
ebenso gibt es eine .rar oder .zip so etliche beispiele für msp , avr ,
sh drin sind
wer damit nich klarkommt ...
tja pech gehabt .. programmieren lernen
ich habe die lib auf einem blackfin am laufen
die einzigste datei die hardwarespezifisch angepasst werden muss ist die
diskio.c
die xmit funktionen
wie man die das ganze initialisiert und so ...
alles aus den vorhandenen beigefügten beispielen und aus der doku
rauszulesen
Florian schrieb:> Nur wie?> Z.B. wie mounte ich eine SD Karte und öffne eine bestimmte Datei?>> Kann mir schlecht vorstellen das es so schwer ist,> nur ich als Anfänger hänge natürlich in der Luft.
Traurig genug.
Wenn ein Beispiel dabei ist, dann sieht man halt einfach mal in die
main.c rein und dort wieder im Speziellen, welche Header Files
inkludiert werden. Eines davon ist das richtige. Dabei kann man ruhig
mal nach dem Namen gehen. Ein Include alle "#include uart.h" wird wohl
kaum etwas mit einem Dateisystem zu tun haben.
Hab mir mal das Zip-File für den AT91SAM geholt.
at91sam_chanfat_mthomas_20090915c.zip
In main.c wird ein
#include "diskio.h"
refernziert. Klingt gut. Also mal das File im Zip File gesucht und
angesehen.
Fast richtig. Das sind Low-Level Disk Funktionen.
Aber im gleichen Verzeichnis gibt es ein ff.h
Und am Ende dieser ff.h findet sich
1
FRESULTf_mount(BYTE,FATFS*);/* Mount/Unmount a logical drive */
2
FRESULTf_open(FIL*,constXCHAR*,BYTE);/* Open or create a file */
3
FRESULTf_read(FIL*,void*,UINT,UINT*);/* Read data from a file */
4
FRESULTf_write(FIL*,constvoid*,UINT,UINT*);/* Write data to a file */
5
FRESULTf_lseek(FIL*,DWORD);/* Move file pointer of a file object */
6
FRESULTf_close(FIL*);/* Close an open file object */
7
FRESULTf_opendir(DIR*,constXCHAR*);/* Open an existing directory */
8
FRESULTf_readdir(DIR*,FILINFO*);/* Read a directory item */
9
FRESULTf_stat(constXCHAR*,FILINFO*);/* Get file status */
10
FRESULTf_getfree(constXCHAR*,DWORD*,FATFS**);/* Get number of free clusters on the drive */
11
FRESULTf_truncate(FIL*);/* Truncate file */
12
FRESULTf_sync(FIL*);/* Flush cached data of a writing file */
13
FRESULTf_unlink(constXCHAR*);/* Delete an existing file or directory */
14
FRESULTf_mkdir(constXCHAR*);/* Create a new directory */
15
FRESULTf_chmod(constXCHAR*,BYTE,BYTE);/* Change attribute of the file/dir */
16
FRESULTf_utime(constXCHAR*,constFILINFO*);/* Change timestamp of the file/dir */
17
FRESULTf_rename(constXCHAR*,constXCHAR*);/* Rename/Move a file or directory */
18
FRESULTf_forward(FIL*,UINT(*)(constBYTE*,UINT),UINT,UINT*);/* Forward data to the stream */
19
FRESULTf_mkfs(BYTE,BYTE,WORD);/* Create a file system on the drive */
20
FRESULTf_chdir(constXCHAR*);/* Change current directory */
21
FRESULTf_chdrive(BYTE);/* Change current drive */
Bingo.
Da muss man halt mal eben die Augen aufmachen und ein wenig suchen. Hat
mich 20 Sekunden gekostet und ich hab die Funktionen gefunden gehabt.
Und ich muss das nicht für die Uni kurzfristig machen.
Florian schrieb:> Ich weiß das es nervtötend ist, einem Newbie etwas zu erklären,> nur komme ich leider nicht vorran -_-
Das ist kein NewBie Thema. Hast Du schon mal eine LED auf dem STM32
Board blinken lassen? Das ist in der Regel der Einstieg und dann
arbeitet man sich schrittweise weiter vor.
Der Ablauf für Dateiinhalt einlesen ist in etwas so:
@fdssd
du meintest "sd_spi_stm32.c" um hardwarespezifische Einstellungen zu
ändern.
diskoio.c finde ich zumindest nicht (mehr) in dem Paket.
@Buchegger, Danke
habs schlicht weg übersehen.
@Matthias
Ja Blinken von LEDs und Uart sind kein Ding.
Bzw. verstanden und hinbekommen.
Danke für den Code.
Das ist in etwa, das was ich gesucht habe,
um Verständnis zu entwickeln.
Florian schrieb:> du meintest "sd_spi_stm32.c" um hardwarespezifische Einstellungen zu> ändern.> diskoio.c finde ich zumindest nicht (mehr) in dem Paket.
ich rede auch von der original lib von chan
was wer irgdnwann wo verändert hat interessiert mich dann nicht wirklich
ich hab auch für meinen LPC die sachen angepasst um mit SPI-DMA zu
arbeiten
dafür musste ich zwar einiges anpassen aber es geht nun
auch wenn man anfänger ist ..
versuch das zu verstehen !!
code lesen ... nicht bis ins kleinste detail ..
aber gerade das was in der diskio.c und .h steht ist das wichtigste von
allen
der rest ist das Dateisystem und ist zumindest zum benutzen einfach da
dort rumzupfuschen wäre nicht sinnvoll
Karl Heinz Buchegger schrieb:> Da muss man halt mal eben die Augen aufmachen und ein wenig suchen.
Naja.. Ich hatte auch erstmal einiges an ChaN's Quellen umarbeiten
müssen, weil ich eben nicht mit Warnungen wegen mehrdeutiger Codestellen
"if (x=aFunc(y,z))" oder unerreichbarem Code usw. leben will.
Ansonsten ist die "Oberseite" von FatFs auch nicht so abstrahiert wie
man es gern hätte, so daß man Dinge wie ein wirkliches FindFirst,
FindNext usw. selbst auf die gebotenen Funktionen draufsetzen muß. Da
ist EFSL ein Stück besser, allerdings eben ohne LFN. Ach ja, auf die Art
der Pfade (nix mit C:\) muß man sich auch erst mal einstellen.
Was mir beim STM32 den heftigsten Ärger bereitet hatte, ist das
SD-Interface. Eigentlich ist es ja recht geradlinig und wäre auch von
Anfang an einfach zu benutzen, aber die Doku im RefManual ist mistig und
diese unsägliche Treiberbibliothek ist noch mistiger. Ich hab's sehr
zusammengekürzt und umgemodelt und entschlackt - es läuft seitdem auch
gut, aber ich bin mit dem Zusammenkürzen noch lange nicht fertig.
Kurzum, FatFs kann man nach Korrektur einiger Schlamperfehler recht bald
benutzen, aber mit der Hardwareseite wird unser Studiosus Florian sich
noch recht heftig befassen müssen - aber das übt. (und so soll es
sein..)
W.S.
Meine Beispielanwendung sieht möglicherweise auf den ersten Blick etwas
überfrachtet aus (ja, auf den zweiten wohl auch noch), ist aber im
Grunde nur eine Umsetzung von ChaNs Beispielen für andere Controller auf
STM32 mit einem kleinen "Extramenü" für Tests und z.B. auch als
Beispielanwendung der "EEPROM-Emulation" nach STM-Appnote.
Die Funktionen der FAT-Bibliothek sind auf ChaNs Webseite detailliert
erklärt. Die "Kommandozeile" entspricht der in den Beispielen von ChaN
für die anderen Controller. Wurde beides ja bereits oben geschrieben.
Die Befehle, die diese "Eingabeaufforderung" kennt, sind aus dem Code
ersichtlich (z.B. fo für file open) und man kann daran die Anwendung der
einzelnen Funktionen nachvollziehen.
Wenn vorher noch gar nichts mit STM32 entwickelt wurde, kann das
Beispiel ein Grundgerüst bieten, denn viel low-level-"Drecksarbeit" ist
integriert (Startup, Linkerscript, UART I/O, HW-RTC, System-Tick,
EEPROM-"Emulation", "Lebenszeichen"-LED). Erstmal alles so zum Laufen
bringen (evtl. Pins anpassen, "make all", flashen) und dann einfach den
eigenen Code dazwischen schreiben. Wenn man erstmal ein wenig
herumgespielt hat, kann man später alles für die Anwendung überflüssige
entfernen. (Machen einige Leute so, auch STM32-Einsteiger, erhalte
gelegentlich E-Mails die das belegen.)
Mein Beispiel nutzt nur die SPI-Schnittstelle (ich habe hier nur
"kleine" STM32 ohne SD-Interface). Falls die verwendete Hardware die
Speicherkarte über das STM32 SD-Interface anbindet, funktioniert mein
Beispiel nicht. Es gibt aber im Netz auch zumindest ein Beispiel mit
FatFs und STM32 SD/"MCI"-Interface. Wenn richtig erinnert, verlinkt ChaN
auch auf eine japanische Seite mit einem solchen Beispiel.
Ja, ich nutze Funktionen der "unsäglichen" STM32-Bibliothek zur
Ansteuerung der SPI Schnittstelle zusammen mit DMA. Ja, sd_spi_stm32.c
entspricht diskio.c in vielen anderen Anwendungen inkl. derer von ChaN.
schwer ist das ganze nicht
hab selbst erst einsteigererfahrungen mit C und NXP LPC17xx
aber trotzdem den uIP stack + chan FAT lib + SD karte + DMA-SPI in
wenigen stunden zum laufen gebracht
( also webseite von SD karte )
wenn man den code liest und zumindest das ansatzweise versteht wie das
funzt kommt man recht gut klar