Ich erstelle ein Datenloggersystem, das Daten auf einer SD-Karte mit einer hohen Geschwindigkeit von etwa 20000 bis 30000 Bytes pro Sekunde aufzeichnet. Aber die SD-Bibliothek in Arduino schreibt derzeit Daten mit etwa 4500-5000 Bytes pro Sekunde, was zu langsam ist.
Ich habe diesen Hack gelesen , um die Schreibgeschwindigkeit zu verbessern , aber ich frage mich, ob ein direkterer Ansatz möglich ist, möglicherweise durch Anpassen der SPISettings .
sd-card
spi
datalogging
baud-rate
Ashish Ranjan
quelle
quelle
Antworten:
IN ORDNUNG. Also habe ich die SDFat lib ausprobiert. Diese Bibliothek ist definitiv besser als die Standard-SD-Bibliothek, die mit Adruino geliefert wird. Aber so habe ich mein Problem der niedrigen Datenrate nicht gelöst.
Ich bin den Anweisungen des Autors der SDFat-Bibliothek in diesem Beitrag gefolgt .
Laut fat16lib müssen wir flush () mit Bedacht einsetzen , um die Datenrate zu erhöhen. Wir möchten die Daten in jedem Zyklus schreiben (), müssen sie jedoch nur etwa alle 100 Zyklen löschen (), je nachdem, wie viele Daten in jedem Zyklus geschrieben werden. Stellen Sie außerdem sicher, dass das Flag in SD.open () als 'O_WRITE | O_CREAT 'anstelle von' FILE_WRITE '.
Dies erhöhte die Geschwindigkeit um einen großen Faktor. Aber ich brauchte mehr!
Das Speichern der Daten im Binärformat ( siehe Blog ) hat die Leistung noch weiter verbessert.
Meine aktuelle Geschwindigkeit beträgt ungefähr 100-120 KBit / s (das sind Kilobytes) mit einer SD-Karte der Klasse 4!
Zum Schluss möchte ich euch für eure Hilfe danken.
quelle
Viele Faktoren würden entscheiden, ob Sie diese gewünschte Geschwindigkeit erreichen können. Nur einige davon.
1. Ihre Software
Die SdFat- Bibliothek ist schneller als die Standard-SD-Bibliothek der Arduino IDE. Es hat auch eine einfach zu verwendende Kompatibilitätsfunktion mit der Standard-SD-Bibliothek. Versuch es.
2. Ihre Hardware
Sie sollten eine hochwertige SD-Karte verwenden. Wie Sie vielleicht wissen, werden SD-Karten in Leistungsklassen eingeteilt. Die meisten Internetnutzer empfehlen eine SanDisk SD-Karte.
quelle
Vermeiden Sie, dass der Handshake einen Puffer bekommt!
Verwenden Sie SD.write (Buf, Größe);
Hallo allerseits, ich arbeite in einem Projekt mit demselben Thema. Ich bin denselben Schritten wie Sie gefolgt und habe genau dieselben Zahlen erhalten. Ich habe es gerade behoben. Das Problem ist der Handschlag beim Anrufen der
SD.write()
.Stattdessen:
Tun:
In meinem Projekt habe ich als erstes 4100 Bytes und als zweites mit einem Puffer mit 128 (buf [128]) 145408 Bytes in meinem Projekt. Gut genug.
quelle