Forum: Mikrocontroller und Digitale Elektronik Daten per µC möglichst sicher auf USB Stick schreiben


von B. J. (bjue)


Lesenswert?

Hallo,
es gibt fertige Module, die einem den Anschluss eines USB Sticks an den 
µC ermöglichen. Zum Beispiel im Beitrag [[USB-Stick am 
Mikrocontroller]].
Ich möchte zyklisch Daten auf den USB-Stick schreiben.
Prinzipiell erst mal kein Problem, wie aber geht man mit dem Problem des 
Spannungsausfalls beim Schreiben um?
Welche Strategie ist dabei die Beste, um möglichst viele Daten in einer 
oder auch mehreren abgeschlossenen Datei(en) vor dem Spannungsausfall 
sicher auf dem Stick zu haben? Mir kommt es dabei nicht zwingend darauf 
an die Daten zu haben, die direkt vor dem Spannungsausfall aufgetreten 
sind. Eine dauernd geöffnete Datei macht also sicher am wenigsten Sinn. 
Könnte man immer in zwei Dateien hintereinander schreiben? Dann erwischt 
es beim Spannungsausfall nur eine der beiden Dateien. Aber das kann 
grundsätzlich auch immer den ganzen Stick unlesbar machen, oder?
Schon mal vielen Dank für Anregungen und Hinweise zu dem Thema!

von Matthias K. (matthiask)


Lesenswert?

B. Jue schrieb:
> Ich möchte zyklisch Daten auf den USB-Stick schreiben.

Wie zyklisch? Sekunden  Minuten  Stunden?

> Aber das kann grundsätzlich auch immer den ganzen Stick unlesbar machen, oder?

Im Prinzip kann das passieren. Moderen Sticks rechnen damit, dass sie 
einfach so rausgezogen werden und sind diesbezüglich ziemlich tolerant. 
Fehler im Dateisystem treten aber schon mal auf.

von Peter II (Gast)


Lesenswert?

B. Jue schrieb:
> Eine dauernd geöffnete Datei macht also sicher am wenigsten Sinn.

warum? Eine Datei ist eigentlich nie offen, weil das mehr eine 
Festlegung vom Betriebsystem ist. Eine Datei Besteht aus datenblöcken 
was soll daran offen sein?

Wichtig ist das alles änderungen am Filesystem abgeschlossen sind. Es 
kann also nur zu Problemen kommen wenn gerade die FAT manipuliert wird. 
Wenn der der Zeit etwas passiert kann man nur hoffen aber nichts 
wirklich etwas machen.

Ich würde die Datei gleich sehr gross anlegen und dann einfach 
blockweise die Daten wegschreiben, dann kann nichts passieren weil ja 
das Filesystem nicht geändert wird.

von B. J. (bjue)


Lesenswert?

Danke erst mal für die Hinweise!
Mir würde es reichen, ca. alle 5 Sekunden ca. 100 Byte zu speichern.
Ich möchte das V2DIP1 Modul benutzen:
http://www.ftdichip.com/Products/Modules/Developme...
Hier kann ich über ASCII Befehle Dateien öffnen, schreiben, lesen und 
schliessen. In der Dokumentation zu dem Modul steht:
"If a BOMS device is removed during a write operation, or even while a 
file is open for writing, then data corruption is likely."
Daher bin ich am Überlegen, durch welche Maßnahmen ich die 
Wahrscheinlichkeit bzw. das Zeitfenster möglichst klein halten kann, 
dass dieses geschieht. Daraus resultiert auch die Idee, einfach zwei 
Dateien anzulegen, in der Hoffnung, dass zumindest eine davon lesbar 
bleibt.

von Stimmy (Gast)


Lesenswert?

B. Jue schrieb:
> wie aber geht man mit dem Problem des Spannungsausfalls beim Schreiben um?

http://www.mikrocontroller.net/articles/Speicher#EEPROM_Schreibzugriffe_minimieren

von B. J. (bjue)


Lesenswert?


von Frank K. (fchk)


Lesenswert?

B. Jue schrieb:
> Danke erst mal für die Hinweise!
> Mir würde es reichen, ca. alle 5 Sekunden ca. 100 Byte zu speichern.
> Ich möchte das V2DIP1 Modul benutzen:
> http://www.ftdichip.com/Products/Modules/Developme...
> Hier kann ich über ASCII Befehle Dateien öffnen, schreiben, lesen und
> schliessen. In der Dokumentation zu dem Modul steht:
> "If a BOMS device is removed during a write operation, or even while a
> file is open for writing, then data corruption is likely."
> Daher bin ich am Überlegen, durch welche Maßnahmen ich die
> Wahrscheinlichkeit bzw. das Zeitfenster möglichst klein halten kann,
> dass dieses geschieht. Daraus resultiert auch die Idee, einfach zwei
> Dateien anzulegen, in der Hoffnung, dass zumindest eine davon lesbar
> bleibt.

Mein Tip: Benutze das Modul nicht! Nimm eine SD-Karte als 
Speichermedium, die Du dann auf dem PC in einem Kartenleser ausliest. 
Wenn Du da einen Sektor schreibst, weißt Du, dass er auf der Karte 
angekommen ist. Bei dem USB-Modul sind zu viele Puffer dazwischen, auf 
die Du keinen Einfluss hast.

Du wirst selber ein FAT-Dateisystem implementieren müssen (oder eines 
der zahlreich vorhandenen bei Dir einbauen). Da kannst Du dann geeignete 
Maßnahmen ergreifen, z.B. eine große Datei in der FAT und im Directory 
anlegen, und dann erst die Datenblöcke schreiben.

fchk

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.