-
Hallo Klebwax,
ich bin für Vorschläge gerne offen. Im Moment habe ich eine Denkblockade wie ich es anders lösen könnte. Ich würde gerne erst mal beim Flash bleiben wegen meinen schlechten Erfahrungen mit der SD-Karte. Alleine die Verfielfachung der nötigen Akku-Kapazität schreckt mich schon ab.
Vielleicht fällt dir, oder jemand anderem eine Lösung ein
Der groben Ablauf: Ein µC sammelt Daten. Alle 30 Sekunden kommt ein Datensatz dazu. Alle 10 Minuten versucht der Controller alle unverarbeitete Datensätze zu verarbeiten. Ob er es schafft hängt von diversen Signalen ab, die an den IO-Leitungen anliegen. Ein Datensatz darf nicht zwei mal verarbeitet werden.
Ein Datensatz besteht aus 16 Byte + die von mir ausgedachten Flags "vorhanden" und "verarbeitet".
Ich möchte das Gerät ein paar Tage (max. eine Woche) im Betrieb haben, ohne das Daten verloren gehen. Die Daten werden dann von mir über eine Schnittstelle ausgelesen.
Wenn ich das Inhaltsverzeichnis weglasse, bzw. nur die Flags im zugehörigen Sektor speichere und eine Rotation einbaue dürfte der Flash wesentlich länger halten wie mein berechnetes halbes Jahr. Oder habe ich einen Denkfehler?
Viele Grüße
Andreas
-
Kann man den Datensätzen im EEPROM evtl. eine laufende Nummer/ Index mitgeben und der PC-Software die Koordination durch Auslesebefehl an den µC, Verarbeitung und Löschbefehl an den µC überlassen?
Oder der Controller schreibt erstmal die Rohdaten in einen Speicherblock und macht dann die Verarbeitung und Speicherung in einen anderen Block in einem Rutsch. Das kann man im µC-Code schon irgendwie absichern, dass keine Daten verlorengehen; erst dann werden die Rohdaten gelöscht. Ggf. noch eine "Block in Arbeit"-Kennung. Damit könnte man die Schreibzyklen pro Byte auf wenige Male je Blockbelegung reduzieren.
Wieviel SRAM hat dein Controller? Kannst du die Rohdaten nicht dort ablegen? Schließlich ist doch eine Batteriepufferung gegeben. Hmm - da war doch was mit Batteriewechsel, herunterfahren und idiotensicher, oder??? Speicherung und Powerdown durch Gehäuseschalter auslösen?
-
So richtig erschließt sich mir dein Problem nicht. Wenn ich richtig gerechnet habe, fallen pro Woche so 600k Daten an, sagen wir mal einfach 1MB. Hast du also 1MB Flash, wird das im Jahr 50 mal geschrieben. Selbst wenn du irgendwas zweimal schreiben mußt, sind es auch nur 100 mal im Jahr. Jetzt mal ganz extrem gedacht: auf eine 1GB SD Karte passen die Daten von ca. 20 Jahren, ohne eine Speicherstelle zweimal zu benutzen. Und den Standby Strom von 250µA halte ich nicht für sehr viel, außerdem kann man sie leicht über einen SOT23 FET ausschalten.
MfG Klebwax
-
Guten Morgen Klebwax,
so gesehen hast du recht. Aber dafür ist das Forum da, um mich vom Holzweg wieder auf den richtigen Pfad zu führen. Wenn ich eine Rotation der Sektoren einbaue sollte es tatsächlich mit maximal 100 Schreibzyklen im Jahr hinkommen, wie von dir berechnet. 1000 Jahre Haltbarkeit, oder sogar nur 10% davon würde mir also ausreichen. ;-)
@RoboHolIC: Es ist ein ATmega162. von den 1k RAM sind bereits knapp über 50% für das Programm belegt. Abzüglich des Stacks würden also ca. 16 Datensätze reinpassen, was für nicht mal 10 Minuten reichen würde.
Ich denke ich versuche es jetzt mit dem Flash und baue eine Sektor-Rotation ein und damit sollte alles passen.
Schade finde ich es nur, dass meine eigentliche Frage verneint werden muss (einzelne Bits setzen zählt nicht jedes mal als Schreibzyklus).
Vielen Dank an alle Mitdenker und viele Grüße.
Andreas