Suche: Routine zum schreibern auf SD-Karte mit FAT

OP #2366341
Lesenswert?

Hallo,

ich suche eine Routine um Daten auf eine SD-Karte in eine TXT. Datei zu 
speichern. Allerdings hab ich auf meinem Atmega 8 nur noch maximal 4Kb 
Flash frei, alles was ich gefunden hab braucht mehr Platz. Kennt da 
jemand etwas passendes?

Gruß und Dank Michael
Gast #2366376
Lesenswert?

Es gibt Routinen, die eine SD-Karte als lineares Speichermedium 
betrachten,  also ohne den Luxus eines Dateisystems, so ähnlich wie ein 
serielles EEPROM. Das könnte funktionieren. Das Auslesen ist dann aber 
mit z.B. Windows in einem Cardreader nicht ohne spezielle Programme 
möglich. Das müsste dann mit den gleichen Routinen geschehen. Eine 
Ausgabe über RS-232 zum PC könnte die Daten dann in eine Textdatei 
schreiben, die man dann mit z.B. einem Visual Basic Programm 
weiterbearbeiten könnte.
Gast #2366561
Lesenswert?

>ich suche eine Routine um Daten auf eine SD-Karte in eine TXT. Datei zu
>speichern. Allerdings hab ich auf meinem Atmega 8 nur noch maximal 4Kb
>Flash frei, alles was ich gefunden hab braucht mehr Platz. Kennt da
>jemand etwas passendes?

Nimm einen ATmega328, dann passt das schon.
#2367133
Lesenswert?

Hallo,

also vom Flash-Platz sollte das schon gehen ich hab in einem Projekt bei 
mir dafür reichlich 2kB Platz gebraucht - aber in ASM (auf einem '644).
Ich sehe allerdings eher das Problem das auf einem M8 der RAM knapp 
wird, da man zum 'freien' Schreiben einen bestehenden Block puffern 
muss. Da im RAM jedoch höchstens für einen 512Byte Block Platz ist 
müsste man die FAT-Funktionen so koordinieren das mit nur einem Puffer 
gearbeitet wird.

Sascha
OP #2368252
Lesenswert?

Hallo,

ich hab jetzt das Petit FAT File System gefunden das ja vom Flash her 
passen sollte. Allerdings ist mir nicht ganz klar wie ich die 
Initialisierung und das schreiben mit dieser Routine machen muss. Bei 
den anderen hat die Initialisierung immer geklappt, nur war dann der 
Speicher zu knapp.

Sascha Weber schrieb:
> mir dafür reichlich 2kB Platz gebraucht - aber in ASM (auf einem '644).

Wie viel RAM brauchst du denn? Und kann ich nicht auch eine ASM-Routine 
in C verwenden? Oder ist das sehr aufwendig? Hab ich noch nie gemacht.

Gruß Michael
Moderator Persönliche Seite #2368612
Lesenswert?

Im Samples zip-Archiv von der Petit FAT File System Module Seite findet 
sich ein Beispiel für AVR ATtiny85. Daraus kann man fast alles inkl. 
mmc.c übernehmen, lediglich die SPI-Schnittstelle zur Speicherkarte wird 
über das AVR USI-Module angebunden und die Routinen dafür sind in 
Assembler implementiert (usi.S). Diesen Assemblercode kann man recht 
einfach durch C-Code für Hardware-SPI ersetzen. Im Zweifel hilft das AVR 
Datenblatt und bei noch mehr Zweifel die low-level-Routinen in den 
Beispiele zum "großen" FatFS (avr/mmc.c).
#2369425
Lesenswert?

Michael Mayer schrieb:
> Wie viel RAM brauchst du denn?
ich verwende 2 Puffer zu je 512Byte und damit währe der m8 schon voll, 
aber ein paar Variablen und Stack braucht's ja auch noch

> Und kann ich nicht auch eine ASM-Routine
> in C verwenden? Oder ist das sehr aufwendig? Hab ich noch nie gemacht.
ich glaub ASM-Code in dieser Größenordnung in ein C-Program einpflanzen 
zu wollen ist keine gute Idee.

Sascha
Gast #2369440
Lesenswert?

Das einfachste wäre es, die SD-Karte mit einer einzigen, 
zusammenhängenden Textdatei der gewünschten Größe zu beschreiben. Die 
Textdatei ist werksseitig mit lauter 0x00 gefüllt.
Der µC weiß die immer gleiche Anfangsadresse und lässt Dateigröße und 
sonstige FAT-Sachen in Ruhe, er überschreibt nur den Inhalt der Datei.
Ich weiß nicht, wie viel Speicher du benötigst, aber da ja eine SD-Karte 
praktisch unbegrenzt Platz bietet, kannst du sicher auch 100 fixe 
Dateien der Größe 1MB (001.txt bis 100.txt) hintereinander abspeichern. 
Damit hast du 100 Dateien mit je 1MB Speicherplatz und der µC braucht 
sich nicht um die FAT-Verwaltung kümmern.
Am PC liest du die Dateien nur aus, dein Auswerteprogramm muss dann den 
nicht genutzten Speicher am Ende der Datei ignorieren.

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