Daten sequentiell in Datei auf SD-Karte speichern

#1158420
Lesenswert?

Ich möchte gerne von einem µC aus Daten fortlaufend in eine Datei auf 
einer SD-Karte schreiben. Die Datei soll am PC lesbar sein (FAT16). 
Damit kein FAT16 mit Schreibmöglichkeit unterstützt werden muss (wegen 
begrenzter Resourcen von Codeflash und RAM auf µC), soll per PC 
(Kartenleser) auf der SD-Karte eine große "leere" Datei angelegt werden, 
sodass der µC einfach in die Sektoren dieser bestehenden Datei 
reinschreiben kann.

Jetzt gibt es das Problem, dass man einen Pointer auf die zuletzt 
geschriebene Stelle nichtflüchtig speichern muss, damit nach dem Aus- 
und wieder Einschalten an der richtigen Stelle weitergeschrieben wird. 
Man könnte sich das z.B. in 4 Bytes im ersten Sektor der Datei 
speichern. Wenn man allerdings z.B. jede Sekunde diese Info dort 
abspeichert, dann wird wohl sehr schnell die zulässige 
Schreibzyklenanzahl überschritten und der Sektor defekt sein. Wie sieht 
das mit der Abnutzung der Flashzellen in einem Sektor genau aus? Der 
Sektor wird ja vermutlich intern erst gelöscht (z.B. Bits auf 0) und 
dann mit dem neuen Bitmuster beschrieben. Wenn ein Bit vor dem Löschen 
schon 0 war und beim neu Beschreiben auch wieder eine 0 bekommt, dann 
müsste es doch dann keine Abnutzung geben? Die Idee wäre, die 4 Bytes 
für die Positionsinfo nicht immer an die gleiche Position im Sektor zu 
schreiben, sondern über mehrere Bytes zu verteilen. Könnte man so das 
Problem mit der begrenzten Schreibzyklenanzahl lösen?
#1158614
Lesenswert?

Jetzt gibt es das Problem, dass man einen Pointer auf die zuletzt
geschriebene Stelle nichtflüchtig speichern muss, damit nach dem Aus-
und wieder Einschalten an der richtigen Stelle weitergeschrieben wird.
---

Die Lösung heisst NVRAM, das ist nichtflüchtig und kann beliebig oft 
wiederbeschrieben werden. Ausserdem kannst Du einen Sektor einer SD so 
oft beschreiben wie Du willst, er wird nie logisch kaputt gehen, die 
Karte ersetzt ihn fortlaufend durch Reservesektoren, die eingeblendet 
werden.

Den Firlefanz mit der SD Karte würde ich mir erst gar nicht antun, zudem 
Du nicht weisst ob der PC die Datei fortlaufend erzeugt hat oder nicht 
doch Sektorsprünge darin sind. Dann müssstest Du die Fat auslesen usw. 
Leider gibt es für PIC keine gescheite Fat Verwaltung, ausser 
Bezahllösungen, die zudem den teuren High Tech oder IAR Compiler 
erfordern, bekanntlich gibt es keinen GCC für PIC und der beliebte CCS 
ist durch die HAL zu keinem anderen kompatibel.
Gast #1159119
Lesenswert?

Vorschlag, welcher sich bei mir bewährt hat: 512 Bytes sammeln im RAM
des µC (512 Bytes = 1 Sektor) und dann Sektor für Sektor beschreiben. 
Den 1. Sektor für den Dateianfang muss man z. B. mit WINHEX  vorher 
suchen. Man kann damit wochenlang Messwerte auf der SD-Karte sammeln.

>Du nicht weisst ob der PC die Datei fortlaufend erzeugt hat oder nicht
>doch Sektorsprünge darin sind.

Karte formatieren und nur eine Datei anlegen.  Bisher keine Probleme

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