SD Card, Datei ins Ram vom µC laden

#3351995
Lesenswert?

und wo liegt nun dein Problem?

Als FAT Dateisystem würde ich an deiner Stelle nicht das von Lucio 
nehmen, das ist zwar schnell und kompakt, aber hat kaum Funktionen, und 
man stößt schnell an dessen Grenzen,
ebenso nicht das MDDFS von Microchip, da es zwar umfangreich aber extrem 
langsam ist,
stattdessen würde ich and einer Stelle zum FatFS greifen. In den 
Beispielen ist eines für den PIC24 dabei, der Aufwand sollte minimal 
sein das auf dem PIC32 zum laufen zu bringen.
Hier findest du auch fertige Implementierungen für den PIC32:
http://www.microchip.com/forums/m563218.aspx

Du musst nur die mmc.c Datei an den PIC32 anpassen, d.h. dessen SPI 
Schnittstelle dort ansprechen, sowie einen Hardwaretimer bereitstellen, 
der Rest bleibt unverändert.
OP #3353917
Lesenswert?

hei,

Hallo Frank,
Habe mich für FatFS entschieden.
Ist ja ein mächtiges Programm. Werde mich langsam damit beschäftigen.

Wo werden die gelesene Daten von der SD Card abgelegt?

Derzeitig benötige ich nur "lesen" in meinem Projekt, ob ich auch 
"schreiben" benötige wird, kann ich noch nicht sagen.

schönen Tag
#3354401
Lesenswert?

L. R. schrieb:
> hei,
>
> Hallo Frank,
> Habe mich für FatFS entschieden.
> Ist ja ein mächtiges Programm. Werde mich langsam damit beschäftigen.
>
> Wo werden die gelesene Daten von der SD Card abgelegt?
>
> Derzeitig benötige ich nur "lesen" in meinem Projekt, ob ich auch
> "schreiben" benötige wird, kann ich noch nicht sagen.
>
> schönen Tag

Es funktioniert genauso wie das Filesystem von Lucio, d.h. du kannst 
dich vermutlich am Buch weiter einlesen und die Grundidee dahinter 
verstehen.

Generell ist die Vorgehensweise folgende:

Du erstellst ein Byte Array deiner Wunschgröße als Buffer im RAM.
Dann öffnest du die Datei mit FatFS und erhälst einen Pointer zu der 
Dateisturktur zurück.
In einer zweiten Funktion übergibst du diesen Pointer und einen weiteren 
Pointer zu deinem Buffer und gibst an wieviele Bytes eingelesen werden 
sollen, bspw. 512 oder vielfaches davon für eine gute Performance. (je 
nachdem wie groß dein Buffer ist)
Wertest die Daten aus, ließt wieder 512 Byte ein, ... bis das Ende der 
Datei erreicht ist.
Danach schließt du die Datei wieder.


Schau dir einfach die Beispiele an, bzw. die von Lucio für eine nettere 
Beschreibung.

PS: Die Performance des FatFS ist bei mir, zumindest zum PIC24 
Dateisystem von Lucio, identisch oder sogar besser. Also es ist wirklich 
ein super Dateisystem.
OP #3356161
Lesenswert?

Hei,

habe die datei nicht geschlossen.

FOpenRes=f_read (&file1, &Buff, 1, &numread);
FOpenRes=f_read (&file1, &Buff, 1, &numread);


Der Inhalt von fp->buf hat sich beim zweitem Aufruf von f_read nicht 
geändert.

Aller Anfang ist schwer. Aber es war kein Problem, die Port Pins und die 
SPIx anzupassen. nur ein paar Zeilen.

schönen Abend
Gast #3356179
Lesenswert?

>FOpenRes=f_read (&file1, &Buff, 1, &numread);
>FOpenRes=f_read (&file1, &Buff, 1, &numread);

>Der Inhalt von fp->buf hat sich beim zweitem Aufruf von f_read nicht
>geändert.

Was hat dein gezeigter Code mit dem fp->buf zu tun?
Gast #3356198
Lesenswert?

>Die eingelesenen Daten stehen in Buff[0] bei dir. Überprüfe mal diesen
>Wert.

Und mit seinem Code wird Buff[0] vom ersten f_read mit dem zweiten 
f_read
gleich wieder überschrieben. Das mag ja gewollt sein, oder auch nicht.
#3357746
Lesenswert?

@ L. R. (keyboard)

>das mit "f_read" war ein Denkfehler von mir.

>nutze jetzt "f_gets"

f_read ist die grundlegende LEsefunktion, um jedweils die nächsten x 
Byte der Datei zu lesen.  f_gets ist ein Wrapper, der am Ende f_read 
aufruft.

>wie sieht es aus mit Dateinamen Länge größer 8 Zeichen?

Geht bei FATfs auch, muss man halt in der config freischalten und die 
zusätzlich benötigten Funktion zum UTF-8 Support bereitstellen. Die sind 
aber in den Beispielen schon drin, muss man nur kopieren.

MFG
Falk

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