Forum: Mikrocontroller und Digitale Elektronik Suche: Routine zum schreibern auf SD-Karte mit FAT


von Michael M. (eos400dman)


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

von rudi (Gast)


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.

von Uwe (de0508)


Lesenswert?

Hallo,

schau mal bitte hier nach:

FatFs Generic FAT File System Module

http://elm-chan.org/fsw/ff/00index_e.html

von holger (Gast)


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.

von Michael M. (eos400dman)


Lesenswert?

Danke für eure Antworten. Ich habe auch schon darüber nachgedacht den 
Controller zu tauschen, wollte das aber nach Möglichkeit vermeiden.
Vielleicht meldet sich ja noch jemand der eine Lösung weiß.

Gruß Michael

von Sascha W. (sascha-w)


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

von Michael M. (eos400dman)


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

von Martin T. (mthomas) (Moderator) Benutzerseite


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).

von Sascha W. (sascha-w)


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

von Ich (Gast)


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.

von Michael M. (eos400dman)


Lesenswert?

Hallo,

ich hab jetzt den Atmega 8 durch einen 168 ersetzt und verwende jetzt 
die Routine von Ulrich Radig. Die Initialisierung der SD-Karte läuft 
noch aber dann kommt der Fehler das die MBR Signatur nicht gefunden 
wurde.
Weiß jemand woran das liegen kann?

Gruß Michael

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.