Forum: Mikrocontroller und Digitale Elektronik NMEA-Daten auf der SD-Karte im KML-Format speichern


von Yann B. (yann)


Angehängte Dateien:

Lesenswert?

Hallo,

ich möchte NMEA-Daten auf einer 4GB SD-Karte im KML speichern. Die 
SD-Karte ist eine SDHC von SAMSUNG und wird in den Kartenleser des 
Olimexboards SAM7-EX256 eingesteckt. Ich habe einen Beispielcode für die 
Ansteuerung einer MMC-Karte gefunden und es sieht schon gut aus aber ich 
komme immer noch nicht voran. Übrigens, meine SD-Karte ist im FAT 32 
formatiert worden.

Sowie ich es hier: http://elm-chan.org/docs/mmc/mmc_e.html gelesen habe 
sollte ich nach dem Software Reset (Befehl CMD0) den Befehl CMD8 mit dem 
richtigen CRC senden. Erste Frage, welcher CRC sollte es sein? Ist es 
auch 0x95? Anschließend sollte ich die Initialisierung mit ACMD41 (mit 
dem HCS Flag) beginnen. Danach sollte CMD58 ausgelesen und das CCS Flag 
geprüft werden. Im beigefügten Code (mmc.c) habe ich dies noch nicht 
implementiert.

2.Frage: Ist meine Vorgehensweise oder Vorstellung richtig? Wenn ja, wie 
kann ich es auf Basis dieses Beispielcodes am besten implementieren?

---------------------Das war es mit der Initialisierung---------------

Jetzt bezüglich auf das KML Format habe ich die RTKLIB runtergeladen und 
würde es gern verwenden. Aber ich bin ein bisschen verwirrt, weil ich 
dafür eine Datei im Code erstellen sollte und diese soll im KML Format 
gespeichert werden. Ich stelle mir vor, dass die Datei in der Funktion 
"mmcWriteBlock" erstellt werden soll, oder?

Erste Frage: wie kann ich eine Datei öffnen bzw. schließen?

2.Frage: wie kann ich die im kml Format speichern?

Ich freue mich auf irgendwelche hilfreiche Rückmeldung.

von Karl H. (kbuchegg)


Lesenswert?

Yann B. schrieb:

> Erste Frage: wie kann ich eine Datei öffnen bzw. schließen?

Das was du bisher hast ist sozusagen nur der Low-Level Treiber, der 
direkt mit der MMC Karte 'verhandelt'.
Was du noch brauchst ist ein Filesystem, dass dann die von der MMC zur 
Verfügung gestellten Speicherblöcke in einem Filesystem verwaltet

> Ich freue mich auf irgendwelche hilfreiche Rückmeldung.

Alle deine Fragen bzw. alles weitere findest du auch bei ElmChan
http://elm-chan.org/fsw/ff/00index_e.html

Und es hilft natürlich, wenn man sich erst mal mit dem Standard-C 
Filehandling vertraut gemacht hat. Das von ElmChan vorgestellte FatFS 
funktioniert da sehr ähnlich und ist ähnlich zu benutzen.

: Bearbeitet durch User
von Yann B. (yann)


Lesenswert?

Hallo Karl,

und danke für deinen Beitrag.

von W.S. (Gast)


Angehängte Dateien:

Lesenswert?

Yann B. schrieb:
> ich möchte NMEA-Daten auf einer 4GB SD-Karte im KML speichern.

Ja. Du hast nicht ein, sonder eigentlich drei Probleme:
1. Du mußt für deinen µC das FAT-Filesystem von Chan richtig aufsetzen, 
wozu du eine passende Implementierung der LowLevel-Treiber brauchst.

2. Du mußt lernen, Chan's FF in deinem Programm zu benutzen.

3. Du mußt die NMEA Daten in dein Zielformat konvertieren.

Zu 3. wozu eigentlich? Lege einfach fest, welche Datensätze du 
tatsächlich brauchst und schreibe sie direkt in deine Datei. Ist ja 
alles plain ascii, sollte also kein Problem sein.

Damit du nicht ganz im Regen stehst, hänge ich dir mal ein paar Dateien 
zum verstehenden Lesen hier an. Falls du dich entschließt, einen LPC2478 
zu verwenden, könntest du sie direkt verwenden.

W.S.

von Thomas W. (Gast)


Lesenswert?

Yann B. schrieb:
> ich möchte NMEA-Daten auf einer 4GB SD-Karte im KML speichern.

Das sind zwei verschiedene Datenformate. Du kannst nicht einen Satz auf 
Englisch auf Chinesisch schreiben.

von Karl H. (kbuchegg)


Lesenswert?

Thomas W. schrieb:
> Yann B. schrieb:
>> ich möchte NMEA-Daten auf einer 4GB SD-Karte im KML speichern.
>
> Das sind zwei verschiedene Datenformate. Du kannst nicht einen Satz auf
> Englisch auf Chinesisch schreiben.

Um fair zu sein, lässt sein Ausgansgposting zwischen den Zeilen schon 
erkennen, dass sich darin auch noch die Fragestellung "Wie wandle ich 
die aus NMEA extrahierte Information ins KLM Format um?" versteckt.

Und die Antwort drauf ist eigentlich die, die man praktisch immer 
anwenden kann:
Erst mal muss klar sein, was ich habe.
Dann muss ich mich damit beschäftigen, wie das Ergebnis aussehen soll
Sind die beiden Punkte soweit geklärt (nein, nur die Schlagworte zu 
haben reicht nicht. Wenn ich dir auf dem Papier einen NMEA Datensatz 
vorlege, muss dir klar sein, wie das zugehörige KLM Format aussieht und 
du musst es hinschreiben können), dann ergibt sich die Vorschrift wie 
man aus dem einen das andere erhält sehr oft ganz schnell. Im Zweifel: 
Papier und Bleistift nehmen und selbst ein paar Beispiele durchspielen.
Hier natürlich besonders einfach, da sowohl NMEA als auch KLM reine 
Textdaten sind.

Aber alles in allem stinkt die Fragestellung schon wieder mal ein 
bischen nach: Ich hab mir das alles viel einfacher vorgestellt und 
eigentlich kann ich das auch alles gar nicht.

: Bearbeitet durch User
von W.S. (Gast)


Lesenswert?

Karl H. schrieb:
> Ich hab mir das alles viel einfacher vorgestellt...

Ach Karlheinz, genau DAS  haben wir doch die ganze Zeit, immer wieder 
und wieder. Kauf dir nen australischen Chardonnay bei Aldi, das hebt.

Gut Nacht

W.S.

von Karl H. (kbuchegg)


Lesenswert?

W.S. schrieb:

> Kauf dir nen australischen Chardonnay bei Aldi, das hebt.

Kann der was?
Aber eigentlich eine gute Idee. Hab noch einen Chardonnay aus dem 
Kamptal im Kühlschrank. Den werd ich mal rausholen und ein bischen warm 
werden lassen.

> Gut Nacht
Ditto und Prost

von Yann B. (yann)


Angehängte Dateien:

Lesenswert?

W.S. schrieb:
> Falls du dich entschließt, einen LPC2478
> zu verwenden, könntest du sie direkt verwenden.

Dke W.S für deinen Post. Ich verwende das Board SAM7-EX256 von Olimex. 
Es ist der AT91SAM7X256 Mikrocontroller darauf.

Ich wollte gern schon lange mit dem ersten Punkt (was du genannt hast) 
anfangen aber der Low Level Treiber ist noch nicht funktionfähig. Ich 
möchte eine 4GB SD-Karte verwenden und es fällt mir immer schwer, diese 
zu initialisieren.

Laut Elm Chan (http://elm-chan.org/docs/mmc/mmc_e.html) sollte ich nach 
CMD0, das Kommando CMD8 mit dem Parameter 0x000001AA mit dem richtigen 
CRC-Byte senden. Wenn die Karte  mit 0x05 (illegal command error) 
antwortet, dann ist die Karte eine SD Version 1 oder MMC-Karte version 
3. Wenn die Karte akzeptiert wird dann sollte die Antwort im Format 
R7(R1(0x01) + 32-bit return value) aussehen.

1.Frage: bei R7 ist R1(0x01) das erste Byte? Wie sieht R7 konkret aus? 
sind diese 32 Bits nur Nullbits oder ist es nicht wichtig?

2.Frage: kann ich nur prüfen, ob 0x01 (R1) zurückgesendet wird, falls 
die Karte akzeptiert wird?

Bei der zweiten Frage habe ich eine LED zum Prüfen verwendet. Wie es im 
beigefügten zu sehen ist, prüfe ich nach CMD8 , ob die Antwort 0x01 ist. 
Wenn ja, dann sollte die LED leucten. Wenn nicht dann nicht leuchten. 
Bei mir leuchtet sie, also gehe ich davon aus, dass die SD-Karte 
akzeptiert wird, aber ich  bin nicht ganz sicher, ob der Test ok ist.

freue mich im Voraus.

: Bearbeitet durch User
von Yann B. (yann)


Lesenswert?

Kann jemand mir dabei helfen?

von Falk B. (falk)


Lesenswert?

Nimm das Projekt von Elm Chan KOMPLETT und passe es an deinen Controller 
an, das ist leicht. Dann läuft das.

Beitrag "Re: Elm Chan FatFs SD Karte auf Keil MCB2300 LCP2378"

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.