Hi,
in meinem uC Projekt verwende ich einen USB Stick mit FAT32.
Ich schreibe ein paar Logs und Tabellen, aber auch einen langsamen Datenlogger, der bis auf 1s Abtastrate eingestellt werden kann. Die ganze Geschichte ist weder von der Datenmenge noch Geschwindigkeit sonderlich speziell.
Das System wird einfach über einen Hauptschalter mitten im Betrieb ausgeschaltet, wenn es nicht mehr gebraucht wird.
Jetzt kam immer mal wieder vor, dass entweder Dateien oder das ganze Dateisystem korrupt war und ich den Stick am PC nicht mehr nutzen konnte ohne zu formatieren.
ich habe nun ein Testprogramm geschrieben und ein Relais in die USB Datenleitungen eingeschleift. Damit unterbreche ich beim Schreibvorgang die Verbindung zum Stick um genau "Datenverlust" zu provozieren. Klappt nicht.
Daher frage ich mich, ob ich das richtig mache.
file open() loop: file write() file flush()
Bei flush versuche ich "zeitgleich" über das Relais den Stick zu trennen.
Ist das die richtige zeitliche Stelle? Bei file write() wird ja nur in den Buffer geschrieben und wenn dieser voll ist wohl geflusht.
Ich bin dankbar über antworten:
- Mache ich das richtig?
- wie verhindere ich eine Datei(system)korruption?
- Was muss gerade auf dem Dateisystem ablaufen, dass es zur Korruption kommt?
Wäre wirklich toll, wenn ihr mir den Einstieg erleichtert. Dateisysteme und USB Sticks sind mir im embedded Bereich zwar nicht neu, aber tief bin ich nie eingestiegen.
IDE: e²studio
LIB: Reneas Synergy FileX aus dem SSP 2.2.0
HW: S5D9
Wie fahre ich so einen Schreibvorgang richtig herunter bei power loss? kann ich das über interne Funktionen lösen, ohne Außenbeschaltung?