hei, PIC32MX795F512 MPLAP 8.84 C32 V2.02 Habe mir das Buch von Lucio Di Jasio gekauft. Wer kennt sich mit FAT, fileio, usw. aus? Möchte die Daten einer Datei (*.txt) von einer SD Card in das RAM des µC laden. Vielen Dank im Voraus schönen Tag
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.
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
> Wo werden die gelesene Daten von der SD Card abgelegt? Viel davon ist erledigt auf die FATFS Website. Wenn nur lesen, kann man eine Tiny Mode benutzen die viel weniger Ram Speicher benutzt. http://elm-chan.org/fsw/ff/00index_e.html
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.
:
Bearbeitet durch User
hei, Ich gehe die Sache langsam an. Habe heute zumindest meinen ersten PIC32MX zum Leben erweckt. Melde mich auf jedenfalls wieder. Vielen Dank für die Infos. schöner Abend
hei, habe es soweit, das ich von der SD-Karte 512 Bytes lesen kann. Die Datei hat derzeitig 3000 Bytes. Wie kann ich den Rest nachladen ? schönen Abend
Die Datei nicht schließen, sondern einfach nochmal 512 Byte nachladen, dadurch werden die nächsten 512 Byte geladen. Der Zeiger auf den letzten gelesesenen Datensatz im Fat Dateisystem wird automatisch inkrementiert.
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
Neben dem FatFs gibts da noch das PetitFS, es ist zwar sehr mickrig, aber es kann Dateien lesen und braucht sehr wenig Platz.
hei, wenn auch FatFs etwas mehr Speicher benötigt, lasse ich mir gerne Optionen offen. Dieser Code hat mit nur ein paar Einträge (PIN und SPIx) ändern sofort funktioniert. schönen Abend
Warum soll sich fp->buf ändern? Die eingelesenen Daten stehen in Buff[0] bei dir. Überprüfe mal diesen Wert. PS: Er hat nen PIC32, da sollte Speicher vorerst kein Problem sein, zumal man auch nicht alle Funktionen einschalten muss.
:
Bearbeitet durch User
>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?
>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.
hei, das mit "f_read" war ein Denkfehler von mir. nutze jetzt "f_gets" wie sieht es aus mit Dateinamen Länge größer 8 Zeichen? schönen Tag
@ 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
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.