Forum: Mikrocontroller und Digitale Elektronik Clustergröße SD-Card verringern


von Jan Purrucker (Gast)


Lesenswert?

Hallo,

ich möchte mir einen Datenlogger mit einer SD-Card, die per SPI 
angesteuerert wird bauen. Nun ist es so, dass ich immer 1 Byte pro 
Zeiteinheit (z.B. 1s) darauf abspeichern will.
Nun ist es aber so, wenn ich ein Byte auf der SD Card abspeichere 
bereits 16kB (das 16000-fache!) belegt sind, weil diese eine 
Clustergröße von 16kB hat. Mit dem nächsten abgespeicherten Byte wären 
dann schon 32kB belegt. Das ist reine Platzverschwendung. Deshalb meine 
Frage, bevor ich weitere Überlegungen anstelle:

Gibt es eine Möglichkeit nacheinander 1 Byte auf einer SD Card im 
SPI-Modus abzuspeichern , ohne dass deswegen immer ein ganzes Cluster 
belegt ist?
Die Seite von www.ulrichradig.de habe ich schon durchsucht.Konnte aber 
nichts diebezüglich finden.
Für Hilfen wäre ich sehr dankbar.

Gruß
Jan Purrucker

von Philipp B. (philipp_burch)


Lesenswert?

Also die speicherbare Einheit bei SD-Karten ist meines Wissens 512 Byte. 
Du müsstest also entweder 512 Werte im RAM halten (Wenn dein Controller 
denn genügend RAM hat) oder halt jeweils 511 Byte verschwenden. Damit 
könntest du deinen Logger mit einer 256MB-Karte fast 6 Tage im 
Dauerbetrieb laufen lassen. Ob das reicht musst du selbst wissen.

von Jan Purrucker (Gast)


Lesenswert?

Hallo Philipp,

vielen Dank für deine Hilfe. Ich habe mal testweise eine 1Byte große 
Datei auf meine SD-Karte kopiert, und dann waren bereits 16kB belegt. 
Wenn ich unter Windows die Karte formatieren will, kann ich die 
Clustergröße auch nicht angeben.
Wie kann man dann eine SD-Karte formatieren, dass die Clustergröße 
512Byte beträgt? Und welches Dateisystem braucht man für einen 
Datenlogger?

Hab leider noch nicht so viel Erfahrungen mit SD-Karten Datenloggern. 
Deswegen die Fragen. Für weitere Antworten wäre ich sehr dankbar.

Gruß
Jan

von rene (Gast)


Lesenswert?

Probier mal nun ein byte oder zwei anzuhaengen und schau wie gross die 
datei dann ist.

rene

von Thomas (Gast)


Lesenswert?

Mach doch einfach z.B. pro Tag/Stunde eine eigene Datei auf, in die du 
dann (evtl. mit Zeitstempel) deine Messwerte zyklisch hineinschreibst.

Ich würde die Datei dann ersteinmal in ausreichender Größe nur mit 
Leerzeichen anlegen, damit - falls du FAT16 verwendest - nicht bei jedem 
neuen Eintrag die FAT neu geschrieben werden muss (Abnutzung).
Die Position des letzten Eintrages kann man ja relativ einfach wieder 
auffinden.

von Bernd R. (Firma: Promaxx.net) (bigwumpus)


Lesenswert?

Ihr sprecht von verschiedenen Sachen !

Ein Sektor auf der SD-Card wird sicher 512 Bytes haben, wahrscheinlich 
wird dieser schon durch mehrere Pages im Flash-Speicher gebildet. Das 
FAT-Dateisystem arrangiert dann mehrere Sektoren zu einem Cluster....

Ich würde erst mal darüber nachdenken, wie ich das FAT-Dateisystem in 
den uC bekomme, dann ist es auch leicht, an eine Datei ein weiteres Byte 
anzuhängen...

von Jan Purrucker (Gast)


Lesenswert?

Hallo,

ich habe gerade 4 einzelne Dateien mit jeweils 1Byte gespeichert -> 64kB 
belegt.
Danach habe ich eine Datei mit 4Byte gespeichert ->16kB belegt.
Da muß ich wohl noch Überlegungen anstellen, bevor ich zu basteln 
beginne.
Meine Frage ist nur, ob ich (entsprechende Foramtierung vorausgesetzt) 
512 Byte einzeln reinschreiben kann.
Weiterhin müsste ich dann wissen, wie ich die SD-Card formatiere.

Gruß
Jan

von Thomas (Gast)


Lesenswert?

> Weiterhin müsste ich dann wissen, wie ich die SD-Card formatiere.

Die handelsüblichen Karten sind schon in FAT16 formatiert.

Wenn du hier eine Datei erstellst, nimmt sie nunmal mindestens einen 
Cluster ein. Die Cluster sind nur bei Karten mit geringerer Kapazität 
kleiner, mindestens aber so groß wie ein Sektor.

Du musst halt mehr Daten in eine Datei schreiben, und nicht pro Datei 
nur 1 Byte!

von Jan Purrucker (Gast)


Lesenswert?

Hallo Thomas,

mein yC hat 1024Bytes Ram. Nun sammle ich meine Daten, bis ich 512 Byte 
voll habe, und danach beschreibe ich die Karte. Aber 16kB kann ich 
leider nicht sammeln, da mein Ram halt nur 1024 Byte hat. Ich 
recherchiere am besten nochmal im Web, bevor ich hier weiter Fragen 
aufwerfe.
Vielen Dank einstweilen. Sollte jemand einen Link zu einem ähnlichen 
Problem haben, wäre das nicht schlecht.

Gruß
Jan

von rene (Gast)


Lesenswert?

Probier's mal mit append zu einem bestehenden file.

rene

von fabse (Gast)


Lesenswert?

hallo
also du kannst auf eine MMC karte immer nur in 512byte(sektor) 
schreiben, kleiner geht net.
deine 16kb ist die clustergrösse deiner MMC karte, welche 32 
sektoren(512byte) zu einem cluster zusammen fasssen.
ansprechen tust du deine MMc karte sektor(512byte) weise, also solltest 
du immer 512 byte in deinem mikrocontroller sammeln und anschliessend 
auf das medium schreiben; so verschwendest du auch kein einziges byte 
deiner MMC.
falls zeitrelevant solltest du einen zeistempel zu jedem byte speichern.

gruss fubu

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
Noch kein Account? Hier anmelden.