Forum: Mikrocontroller und Digitale Elektronik Werte auf SD-Karte in Datei schreiben


von johnson (Gast)


Lesenswert?

Hallo,

ich weiss, dass es schon ein paar Diskusionen über SD-Karten gegeben 
hat... aber ich bin immer noch nicht ganz schlau geworden.

Ich möchte mir einen GPS-Loggerbauen, der jede Sekunde den NMEA 
Datensatz auf eine SD Karte schreibt (ich verwende einen Atmega8).  Die 
SD Karte möchte ich später in einem Kartenleser am PC auslesen und dann 
die GPS Daten als Weg z.B. in Google Earth anzeigen.
Ich habe bisher alles in Assembler geschrieben (GPS auslesen usw.), 
jetzt fehlt mir noch das Speichern auf der SD Karte.

Wie ist das denn am einfachsten zu realieren? Habe gelesen, dass manche 
eine Datei auf der Karte anlegen und dann an die Adresse der Datei 
schreiben - funktioniert das? Ansonsten habe ich auch Quellcode von 
Ulrich Radig gefunden, aber der ist ja in C. Dann müsste ich meinen 
Assemblercode in C integrieren oder? Hat mir jemand einen Tip wie ich am 
besten an das ganze rangehen könnte? Gibt es vielleicht auch irgendwo 
eine gute Erklärung?

Gruß Johnson

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Was Du brauchst, ist ein FAT16 Dateisystem auf Deiner Karte.

von Daniel R. (zerrome)


Lesenswert?

Fat in Assembler, viel Spaß. Wer viel Zeit hat^^

von Sebastian .. (zahlenfreak)


Lesenswert?

Geht auch. Zumal er es eben nicht komplett implementieren muss. Du musst 
nur die FAT finden. Dann gehst du in den Root-Ordner, holst dir die 
Clusternummer der datei "meine.dat" (oder so) und schreibst ab dort in 
die Datei. Die Datei musst du vorher am PC mit entsprechender Größe 
anlegen.

Ok, in Assambler ists schon etwas aufwand, aber auf jeden Fall machbar, 
vor allem, weil er eben sehr viele Einschränkungen eingehen kann.

Besorg dir auf jeden Fall das White-Paper von Microsoft. Da ist alles 
drin beschrieben.

Sebastian

von Daniel R. (zerrome)


Lesenswert?

Da könntest du auch mal vorbeischauen

http://www.mikrocontroller.net/articles/AVR_FAT32

:)

Um die eine oder andere 32 Bit Operation wird man nicht rum kommen und 
auslesen eines Sektors 512 Byte...Sonst, wenn man sich etwas einschränkt 
;)

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Das Auslesen des Sektors dürfte mit dem Mega8 aber schon ein Problem 
darstellen. Der Mega328 hat in jedem Fall mehr Ram und Flash und 
dasselbe Gehäuse.

von Daniel R. (zerrome)


Lesenswert?

Auch wenn es den johnson nicht mehr zu interessieren scheint,
mit nem mega8 wäre das trotzdem kein Problem es ist unglaublich was man 
mit 1KByte Ram so alles machen kann :)

von johnson (Gast)


Lesenswert?

Vielen Dank erstmal für die Antworten!

Dann werde ich das mit der SD Karte doch lieber in C machen...
Manche haben ja ihren Quellcode dazu bereitgestellt (z.B. Ulrich Radig) 
habe ich hier gelesen. Ich denke ich werde es damit versuchen... ich 
möchte mich nicht erst Wochen in das ganze einarbeiten.

Ich möchte aber möglichst meine Funktionen in Assembler weiterbenutzen.
Welche Möglichkeiten kennt ihr um C und Assembler zu kombinieren?
Man kann ja soweit ich weiss den Assembler Code per Inline Assembler in 
C integrieren oder man ruft die Assemblerfunktionen im C Programm auf.

Kann ich auch die C Funktionen in Assembler aufrufen?

Und wie funktioniert das ganze? Kann mir jemand mehr dazu sagen oder mir 
einen Tip geben wo ich mehr dazu finden kann?

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.