-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: FAT 16 für SD Karte in CodeVision AVR ( gelöst ! )

  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    1.892

    FAT 16 für SD Karte in CodeVision AVR ( gelöst ! )

    Anzeige

    Hallo,

    ich bin auf der Suche nach einer FAT 16 lib zum schreiben von dateien auf eine SD Speicherkarte mit einem ATMEGA32 L8.
    Am liebsten wär mir ein Quellcode für CodeVision AVR.
    Ein wirklich gut dokumentierter Code für AVR GCC würde zur Not auch gehen.

    Ich möchte einen seriellen Datenstrom aufzeichnen und die ankommenden Daten auf die Speicherkarte schreiben, damit man sie mit einem Cardreader am PC wieder auslesen kann.

    Die Soft sollte also eine Datei öffnen, Daten in die Datei schreiben und die Datei wieder schließen können.
    Es soll auch möglich sein schon mehrere Dateien auf der Speicherkarte zu haben ( mehrere Logs ) und immer wieder eine Neue aufzumachen.
    Datei append brauch ich nicht.
    Die Karte wird exklusiv für diesen Zweck verwendet werden.

    FAT's hab ich schon einige gefunden, allerdings waren Die voller Fehler, oder ließen sich überhaupt nicht Compilieren.

    Den Quellcode von Ullrich Radig hab ich mir auch schon runtergeladen, der ist aber für GCC und nur sehr schwierig für CodeVision zu adaptieren.
    Ausserdem fehlt das komplette File Handling.

    Hat von Euch schon so etwas in Open Source gesehen ( ich will es ja selber erweitern )?

    Ich möchte halt gerne das Rad nicht zweimal erfinden müssen.

    Die Schaltung soll mal die Logfunktion für unser LiPo Voltmeter werden.
    Link: http://www.toeging.lednet.de/flieger...t/lipovolt.htm

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.06.2007
    Ort
    München
    Alter
    54
    Beiträge
    198
    FAT16 z.B. hier:

    http://www.dl8nci.de/sdcard001.html

    FAT12/16/32 z.B. hier:
    http://elm-chan.org/fsw/ff/00index_e.html

    letztere ist generisch in ANSI C geschrieben, sollte also auch auf CodeVision zu compilieren sein.

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    1.892
    Hallo Uffi,

    danke für Deine Antwort.

    Ich habs in der Zwischenzeit mit einer umgestrickten Version aus dem Microcontroller Net hingekriegt.

    Die dl8nci Seite kannte ich schon, ich hab allerdings den Quelltext zum Download nicht gefunden !? - Vielleicht bin ich auch zu blöde dazu

    Die Seite von ELM Chan ist meines Wissens die Grundlage von der LIB von Ulrich Radig.

    Da es läuft, werd ich es jetzt auch so lassen.

    Eventuell wär das auch mal ein Thema für RN-Wissen ?

  4. #4
    Hallo wkrug ...

    die Sorge, daß Du zu blöde wärst, auf meiner SD-Card-Seite die Sourcen nicht gefunden zu haben, kann ich Dir nehmen. Sie waren garnicht da!

    Ich habe sie jetzt als Link zugefügt (http://www.dl8nci.de/sdcard001.html#R9, Ref. 9). Wenn's Dich überhaupt noch interessiert, dann kannst Du ja mal von Zeit zu Zeit auf sourceforge.net schauen: https://sourceforge.net/projects/sd-cardandatmel/ oder einfach suchen mit "sd atmel". Dort treibe ich die Geschichte wieder etwas weiter. Wenn die Zeit reicht ...

    Aber wahrscheinlich ist der Hase längst über die Höhe ...

    Gruß ... Matthias.

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    1.892
    Hallo Matthias
    Danke für Deine Antwort.
    Ich werd mir die Sourcen auf jeden Fall mal anschauen.
    In der Zwischenzeit läuft das SD-Kartenschreiben schon sehr gut und zuverlässig.
    Die .lib hat aber auch so ihre Einschränkungen.
    Ich warte zur Zeit noch auf meine ersten Prototypenplatinen.
    In der Zwischenzeit hab ich auch noch verschiedene Datenübertragungsgeschwindigkeiten für den USART geproggt ( kein großer Aufwand ).
    Es soll ja mal ein Aufzeichnungsgerät für serielle Daten werden, im speziellen Fall für unserer Funktelemetrie.

  6. #6
    Hallo ...

    schön, daß schon was läuft ... ich habe meine SD-Karte eher in meinem selbstgebauten Datenlogger im Einsatz. Ich hatte mir mal ein Seismometer gebaut und zeichne jetzt schon seit fast einem Jahr die Daten mit einer Samplingrate von 100 Messungen pro Sekunde auf vier Kanälen auf. Damit habe ich eine Datenrate von rund 1 kB pro Sekunde, die problemlos verkraftet wird. Der FIFO wird garnicht richtig genutzt. Aber ohne würde es auch nicht gehen. Hängt aber auch ein wenig von der SD-Karte ab. Bei manchen langsameren Karten läuft der FIFO etwas voller als bei anderen Karten. Einmal die Woche tausche ich dann die Karte aus.

    Für Dich sind dann die beiden Files FAT16 und SD_api entscheidend. Im Idealfall solltest Du die unverändert verwenden können. Die Hardwarespezifischen Implementierungen sind in SD_interface drin. Dann gibt's noch 'ne Reihe Hilfsfunktionen, die aber nicht so entscheidend sind. SDCardExperiment3.c ist dann die Anwendung. Momentan aktualisiere ich recht häufig das doc-File https://sourceforge.net/project/down...iment3-doc.zip und arbeite an den Kommentaren. An der Implementierung tut sich erst mal nix.

    Ach so ... 1 kB pro Sekunde bedeutet, daß ich 9k6 ohne Schwierigkeiten ununterbrochen aufzeichnen kann. 19k2 ununterbrochen werde ich wohl nicht schaffen. Aber wenn Du einen Puffer implementierst, und die Daten eben nicht ununterbrochen kommen, dann kommt's ja nur auf die mittlere Datenrate drauf an.

    Wichtig: bislang kann ich nur FAT16 und Blockgröße 512 byte. D.h. bei 1 GB ist die Grenze. Die 2 GB-Karten haben 1 kB Blockgröße. Die Arbeit habe ich mir noch nicht gemacht, das auch zu ermöglichen. Aber auf einem Mega32 würde das auch recht eng werden ... Mega64 müßte aber gehen, weil er ein doppelt so graßes RAM hat, wie der Mega32.

    Gruß ... Matthias.

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    1.892
    Ich hab ne ASCII Zeichen übertragung am laufen, mit den Eckparametern 38400,8,N,1.
    Allerdings wird nur jede Sekunde ein kompletter Datendsatz gesendet.
    Es werden 12 Spannungen, Drehzahl, 2 Temperaturen und ein Stromwert übertragen.
    Also fast keine Last für den Controller.

    Die Empfangsroutine läuft in einem Interrupt mit einem 127Byte großen Puffer.

    Für die FAT hab ich ein Pufferarray ( Sektorpuffer ) von 512Byte reserviert.
    Sehr viel mehr geht beim Mega32 auch nicht.

    In so eine Datei soll maximal ein Flug oder eine Ladezyklus von einer bis eineinhalb Stunden.

    Eine Übliche Aufzeichnugsdauer sind 10...15min, also ein Flug.

    Mein Problem ist schon eher die maximale Anzahl der Dateien, die ja bei FAT 16 auf 512 beschränkt ist.

    Wenn man aber die Karte jede Woche einmal leert wird auch das sicher kein Problem werden.

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    03.01.2009
    Beiträge
    17
    Entschuldigt bitte wenn ich das hier hochziehe, aber ich habe mich die letzten Tage mit dem Thema beschäftigt.
    Ich habe mir die Dateien von SN7400 runtergeladen und auf meine bedürfnisse angepasst.
    Ich kann es momentan leider nicht testen, habe aber eine Frage:
    Kann ich mit der funktion fat16_put() immer nur ein Byte übertragen, oder kann ich auch ein char übertragen?
    Weil ich habe einen string, ähnlich dem von wkrug (von einem GPS-Modul). Leider hat er nicht geschrieben welche Variante er nutzt zum beschreiben der SD-Karte, sonst hätte sich das wohl schon geklährt, würde er den gleichen Code nutzen.

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    1.892
    Ich hab das so gelöst:
    Code:
    //LOG Pin ist 1 und Datei ist geöffnet
            if(LOG>0&&ub_open>0&&rx_counter>0)
                {
                //Ein Byte wird geschrieben
                    c=getchar();
                    uc_return=ffwrite(c);
                    if(uc_return != 0)
                        {
                        strcpyf(uc_buffer,"<Fehler>\r\n");
                        for(c=0;c<strlen(uc_buffer);c++)
                            {
                            putchar(uc_buffer[c]);
                            }
                            
                        }
                    else
                        {
                        putchar(c);
                        };
                }

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.08.2008
    Ort
    DE
    Beiträge
    523
    Hallo,
    wollte jetzt auch mal ne sd an meinen mega32 anschließen um was zu speichern, leider wird meine sd nicht erkannt und ich weiß nicht warum, bin die schaltung schon 1000x durchgegangen. Hab mich nach der doku von u. radig gehalten.

    mfg

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •