Initialisierung der SD-Karte schlägt fehl nach Stromunterbrechung

Hallo,

ich habe ein Problem (wie so viele) mit der Verwendung von SD-Karten. Ich nutze einen Adafruit Feather M0 mit Adalogger Featherwing (SD und RTC). Als Bibliothek nutze ich SdFat. Immer wieder kann die SD-Karte nicht initialisiert werden. Nach Tagen des Ausprobierens habe ich jetzt festgestellt, dass wenn eine Datei geschrieben wurde und die Stromzufuhr entfernt wird und danach wieder zugeführt wird, dann funktioniert es nicht mehr. Wenn ich aber während des Kabelentfernens den Reset-Knopf gedrückt halte und dann das Kabel wieder verbinde (ohne Reset), funktiniert das Schreiben der Daten.

Also muss irgendetwas beim Drücken des Reset-Knopfs passieren, dass die SD-Karte schließt oder vernünftig beendet, für mein Verständins. Die Dateien werden immer ordnungsgemäß geschlossen oder eben mit flush(). Daran liegt es nicht. Wenn ich das Kabel ohne Reset entferne, hilft nur noch, eine neue Datei am PC auf die SD-Karte anzulegen. Dann wieder zurück in den Arduino und nach Reset klappt es dann. Deutet für mich auch darauf hin, dass auf der SD-Karte am PC etwas richtig geschlossen wird.

Irgendwer eine Idee? Muss doch möglich sein, den Strom einfach wegzunehmen.

Besten Dank.

Wenn Du den Strom einfach weg nimmst, wirst Du auch am PC Probleme bekommen können. Wenn Du Pech hast ganz große Probleme.

Gruß Tommy

Hallo,

Tommy56:
Wenn Du den Strom einfach weg nimmst, wirst Du auch am PC Probleme bekommen können. Wenn Du Pech hast ganz große Probleme.

Am RasPi und vermutlich auch beim Arduino, ESP usw. beim Schreiben reichen die Probleme von "Windows will die Karte überprüfen" über neu formatieren bis zu Karte ist für die Mülltonne...

Also auch da Spannungsausfall früh genug erkennen, ausreichend puffern und Schreibzugriffe sauber beenden bevor der Strom alle ist.

Gruß aus Berlin
Michael

Danke für die Infos. Das Problem tritt ja dadurch auf, dass die Daten innerhalb der loop() geschrieben werden. Da ist ja permanent ein Zugriff auf die SD vorhanden. Die Daten sind letztlich ja auch vorhanden, nur die SD an sich wird eben nicht freigegeben.

Wie kann ich denn den Spannungsausfall erkennen und dann ggf. puffern? Wie sieht das dann hardware- bzw. softwareseitig aus?

Gruß Tobias

Hallo,

ich kenne das Adafruit Feather M0 selbst nicht, nach den Bildern scheint das doch sowie Akku-Anschluß, Lade-IC usw. gleich mit drauf zu haben?

Akku-Spannung scheint zum Messen wohl an einem Analogeingang zur Verfügung hestellt zu werden?

Gruß aus Berlin
Michael

Lt. Schaltplan wird sie das.

Gruß Tommy

Hallo,

ah okay, danke für die Hinweise. Es gibt die Möglichkeit die Akkuspannung auszulesen über den BAT-Pin unter Verwendung von Pin D9 bzw. A7. Das meint ihr sicherlich? Das ist hier beschrieben:

Das klappt auch soweit. Damit könnte ich dann über eine Abfrage schauen, ob die Akkuspannung unter einen bestimmten Wert sinkt und die Datei richtig schließen oder? Was kann ich noch in der Abfrage durchführen, damit die SD freigegeben wird? Denn wie anfangs beschrieben, führt das Schließen nicht unbedingt dazu, dass beim Entfernen und wieder Hinzufügen der Stromversorgung die SD-Karte wieder erkannt wird. Letztlich sowas wie “unmount”. Beim Reseten funktioniert es ja auch, also muss da ja noch irgendetwas ablaufen?

Gruß Tobias

Hi,

als ich vor geraumer Zeit meine China-SD-Card-Reader ausprobiert habe, war nach Entnahme und zurückstecken der SD-Card (in Schreibpausen!) die Zeile "SD.begin(Pin);" erforderlich, evtl. ist es das was Du suchst.

Gruß André

Hi

t_0_b_1:
Beim Reseten funktioniert es ja auch, also muss da ja noch irgendetwas ablaufen?

Hier unterliegst Du einem Irrtum!
Wenn Das bisher schadfrei daher gekommen ist, hattest Du schlicht einfach nur Glück. Spiel Lotto, Das könnte was werden!!
Der Reset geht direkt auf einen µC-Pin, Das läuft komplett in Hardware ab, da kümmert sich NIEMAND um Deine SD-Karte, angeschlossene Relais oder LEDs - der Chip geht auf Grundstellung und fertig.

DU musst dafür sorgen, daß Deine SD-Karte die Behandlung, Die Sie erfährt, überlebt.
Z.B. dadurch, daß Du bei wegbrechender Spannung ‘noch schnell’ alle wichtigen Daten weg schreibst und die Karte aushängst.
Zur Erfassung der Versorgungsspannung solltest Du Dir noch eine Schaltung überlegen, Die Deinen µC ‘etwas länger’ auf Saft hält, als die Versorgung vorhanden ist - sollte z.B. irgend wer den Akku einfach abklemmen, bekommt der µC ganz schnell glänzende Augen - so ganz ohne Strom kann auch Der Nichts.

MfG

... daß Du bei wegbrechender Spannung 'noch schnell' alle wichtigen Daten weg schreibst und die Karte aushängst.

Daten wegschreiben klappt ja aber wie hänge ich die Karte aus? Gibt es da Befehle für?

Gruß Tobias

Nach file.close() brauchst du nichts mehr zu machen.
Aber close() ist unbedingt nötig, bei Dateien die zum Schreiben offen sind.
Kann auch sein, dass close() ein paar ms dauert und die Karte in der Zeit richtig Strom braucht.

Beim Neustart nach Reset (Spannungswiederkehr) fängst du immer mit sd.begin() an.

Es gab früher mal Probleme, wenn du im laufenden Betrieb die SD Karte wechseln wolltest, und ohne Reset mehrfach sd.begin() machen wolltest. Das ist hier aber nicht dein Problem.