Forum: Mikrocontroller und Digitale Elektronik Schreiben auf SD-Karte, Daten gehen verloren


von Mans (Gast)


Lesenswert?

Hi, ich habe ein kleines Problem mit einer SD-Karte. Ich schreibe 
zeilenweise Daten mit einem Zeitstempel in eine Text-Datei. Alle 10ms 
wird eine neue Zeile in die Datei geschrieben. Ich komme so auf eine 
Datenmenge von 3,6KByte, die pro Sekunde auf die Karte geschrieben 
werden muss. Der SPI-Bus und die SD-Karte müssten das von der Datenrate 
locker mitmachen. Wenn ich jedoch über längere Zeit Daten aufzeichne, 
fehlen in unregelmäßgen Abständen mehere aufeinanderfolgende Daten (10 
Zeilen also 100ms). Für meine Anwendung ist das leider nicht sehr gut. 
Ich habe bereits mehrere SD-Bibliotheken ausprobiert, bei allen tritt 
das gleiche Phänomen auf. Meine Schaltung läuft auf 3,3V, ich brauche 
von daher keinen Pegelwandler oder ähnliches. Hatte vielleicht schonmal 
jemand ein ähnliches Problem oder hat jemand ein paar Tips? Viele Grüße, 
Mans

von Peter (Gast)


Lesenswert?

wird wohl ein software fehler sein. Selbst wenn der Bus nicht schnell 
genug ist würde man sotwas ja ein der Software merken und kann dann 
eventuell eine Meldung ausgeben.

von Martin T. (mthomas) (Moderator) Benutzerseite


Lesenswert?

Kann gut sein, dass die Karten selten aber bestimmt meherere 10ms 
benötigt, um einen Block zu schreiben. Bei einigen SD-Karten sind 200ms 
"block write time max." spezifiziert. Abhilfe schafft in solchen Fällen 
ein Zwischenspeicher (FIFO-Warteschlange), in den z.B. von einem 
Timer-Interrupt-Service-Handler oder einem Task im gewünschten 
Zeitintervall ein Datensatz geschrieben wird. In der Hauptschleife bzw. 
in einem anderen Task wird dann "nur noch" geschaut, ob Datensätze im 
Puffer stehen und diese dann der Schreibroutine übergeben.

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.