Benötigen Sie einen nichtflüchtigen Speicher-IC mit nahezu unbegrenzten Lese- / Schreibfunktionen

12

Ich benötige eine Speicherlösung, mit der ich die gesammelten Daten eines auf Mikrocontrollern basierenden Projekts nachverfolgen kann.

Mit akkumulierter Anzahl meine ich zu sagen, dass der Mikrocontroller diesen Speicherplatz verwendet, um die Anzahl des Auftretens eines Ereignisses zu erfassen. Die Zählung muss bei Stromausfällen beibehalten werden, weshalb nichtflüchtiger Speicher erforderlich ist.

Auch das Auftreten des Zählinkrementierungsereignisses ist häufig, daher wird es viele Schreibvorgänge in den Speicher geben, weshalb ich zögere, EEPROM zu verwenden.

Die bevorzugte Kommunikationsschnittstelle ist I2C, andere Alternativen sind jedoch willkommen.

Auf den ersten Blick stelle ich mir einen flüchtigen Speicher-IC mit geringem Stromverbrauch von SRAM vor, der bei Stromausfällen von einer Pufferbatterie wie einer Knopfzelle mit Strom versorgt werden kann.

Cerezo
quelle
15
Sie wollen F-RAM.
Herd
3
... und was ist die Frage?
Curd
2
Was tun, wenn die Stromversorgung während eines I2C-Schreibvorgangs ausfällt? Wie können Sie sicher sein, dass Sie die Zählung nicht verfälschen? Dieses Problem ist schwieriger als Sie denken, es sei denn, Sie können einen bevorstehenden Stromausfall feststellen. In diesem Fall können Sie Ihren RAM-Basiszähler einfach in ein typisches EEPROM kopieren.
Elliot Alderson
5
Wie häufig ist es? Für eine einzelne Variable hätte sogar ein kleines EEPROM eine ziemlich dumme hohe Lebensdauer. Sie würden auch eine Sicherung der letzten x Zählungen haben, falls Ihr letzter Schreibvorgang fehlschlug.
Hekete
Ich erinnere mich an einige nicht-FLASH-fähige EE-Speicher, die 100 Millionen Zyklen versprochen hatten.
analogsystemsrf

Antworten:

21

Drei nichtflüchtige Speichertypen entsprechen Ihren Anforderungen in der Reihenfolge der verfügbaren Größe:

  • Abgenutztes EEPROM / FLASH.
  • Batterie-Backup-SRAM.
  • FRAM.

In Bezug auf die Kosten ist FRAM am besten. Alles, was Sie benötigen, ist der Chip, einschließlich der Backup-Kondensatoren, um das Schreiben abzuschließen. Die verfügbaren Größen sind jedoch gering.
Batterie-Backup-SRAM ist groß und materialintensiv.
Ein EEPROM mit Abnutzungsgrad erfordert Firmware, um den Abnutzungsgrad auszugleichen.

Jeroen3
quelle
1
Vielen Dank. Ich habe FRAM wie von @Hearth vorgeschlagen ausprobiert und denke, dass es meinen Bedürfnissen am besten entspricht. Ich hoffe nur, ich finde eine I2C-Variante. Auch die Akkumulatorvariable muss nur 32 Bit lang sein. Größe ist also nicht wirklich ein großes Problem.
Cerezo
3
@GH_eng I²C-FRAM-Chips . Speicher ist relativ teuer (eine relativ neue Technologie), aber für das, was Sie benötigen, würden die Alternativen wahrscheinlich mehr kosten.
Herd
3
Es gibt auch MRAM
DKNguyen
1
@GH_eng Die TI MSP430FR * haben glaube ich in FRAM eingebaut. Möglicherweise sind Sie in Bezug auf Ihre MCU bereits eingeschränkt.
Detly
21

Hier ist, was ich an einem Produkt gemacht habe, das sich noch in Massenproduktion befindet.

  • Behalten Sie alle Parameter und Zähler im RAM
  • Schließen Sie eine Unterbrechungsleitung an einen Spannungsschwellendetektor an
  • Wenn der Interrupt ausgelöst wird, schalten Sie alles aus, was Strom verbraucht (die meisten Peripheriegeräte, LEDs usw.), und sichern Sie den gesamten Arbeitsspeicher, um zu blinken.

Es stellte sich heraus, dass zwischen dem Niederspannungsauslöser und dem Zeitpunkt, an dem der Power-Management-IC einschaltete und alles herunterfuhr, ungefähr 10 bis 20 ms vergangen waren (in geordneter Weise). Ob dies funktioniert oder nicht, hängt vom Energiespeicher Ihres Netzteils ab. Aber auch ein kleines Netzteil kann dies verlangsamen, sodass Sie einen kleinen Datensatz zuverlässig schreiben können.

Hilmar
quelle
1
@Hilmer Das ist ziemlich schlau! Gut zu wissen. Wahrscheinlich wird eine vor den Eingängen von EEPROM und MCU platzierte Reservoir-CAP die Latenzzeit weiter erhöhen. Der einzige Nachteil ist wahrscheinlich mehr Komponenten auf der Platine.
Cerezo
Zu der Zeit war es eindeutig die billigste Lösung einschließlich PCB-Immobilien. Natürlich kommt es auf Ihre Besonderheiten an: Wir hatten einen Ersatz, hatten eine Ersatz-GPIO-Leitung, das war also kostenlos. Der Rest war nur ein paar Gummibärchen (kleine preiswerte SMD-Teile)
Hilmar
Sie können diese 10-20ms wahrscheinlich verlängern, wenn Sie wirklich einen Elcap in den Vorrat legen müssen, der gerade groß genug ist, um zu helfen, und nicht zu groß, um störende Nebenwirkungen zu haben.
Mast
@ Mast: Das wäre wahrscheinlich zu teuer und Sie könnten mit einer alternativen Lösung besser dran sein
Hilmar
5

Klingt so, als könnten Sie einfach einen RTC-Clock-Chip oder ein RTC-Clock-Modul verwenden. Diese verfügen über ein Batterie-Backup, einen zusätzlichen SRAM für Benutzerdaten und eine I2C-Schnittstelle.

Oder verwenden Sie zunächst eine MCU mit batteriegepuffertem SRAM, sodass keine externen Komponenten erforderlich sind.

Nur ich
quelle
Zum Beispiel DS1307, DS1338.
Filo
1
Leider ist das auf der Karte verwendete RTCC ein DS3231M. Gleiche Pinbelegung wie DS1307 RTCC, jedoch ohne interne Ersatzdatenregister. Wählte dieses wegen seines integrierten Oszillators. Ich spüre eine komplette Schaltung Überprüfung :(!
Cerezo
5

Cypress stellt das her, was sie als nichtflüchtiges SRAM bezeichnen . Es handelt sich um einen Standard-SRAM, der bei einem Stromausfall automatisch eine Sicherungskopie erstellt. Da nur bei Stromausfall in den nichtflüchtigen Speicher geschrieben wird, ist die Lebensdauer möglicherweise wesentlich höher. Es kommt in seriellen und parallelen Versionen. Es könnte ein bisschen übertrieben sein, da die kleinste 64 KB groß ist.

Unter normalen Betriebsbedingungen verhält sich der nvSRAM wie ein herkömmlicher asynchroner SRAM unter Verwendung von Standardsignalen und Timing. nvSRAM führt parallele Lese- und Schreibvorgänge mit wahlfreiem Zugriff mit einer Geschwindigkeit von bis zu 20 ns durch.

Bei einem Stromausfall speichert nvSRAM automatisch eine Kopie der SRAM-Daten in einem nichtflüchtigen Speicher, in dem die Daten über 20 Jahre geschützt sind. Die Übertragung zwischen SRAM und nichtflüchtigem Speicher erfolgt vollständig parallel, sodass der Vorgang ohne Benutzereingriff in 8 ms oder weniger abgeschlossen werden kann.

Beim Einschalten gibt nvSRAM die Daten an den SRAM zurück, und der Systembetrieb wird dort fortgesetzt, wo er aufgehört hat. nvSRAM bietet außerdem benutzergesteuerte STORE- und RECALL-Initiierungsbefehle sowie in den meisten Versionen einen benutzergesteuerten STORE-Hardwarebefehl.

NVSRAM-Blockdiagramm

crj11
quelle
das Zeug ist genial!
Tomachi
4

Für eine einzelne 4-Byte-Variable wäre ein EEPROM völlig in Ordnung.

Angenommen, Sie schreiben einmal pro Sekunde darauf, und Sie haben ein typisches 32-KB-EEPROM, und wir gehen von einer konservativen Lebensdauer von 100.000 Schreibzyklen aus.

Sie können Ihre 4 Bytes 8000 Mal schreiben, bevor Sie eine Löschung vornehmen müssen. Das sollten also 800 Millionen Mal sein, dass Sie es auch mit einer konservativen Schätzung schreiben können.

Jetzt gibt es nur noch 31,5 Millionen Sekunden pro Jahr, so dass es nach einem Schreibvorgang 25 Jahre dauern würde, bis die niedrigste Schätzung der EEPROM-Lebensdauer erreicht ist.

hekete
quelle
1
Natürlich ist das Schreiben in das EEPROM ziemlich langsam (Millisekunden), so dass die "häufigen Schreibvorgänge" des OP möglicherweise eine schnellere Lösung erfordern ... Sie haben einmal pro Sekunde angenommen, aber OP hat uns in diesem Punkt im Dunkeln gelassen. Und das "Löschen" des EEPROM dauert in der Tat sehr, sehr lange (Sekunden). Ich nehme an, Sie könnten einfach alte Werte überschreiben, anstatt sie zu löschen, aber wenn die Zählwerte nicht streng sequentiell sind, wäre es schwierig herauszufinden, welcher Wert der letzte Wert war, der geschrieben wurde.
Elliot Alderson
@ElliotAlderson Man könnte wohl annehmen, was überhaupt der höchste Wert war, wäre der letzte. Offensichtlich keine Ahnung, ob in diesem Fall ein Mal pro Sekunde als "häufig" gilt oder nicht. Es wird lediglich darauf hingewiesen, dass das EEPROM für Schreibfrequenzen im Abstand von mehr als 1 Sekunde immer noch voll funktionsfähig ist.
Hekete
0

Hier gibt es viele Optionen, aber das eigentliche Problem besteht darin, zu verhindern, dass die Daten beschädigt werden. Ein Stromausfall während eines Schreibvorgangs kann die Daten beschädigen. I2C ist eine gute Option, um dies zu vermeiden, da Sie z. B. mit SPI feststellen können, dass ein Schreibvorgang (aus Sicht des Speichers) nach der Hälfte der Aktualisierung, z. B. 4 Bytes eines 32-Bit-Wortes, abgeschlossen ist. I2C ist ein bisschen robuster, aber nur ein bisschen.

Mein Rat wäre, 4 Kopien des Wertes zu speichern. Auf diese Weise stimmen immer zwei überein, auch wenn das Schreiben unterbrochen wird.

FRAM oder ähnliches ist wahrscheinlich die beste Option.

Benutzer
quelle