Forum: Mikrocontroller und Digitale Elektronik mmc/sd-karten


von Philipp Karbach (Gast)


Lesenswert?

überlege gerade ob ich mir ne sd/mmc-karte und ne halterung kaufe und
dann mal ein was damit programmiere. Es gibt ja schon viel code um fat
und die karten aunzusprechen, ich lese aber öfters mal dass man beim
speichern "sowieso" probleme kriegt weil der interne speicher nicht
groß genug ist. Lohnt sich das überhaupt damit einen datenlogger zu
bauen? Hab im moment hier ne atmega8, der soll nach einigen aussagen zu
wenig speicher haben. Könnte man nicht einfach das ganze in
speicherstücke zerhacken und den internen speicher wieder löschen? Ich
kann mir irgendwie nicht vorstellen dass man damit keinen vernünftigen
datenlogger bauen kann! danke für eure antworten.

von Lupin (Gast)


Lesenswert?

wenn man nicht unbedingt auf speed setzt ist das RAM nicht so wichtig.
einen 512 byte buffer sollte man eigentlich haben aber es geht auch
ohne (wird dann aber sehr unschön). Man muss dann sehen, dass man die
Daten, die man einliest abarbeitet ohne sie zwischen zu speichern.

Schreiben ist daher problematisch, da man die FAT tabelle selber ändern
muss und nur in 512 byte blöcken schreiben darf. Wenn du nun 32 byte
ändern willst musst du den rest des 512 byte blocks zwischenspeichern
um keine daten zu verlieren indem du sie versehentlich auf 0 setzt

von Wolfram (Gast)


Lesenswert?

Kommt drauf an was du alles loggen willst
der ATMega8 hat 1K RAM

Abschätzung:
512Byte Sektorpuffer
100 Byte Dateisysteminterne Variablen <- Das sollte problemlos
schaffbar sein
100 Byte Stack

sind 712Byte
Also selbst mit einem ATMega8 gibt es im RAM kein Problem.
Aus eigener Erfahrung, wenn du ein komplettes Dateisystem
implementierst
(open,read,write,chdir,findfirst...) dann kann es mit 8K
Programmspeicher etwas eng werden, wenn dein Datenlogger auch noch ein
wenig tun soll und Strings vorhält. Aber nicht benötigte Funktionen des
Dateisystems muss man ja nicht einbinden.

von Philipp Burch (not logged in) (Gast)


Lesenswert?

Hi,

also soweit ich das gelesen habe, kann man die Blockgrösse für die
Karten selber bestimmen. Von 1 Byte bis 512 Byte (Oder sogar mehr?).
Man muss einfach aufpassen, dass man die internen "Blöcke" der Karte
(AFAIK 1kB) nicht überschreitet, daher nur Blockgrössen verwenden,
durch die 1'024 ganzzahlig teilbar ist. Dem Dateisystem kann es ja
eigentlich auch egal sein wie du schreibst und liest, Hauptsache die
Struktur stimmt beim Auslesen mit dem PC.

(Alle Angaben ohne Gewähr ;))

von Philipp Karbach (Gast)


Lesenswert?

hört sich nicht schlecht an :). ich glaub ich kauf mir einfach mal ne
karte ;).

von Wolfram (Gast)


Lesenswert?

programmier das eigentliche Dateisystem aber lieber auf einem PC
zugriff auf Karte über USBreader mit CreateFile
Vorteile:
geht schneller
plattformunabhängig
fördert ungemein die Aufteilung in mehrere Softwarelayer
sauberer C code (gcc und Visual C kompatibel)
bessere Debugmöglichkeiten
du kannst gleich anfangen

Wenn du mit einem Sektorpuffer arbeitest wird vieles unproblematischer

von Lupin (Gast)


Lesenswert?

Also das stimmt nicht 100%, weil nicht alle Karten das unterstützen.

Du kannst bei manchen die blocklänge fest legen aber ich glaube bei
vielen ist sie fest auf 512b. Wenn du nur ein paar bytes lesen willst
kannst du natürlich auch den 512b block lesen und die restlichen daten
weg schmeissen.

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.