www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Daten sequentiell in Datei auf SD-Karte speichern


Autor: M. G. (looking)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>(wegen begrenzter Resourcen von Codeflash und RAM auf µC),

Fehler Nummer eins.
Du wirst mit dieser Lösung nie glücklich werden.

Autor: Peter Roth (gelb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auf atmel.com gibt es bei den AVRs die Application Note AVR101: High 
Endurance EEPROM Storage. Dort wird ein speicherschonender Ringpuffer, 
also das, was du vor hast, genau beschrieben.

Grüße, Peter

Autor: Oliver Döring (odbs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ähem.

Setzen SD-Karten das "wear levelling" nicht schon intern um? Sonst würde 
mit einem FAT (!) Dateisystem niemand auf Dauer glücklich werden.

Autor: Bernd Rüter (Firma: Promaxx.net) (bigwumpus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab so etwas in der Art letztes Jahr mal entwickelt - mit einem PIC.

Wie oft hast Du Sachen, die gespeichert werden ?
Wie lange soll das Gerät laufen ?

Autor: Christian J. (elektroniker1968)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Wolfgang-G (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.