Hallo,
Zum Speichern von Daten auf einer SD-Karte über einen SD-Kartenleser bin ich über diese beiden Bibliotheken gestolpert.
Wo liegen die Unterschiede?
Hallo,
Zum Speichern von Daten auf einer SD-Karte über einen SD-Kartenleser bin ich über diese beiden Bibliotheken gestolpert.
Wo liegen die Unterschiede?
SD basiert auf einer alten Version von SdFat, aber ist im Prinzip ein Wrapper damit sie leichter verwendbar ist. Und ist stark abgespeckt so dass nur das nötigste drin ist.
SdFat kann viel, viel mehr, aber richtet sich eher an fortgeschrittene Benutzer. Wenn man da wirklich herausholen möchte oder muss was möglich ist, sollte man schon richtig C++ können und nicht nur die Arduino API. Sonst wird man mit Optionen erschlagen und versteht einiges an der Syntax nicht, da diese an Standard C++ und nicht die Arduino Vereinfachungen angelehnt ist . Neben dem Zugriff mit Methoden ähnlich zur Arduino SD Library gibt es da z.B. auch Low Level Methoden die schneller ist, aber halt schwieriger zu handhaben sind. Kommt auf die Anwendung an ob das nötig ist.
Danke für die Antwort.
Was ist denn die bessere Wahl, wenn ich eine möglichst hohe Abtastrate, also möglichst viele Daten pro Zeiteinheit auf der SD-Karte anstrebe?
Auch SDFat?
SdFat:
https://github.com/greiman/SdFat/blob/master/examples/LowLatencyLogger/LowLatencyLogger.ino
Oder auch:
https://github.com/greiman/SdFat/blob/master/examples/RawWrite/RawWrite.ino
Vieles in dem Code da ist für das Berechnen der Zeit, aber man sieht auch so wieso das so nicht in der Arduino Software ist
nutzi:
Was ist denn die bessere Wahl, wenn ich eine möglichst hohe Abtastrate, also möglichst viele Daten pro Zeiteinheit auf der SD-Karte anstrebe?
Auch SDFat?
Dann wohl SdFat. Wenn ich mir allerdings Deine Fragen im Nacchbarthread anschaue, dann wirst Du noch eine ganze Weile Grundlagen lernen müssen, um die SdFat vollständig nutzen zu können.
Gruß Tommy
nutzi:
Danke für die Antwort.Was ist denn die bessere Wahl, wenn ich eine möglichst hohe Abtastrate, also möglichst viele Daten pro Zeiteinheit auf der SD-Karte anstrebe?
Auch SDFat?
Neben Tommy56 und Serenifly noch von mir ein paar Gedanken.
Über was sprichst Du hier? Lese- oder Schreibgeschwindigkeit? So richtig geht das aus Deiner Frage nicht hervor.
Wenn es um das schreiben geht:
sdfat ist die bessere Wahl, weil da auch der Timestamp stimmt (Dateidatum/-Uhrzeit)
Wenn es ums lesen geht:
sd, weil die lib weniger zusätzliche Module und somit Overhead hat.
Wichtig ist, das die Karten das können!
Es nutzt nichts, eine langsame (lesen/schreiben) oder eine minderwertige (geringe Überschreibrate) SD-Karte einzusetzen und dann zu hoffen, das die (schnelle) Software das schon löst.
Ändert sich nicht auch die max Größe der SD-Karte?
FAT16 bis 2GByte; FAT32 über 2GB also SDHC bzw SDXC.
Grüße Uwe
Da die aktuelle SD ein Wrapper über der SdFat ist, sollte auch diese beide Formate können.
Gruß Tommy
uwefed:
Ändert sich nicht auch die max Größe der SD-Karte?
englisch:~~Sd card storage max size. - Storage - Arduino Forum
my_xy_projekt:
Über was sprichst Du hier? Lese- oder Schreibgeschwindigkeit? So richtig geht das aus Deiner Frage nicht hervor.
Es geht darum, die analogen Pins auszulesen und auf die SD-Karte zu bringen und das mit möglichst schneller Abtastrate.
Hi
Dann mach Das doch ... ich verstehe Dein Problem nicht?!?
Zeige uns, wie schnell Du Das hinbekommst und wir können vll. auf diesen Zug aufspringen und Dir was Schnelleres präsentieren.
Wie schnell kann's werden?
Mindestens die Zeit für die SD-Karte wirst Du brauchen - der ADC sollte sich so konfigurieren lassen, daß Du immer das zuletzt generierte Ergebnis abrufen kannst - also blind lesen und weg schreiben.
Vll. auf delay() und while-Schleifen verzichten und schon könnte was daraus werden.
MfG
nutzi:
Es geht darum, die analogen Pins auszulesen und auf die SD-Karte zu bringen und das mit möglichst schneller Abtastrate.
Ich schliesse mich postmaster-ino an, gebe noch den Hinweis zur Geschwindigkeit die Du mit der Hardware erreichen kannst.
SPI gut erklärt von Nick Gammon:
Wie benutzt man SPI auf einem Arduino? (in deutsch)
Das blockweise überschreiben einer 1GB SD 80x Karte dauert
11:20:01.280 -> Enter option: F
11:20:06.382 -> Card Size: 1019 MB, (MB = 1,000,000 bytes)
11:20:06.415 ->
*11:20:06.415 -> Erasing
11:20:07.252 -> ........
*11:20:12.952 -> All data set to 0x00
11:20:12.985 -> Erase done
ca. 6 Sekunden.
(Example aus der Bibliothek SDFat)
In 542 ms schreibt ein Sketch 1000(!) Abfragen des Analogsensors - also 1000 Bytes auf die selbe Karte.
Wobei das nicht ganz stimmt, da jeweils eine neue Zeie begonnen wird. Das hintereinanderschreiben von 1000 Analogwerten dauert nur ca. 300ms.
(Auf Basis des dataloggers umgeschriebener Sketch aus der SD-Bibliothek)