EEPROM con elevata resistenza


8

Attualmente sto lavorando a un progetto incorporato in cui ho un contatore che sarà sempre attivo. Se l'alimentazione si interrompe, anche io devo memorizzare lo stato dell'ultimo contatore e ricaricarlo al prossimo avvio. In modo che stavo pianificando di utilizzare EEPROM in cui scriverò continuamente il mio valore del contatore. Ma ho letto da qualche parte che EEPROM ha una durata di lettura / scrittura di circa 100.000 e aggiornerò quel contatore probabilmente 120.000 ogni 24 ore. Quindi sto cercando alternative per svolgere questo compito. per favore dammi il tuo suggerimento per fare lo stesso.


4
Usa una grande eprom e indossi il livellamento?
PlasmaHH,


6
È possibile utilizzare il rilevamento di perdita di potenza RAM +? Questo è ciò che di solito viene fatto.
Bryan Boettcher,

1
EEPROM non è probabilmente la soluzione più adatta. Oltre a ciò, puoi provare a ridurre la frequenza di scrittura se i tuoi requisiti lo consentono. Inoltre potresti voler eseguire le scritture su indirizzi casuali / in esecuzione anziché sullo stesso (sicuramente dovrai inventare una struttura di dati in grado di recuperarlo in seguito.)
Eugene Sh.

2
Esistono altri tipi di NVRAM oltre a EEPROM o flash. Prova a cercare i chip FRAM o MRAM: questi hanno diversi ordini di grandezza maggiore resistenza.
Turbo J,

Risposte:


12

Un'altra soluzione potrebbe essere quella di utilizzare un microcontrollore con FRAM non volatile. FRAM non presenta gli stessi limiti sui cicli di scrittura di EEPROM.

Alcuni dei prodotti MSP430 di TI sono disponibili con FRAM, ecco un link ad un'applicazione simile a ciò che descrivi:

MSP430 con FRAM salva stato in mancanza di corrente

Ecco l'articolo di Wikipedia su FRAM: FRAM


Questa non è affatto una soluzione, perché le scritture multi-byte verranno comunque danneggiate in caso di interruzione di corrente. O stai suggerendo all'OP di limitarsi a un singolo byte?
ultimA

1
@ultimA La libreria NVS garantisce scritture a 16 bit, l'OP non dice quanto sia grande il suo contatore. Questo è solo un esempio, altre tecniche possono consentire l'archiviazione di strutture di dati più grandi: Archiviazione non volatile (NVS): libreria che rende la gestione dei dati non volatili semplice e robusta contro la perdita di potenza intermittente o il ripristino asincrono dei dispositivi. I dispositivi MSP430 con memoria non volatile FRAM garantiscono scritture a 16 bit in tutti gli scenari. Spesso i dati archiviati sono una struttura più ampia. NVS contiene funzioni che memorizzano i dati in modo da garantire il recupero dell'ultima voce valida senza corruzione.
John D,

5
FRAM è un'ottima soluzione per questo problema. Sono felice di vedere una risposta qui che suggerisce il suo utilizzo. Se non ce ne fosse stato uno avrei scritto una risposta simile. Le mie soluzioni che utilizzano FRAM memorizzano sempre due copie dei dati in sequenza. Solo uno di questi potrebbe corrompersi. FRAM scrive anche molto più velocemente di EEPROM. Ogni copia dei dati ha bisogno di un modo per confermare che sia corretta. Ciò può essere fatto utilizzando un semplice CRC XOR o per piccoli set di dati è possibile semplicemente archiviare i dati e il relativo complemento in ciascun set di dati. All'avvio è sufficiente verificare quale copia dei dati memorizzati è valida.
Michael Karas,

Per inciso, alcune persone suggerivano scherzosamente l'uso della memoria centrale. FRAM è una versione moderna della tecnologia che funziona in modo simile al modo in cui la memoria principale funzionava.
Michael Karas,

1
Se è disponibile uno spazio adeguato, mantenere un contatore in un modo che può essere aggiornato in modo sicuro può essere fatto in molti modi semplici. Un modo semplice è avere due copie del contatore e un indicatore per cui la copia è valida; se l'indicatore viene modificato solo quando entrambe le copie sono valide e prima di modificare uno dei codici di copia imposta l'indicatore per indicare che l'altra copia è valida (e dopo aver scritto imposta l'indicatore per mostrare che entrambi sono validi), non importa quale valore viene letto da qualcosa che è stato scritto durante uno spegnimento.
supercat

11

Ho questo problema in un progetto in corso.

Il modo in cui ho a che fare è mantenere il valore attivo del contatore nella RAM. Ho aggiunto un po 'di hardware in modo che il microcontrollore possa rilevare che la tensione di alimentazione in ingresso non elaborata è bassa. In tal caso, interrompe ciò che sta facendo, salva il valore del contatore in tempo reale in EEPROM, quindi attende a guardare la tensione di alimentazione grezza. Se torna indietro, con qualche isteresi, il micro si riavvia essenzialmente. Altrimenti, se l'alimentazione continua a diminuire, il micro alla fine verrà arrestato. Al successivo riavvio, il valore del contatore viene caricato da EEPROM, quindi utilizzato nuovamente dal vivo nella RAM fino al successivo spegnimento.

Non ci vuole molto per scrivere un piccolo valore su EEPROM. Molto probabilmente il tuo attuale sistema di alimentazione dispone di un sufficiente accumulo di energia che puoi rilevare la tensione che si abbassa, e comunque ha abbastanza tempo di funzionamento garantito prima che l'alimentazione del micro scenda al di sotto della soglia di scrittura EEPROM operativa.

Nel mio caso, l'unico hardware aggiuntivo era un diodo Schottky per impedire all'alimentazione CC di assorbire la carica dal serbatoio locale lungo la discesa e due resistori come divisori di tensione in modo che il micro potesse leggere la tensione di ingresso grezza. Il resto è il firmware.

È importante notare che dovresti guardare la tensione in ingresso a qualsiasi alimentazione finale alimenta il micro, non direttamente la tensione di alimentazione del micro. Quando quest'ultimo si abbassa, potrebbe essere troppo tardi. Speriamo che ci sia un intervallo di tensione che è al di sotto del caso peggiore quando tutto funziona correttamente e al di sopra di ciò di cui necessita l'alimentazione del micro per garantire una tensione regolata al micro. Nel mio caso, l'alimentazione del micro era un regolatore buck alimentato da 48 V, quindi esiste una vasta gamma che è al di sotto del normale ma in cui il micro può ancora funzionare in modo affidabile.


4

Vecchia vecchia vecchia soluzione, contatore cmos + batteria al litio o batteria Ram + al litio.

L'alimentatore per l'elemento di memoria proviene dall'alimentatore normale quando è disponibile o dalla batteria quando non lo è.

Un sacco di micro moderni nel sonno manterrà il loro stato con una corrente molto bassa. Quindi è possibile utilizzare questa tecnica con il rilevamento dello spegnimento per andare a dormire, quindi utilizzare una batteria per mantenere lo stato durante il periodo di sonno mentre l'alimentazione principale è disattivata.


2
Una soluzione ancora più vecchia è la memoria del nucleo magnetico.
glen_geek,

Volevo solo rispondere allo stesso :) Ecco il dispositivo per utilizzare datasheets.maximintegrated.com/en/ds/DS1307.pdf
Anonimo

1
@glen_geek Anche se non ricordo di averlo usato. :)
RoyC,

4

Microchip ha una serie di parti "EERAM" I 2 C che consentiranno di archiviare i dati in SRAM, quindi di scriverli in EEPROM (usando l'energia immagazzinata in un condensatore) quando si perde energia, da caricare quando viene ripristinata l'alimentazione. Sembra che sarebbe perfetto per la tua applicazione.

Un esempio rappresentativo di queste parti è il 47L04 .


3

Un'altra soluzione.

Rileva lo spegnimento e usa un supercap o un super super per mantenerlo acceso per alcuni millisecondi. Utilizzare questo tempo per scrivere il valore del contatore in EPROM. Scrivere solo su EPROM allo spegnimento. Numero di cicli EPROM = numero di cicli di spegnimento.


3

Utilizzare un chip FRAM come FM24C04B. Hanno una resistenza di scrittura molto elevata e non sono volatili.

https://www.mouser.com/ds/2/100/001-84446_FM24C04B_4_KBIT_512_X_8_SERIAL_I2C_F-RAM-477782.pdf

È inoltre possibile utilizzare un modulo SRAM (NVRAM) alimentato a batteria. Ad esempio M48Z02-150PC1

https://www.mouser.com/ds/2/389/m48z02-955115.pdf


Non ne sono sicuro in altre regioni, ma qui nel Regno Unito digikey è molto più economico di mouser per le parti FRAM. E come sempre, finché puoi trovare un fornitore su cui puoi fare affidamento (o se hai solo bisogno di una piccola corsa e puoi vivere con la possibilità di avere a che fare con un fornitore potenzialmente inaffidabile) ci sono molti fornitori cinesi che possono sostanzialmente migliorare entrambi i prezzi.
Jules,

1

Ho deciso di andare con "ds1307 RTC". Perché ha 54byte di SRAM supportata dal potere. che consente un ciclo infinito di lettura / scrittura.


0

Se nel progetto incorporato è presente una scheda NIC, inviare il contatore al computer / server remoto. Sembra che 120.000 iterazioni in 24 ore siano circa un'iterazione in 0,72 secondi, dovrebbe essere OK per il traffico di rete.

Il server avrà sempre l'ultimo valore del contatore memorizzato. Nessuna corruzione del valore contatore in caso di interruzione dell'alimentazione poiché è necessario emettere un pacchetto valido per aggiornare il valore sul server; tuttavia richiede una connettività costante o deve essere progettato un protocollo di timeout speciale. Inoltre, come bonus, sarai in grado di controllare il tuo dispositivo da remoto se è necessario.


1
Se il requisito è di implementare un contatore di frame per prevenire attacchi di riproduzione e garantire in altro modo la conformità del protocollo, come invierete il valore al dispositivo?

0

A) Utilizzare un condensatore da 100 µF (o superiore) per alimentare il contatore durante il tempo di spegnimento. O qualunque sia la logica necessaria per contenere il valore del contatore.

B) Usa memorie a nucleo magnetico , potrebbero essere un po 'incerte da impostare.

C) Crea un potenziometro controllato da motore (come un servo), ad un certo punto il tuo contatore traboccerà, giusto? Mappa che a 360 gradi. Quindi creare un loop di feedback in modo da poter impostare il valore del potenziometro in modo digitale e leggerlo in digitale.

D) Invia il tuo valore del contatore una volta ogni minuto ad alcuni server o server e lascia loro ricordare il valore per te durante il tempo di inattività. Quindi, una volta ripristinata l'alimentazione, recuperare il valore del contatore.


1
Puoi ancora comprare la memoria principale?
BeB00,

@ BeB00 Non lo so, questo è prima del mio tempo. Ma userei un dado esagonale per barre filettate da 2 mm con alcuni fili avvolti attraverso di essa come una bobina toroidale. - E poi di nuovo a qualsiasi circuito comunemente usato con la memoria principale. Suppongo che solo un ADC sarebbe abbastanza buono da leggere, quando l'isteresi del nucleo va dall'altra parte e rilascia energia.
Harry Svensson,

Voglio dire ... forse come esperimento sarebbe divertente, ma sicuramente non lo
userei

@ BeB00 ebay.com/bhp/vintage-core-memory Oh beh, sembra che esista nel caso qualcuno voglia roba di alta qualità.
Harry Svensson,

: P Non sono sicuro che sia
garantito
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.