Pages: [1] 2   Go Down
Author Topic: Frage zum SD Karte beschreiben?  (Read 1393 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
God Member
*****
Karma: 4
Posts: 581
ATmega 2560
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

wenn man ein File von SD Karte öffnet und drin rum schreibt, muß man es wieder definiert schließen. Sonst droht Datenverlust. Soweit klar. Aber woher weis die Karte oder der µC wann ich dem Arduino den Saft weg nehme? Nicht das er genau in dem Moment auf die SD Karte schreibt.

Gibts da eine Arduino mäßige Automatik oder muß man das im Sketch einbauen? Was weis ich, einen Taster abfragen, wenn der gedrückt ist, weis der Sketch das nichts mehr geschrieben werden darf, dann kann man den Saft wegnehmen. Oder so in der Art. ???
Logged

Tschau
Doc Arduino

Cloppenburg
Offline Offline
God Member
*****
Karma: 23
Posts: 811
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Wenn du am PC in eine text Datei schreibst, ohne auf speichern zu drücken, woher soll der PC wissen dass du in 2 min den saft weg nimmst? Irgendwie.....
Logged

Arduino UNO, Ethernet Shield, Keypad Shield
1284p, Arduino MEGA.

Germany S-H
Offline Offline
Edison Member
*
Karma: 117
Posts: 2456
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Gibts da eine Arduino mäßige Automatik oder muß man das im Sketch einbauen? Was weis ich, einen Taster abfragen, wenn der gedrückt ist, weis der Sketch das nichts mehr geschrieben werden darf, dann kann man den Saft wegnehmen.

Nein, eine Automatik gibt es nicht, es sei denn, Du schreibst Dir selbst Deine eigene Automatik.

Z.B. wenn seit der letzten Schreiboperation Zeit x vergangen, dann einmal die Datei schließen und danach wieder öffnen. Dann verlierst Du beim Stromausfall allenfalls die Daten während Zeit x.

Einen langsamen Datenlogger kannst Du aber auch so schreiben, dass die Datei nur zum Schreiben der Daten geöffnet und danach wieder geschlossen wird, ohne dass die Datei zwischendurch länger geöffnet ist.

Logged

Offline Offline
God Member
*****
Karma: 4
Posts: 581
ATmega 2560
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

@ skorpi
Du hast die Frage nicht verstanden.

@ all
Also wenn die Datei offen ist, wird die "alte Datei" nicht beschädigt, weil die zu schreibenden Daten erstmal in einem Puffer landen. Wie groß ist der Puffer überhaupt? Die Datei auf der Karte wird erst aktualisiert wenn ich die Datei schließe. Habe ich das richtig verstanden?
Was passiert wenn ich genau dann den Saft weg nehme wenn er schreibt, also der Sketch die Datei schließt? Dann müßte doch die Datei auf der Karte beschädigt sein.

Ich meine, einmal das alles mit der SD Karte programmiert und auf den Arduino geflasht läuft der Sketch ja endlos. Dann gibts nur noch Reset oder Saft weg. Man sieht ja nicht wann geschrieben wird. Außer programmiert eine LED Anzeige ein.

Ich möchte einfach bei meinen Versuchen vermeiden das ich im dümmsten Moment den Saft wegnehme um dann am PC den Inhalt der Karte anzuschauen ob alles so klappt wie ich mir das vorstelle. Zum Bsp.


Logged

Tschau
Doc Arduino

Germany
Offline Offline
Faraday Member
**
Karma: 49
Posts: 2753
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich nehme für meinen DatenLogger eine LED, die mache ich zuerst an, dann versuche ich, die SD Karte zu initialisieren.
Falls OK (Karte drin): Datei öffnen, schreiben, Datei schliessen, noch 100 ms warten (damit man auch was sieht), dann LED aus.
Wenn keine Karte drin ist, bleibt die LED an, und jede Minute wird versucht, das Schreiben nachzuholen.
Ausserdem reicht der RAM, um  4 solche Datensätze zwischenzuspeichern.
Üblicherweise gibt es alle paar Minuten einen Datensatz zu schreiben/speichern.

Der Arduino läuft also weiter, während ich die Karte rausnehme, um sie am PC auszuwerten.
Während die LED kurz aufblinkt, ziehe ich natürlich nicht die Karte raus, falls das überhaupt gezielt möglich wäre.
Komme ich mit der Karte vom PC zurück, leuchtet die LED schon. Ich stecke die Karte rein, innerhalb einer Minute geht die LED aus und ich freue mich smiley-wink

Natürlich wäre es für die Lebensdauer der SD Karte  besser, jeden Sektor (512 byte) nur einmal zu schreiben, aber selbst so
(ca. alle 10 Minuten 50 byte ), d.h. jeder Daten-Sektor wird insgesamt 10 mal beschrieben und das Dateiverzeichnis (Dateilänge etc.) so  hundertmal am Tag, sehe ich vorerst keine Probleme.
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 236
Posts: 20281
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Du kannst einen dicken Kondensator auf die Versorgungspannung schalten und diese über eine Diode laden. Du kontrollierst die Versorgungspannung vor der Diode und bei absinken unter einen gewissen Wert (weil die Versorgungspannung von außerhalb fehlt) springst Du in die Abschaltfunktion die die ausständigen Daten in die Sd schreibt und das Fils schließt.

Du kannst auch einen Start-Stop Taster und ein Busy LED vorsehen Geht einfacher. smiley-wink
 
Grüße Uwe
Logged

Offline Offline
God Member
*****
Karma: 4
Posts: 581
ATmega 2560
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

oaky, dann werde ich einen Taster einbauen, womit der Sketch weis das ab jetzt nicht mehr erneut geöffnet werden darf. Eine LED wie Michael das macht werde ich auch einbauen. Gute Idee.  DANKE @ all

@ Michael
um die Abnutzung der Speicherzellen mußte Dir keine Sorgen machen. Der Karten interne Controller regelt das selbst. Er verteilt alle Schreibzugriffe selbstständig. Es ist nicht so wie bei mechanischen Festplatten das beim ständigen überschreiben der immer gleichen Datei immer der gleiche Sektor und damit die vermeintlich gleichen Speicherzellen beschrieben werden. Da müßte man am Karten Controller vorbei direkten Zugriff haben auf die einzelnen Flashzellen um immer wieder eine bestimmte zu beschreiben. Du kannst mehrere Jahre Deine Karte beschreiben. Dann werden die defekten Zellen ausgeblendet und erst wenn der Speicherbereich in Summe der intakten Zellen kleiner wird wie Deine Dateigröße bekommst Du ein Problem. Gute Controller und bugfreie Firmware zusammen lassen aber dann auf die defekten Zellen eh keinen Schreibzugriff mehr zu sondern nur noch lesend. Gilt für Speicherkarten wie für SSD's gleichermaßen.
« Last Edit: March 10, 2013, 04:21:35 pm by uwefed » Logged

Tschau
Doc Arduino

Germany
Offline Offline
Faraday Member
**
Karma: 49
Posts: 2753
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Gute Controller

Meines Wissens wird vom Arduino ziemlich "roh" geschrieben, also der zu schreibende Sektor gewählt.
Ist die übliche SD library ein "guter Controller" ?

Aber Sorgen mach ich mir eigentlich nicht...
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 236
Posts: 20281
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Der beschreibene Controller sitzt in der SD-Karte zwischen Anschlüsse und Speicherchip.
Da hat der Arduino nichts zu melden.
Grüße Uwe
Logged

Offline Offline
God Member
*****
Karma: 4
Posts: 581
ATmega 2560
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

wie Uwe schon schreibt. Du verwechselt jetzt was. Ich meinte mit "guten Controller" nicht den Arduino µC. Sondern den der in jeder Speicherkarte steckt. Blöd formuliert. Gibts überhaupt noch schlechte Controller in Speicherkarten? Ich glaube nicht. Nur noch bei SSDs zusammen mit verbugter Firmware.  smiley-wink

Meinetwegen kann der Arduino mit seiner Library immer den gleichen Sektor ansteuern. Das ändert aber nichts an der Tatsache das immer noch der Speicherkarten interne Controller, den ich meinte, dazwischen sitzt. Nur dieser hat direkten Zugriff auf seine Flashspeicherzellen wo letztlich alle Daten Bits und Bytes landen. Man hat bei Flashspeichern nicht mehr wie bei mechanischen Festplatten die volle Kontrolle wo die Daten genau landen. Du weist in welchen Sektor die Daten landen und wo Du sie abholst. Das reicht aus. Der Karten interne Controller nimmt das entgegen und verteilt intern lustig wie er möchte. Und auch nur er weis wo er die Daten wieder lesen muß wenn Du nach einem bestimmten Sektor von außen anfragst.

Mußte Dir vorstellen wie bei einer Konzertgarderobe. Du erhälst eine Blechmarke mit Nummer. Die Dame hängt Deine Jacke an irgendeinen Haken. Nur sie weis welche Marke zu welcher Jacke gehört. Die Dame wäre der Karten interne Controller. Und Du hälst die Blechmarke mit der Sektornummer in der Hand.

Nur dadurch kann der Karten interne Controller seine vorhandenen Speicherzellen gleichmäßig durch Schreibvorgänge abnutzen. Weil niemand anderes von außen dazwischen funken kann.

Nennt sich übrigens Wear-Leveling. Kannst ja mal das Internet danach befragen.  smiley

Logged

Tschau
Doc Arduino

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 236
Posts: 20281
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Man hat bei Flashspeichern nicht mehr wie bei mechanischen Festplatten die volle Kontrolle wo die Daten genau landen.
Ich bezweifle daß man diese Kontrolle bei mechanisch-magnetischen Festplatten noch hat. Auch dort gibt es Fehlererkennungmechanismen und Resevesektoren.  smiley-wink
Grüße Uwe
Logged

Offline Offline
God Member
*****
Karma: 4
Posts: 581
ATmega 2560
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

ach Uwe, mit Dir hab ich es auch nicht leicht.  smiley-wink

Bei mechanischen Festplatten wechselt aber nicht ständig "der Sektor", eigentlich Block, wenn man ein und die selbe Datei immer wieder überschreibt. Man weis also wo seine Bits und Bytes landen. Solange der intakt ist bleibt er gleich. Wenn er defekt sein sollte, ja dann weicht die Platte auf Reserveblöcke aus. Aber nur dann. Auch dann weis man dennoch, wenn man das möchte, wo sie gelandet sind. Außerdem kann man bei Festplatten direkt auf die Blöcke zugreifen mit irgendwelchen Spezialtools. Bei Flashspeicher geht das nicht. Ist ein kleiner aber feiner Unterschied. Und wenn die mechanische Platte immer öfters ausweichen sollte, dann hat sie eh ein Problem. Was nicht der Normalfall ist. Bei Flashspeicher wird bewußt über den gesamten Speicherbereich geschrieben um alle Speicherzellen gleichmäßig abzunutzen.

Logged

Tschau
Doc Arduino

Wien
Offline Offline
Edison Member
*
Karma: 23
Posts: 1664
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hi,

Quote
Man weis also wo seine Bits und Bytes landen

naaajaaaa...

ich hab' eine mechanische mit 4gb ssd-speicher. der controller bestimmt selbst, welche häufig benutzten dateien dort abgelegt werden.

Quote
Außerdem kann man bei Festplatten direkt auf die Blöcke zugreifen mit irgendwelchen Spezialtools.

das machen reparaturprogramme für kaputte sd-karten aber sicher auch...

gruß stefan
Logged

Offline Offline
God Member
*****
Karma: 4
Posts: 581
ATmega 2560
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

sagtmal Leute, lest Ihr die Texte auch oder überfliegt ihr die nur noch? Mit dem Thema habt ihr Euch noch nie beschäftigt? Oder.

Neumodische Hybridfestplatten die Du meinst, kann man nun nicht gleich stellen mit herkömmlichen mechanischen Festplatten die ich meinte. Ging eigentlich klar hervor.

Reparaturprogramme, Datenrettungsprogramme die Du meinst können nur noch das lesen was der Controller (Flashspeicher) als lesend zur Verfügung stellt. Ihr wisst schon wie Wear-Leveling arbeitet?

Logged

Tschau
Doc Arduino

Germany
Offline Offline
Faraday Member
**
Karma: 49
Posts: 2753
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Ihr wisst schon wie Wear-Leveling arbeitet?
Bisher nicht, daher vielen Dank an dich und Uwe, auch für eure interne Unterhaltung anschliessend.
(aber mach bitte nicht den Stefan an...) smiley-roll-blue

Für mich und andere Dummies heisst das, selbst wenn ich ohne Dateistrukturen und FAT-Formatierung direkt auf feste SD Karten Blöcke schreibe, der Karten-interne Controller sich darum kümmert, dass zu häufiges Schreiben desselben Blocks kein Thema für mich ist.
Logged

Pages: [1] 2   Go Up
Jump to: