È necessario un CI di memoria non volatile con capacità di lettura / scrittura quasi illimitate


12

Ho bisogno di una soluzione di memoria che verrà utilizzata per tenere traccia di un conteggio accumulato in un progetto basato su microcontrollore.

Per conteggio accumulato, intendo dire che il microcontrollore utilizza questa posizione di memoria per tenere conto dell'occorrenza di un evento. Il conteggio deve essere preservato durante le interruzioni di corrente, quindi la necessità di memoria NON VOLATILE.

Anche il verificarsi dell'evento di incremento del conteggio è frequente, quindi ci saranno molte scritture in memoria, quindi la mia esitazione a usare EEPROM.

L'interfaccia di comunicazione preferita sarà I2C, ma altre alternative sono benvenute.

Dalla parte superiore della mia testa, immagino un CI di memoria volatile a bassa potenza SRAM con la possibilità di essere alimentato da una batteria di riserva come una pila a bottone su power-down.


15
Vuoi F-RAM.
Hearth,

3
... e qual è la domanda?
Cagliata

2
Cosa farai se la corrente inizia a fallire nel mezzo di un'operazione di scrittura I2C? Come puoi essere sicuro di non corrompere il conteggio? Questo problema è più difficile di quanto pensi, a meno che tu non riesca a rilevare un'imminente perdita di potenza, e in quel caso puoi semplicemente copiare il tuo contatore RAM-base in una EEPROM tipica.
Elliot Alderson,

5
Quanto è frequente "frequente"? Per una singola variabile anche una EEPROM di piccole dimensioni avrebbe una resistenza abbastanza stupidamente alta. Avresti anche un backup degli ultimi x conteggi nel caso in cui la tua ultima scrittura non sia riuscita.
Hekete,

Ricordo alcune memorie EE non FLASH vecchio stile promesse 100 milioni di cicli.
analogsystemsrf

Risposte:


21

Tre tipi di memoria non volatile soddisfano le tue esigenze, in ordine di dimensioni disponibili:

  • Indossare EEPROM / FLASH livellato.
  • Batteria di backup SRAM.
  • FRAM.

In termini di costi, FRAM è la migliore. Tutto ciò che serve è all'interno del chip, compresi i condensatori di backup per completare la scrittura. Tuttavia le dimensioni disponibili sono basse.
La batteria di backup SRAM è ampia e costosa nei materiali.
La EEPROM a livello di usura richiede un firmware per gestire il livellamento dell'usura.


1
Grazie. Ho controllato FRAM come suggerito da @Hearth e penso che si adatti meglio alle mie esigenze. Spero solo di trovare una variante I2C. Inoltre, la variabile dell'accumulatore deve essere lunga solo 32 bit. Quindi le dimensioni non sono davvero un grosso problema.
Cerezo,

3
@GH_eng Chip I²C FRAM . Poiché la memoria va è piuttosto costoso (essendo una tecnologia relativamente nuova), ma per quello che ti serve le alternative probabilmente costerebbero di più.
Hearth,

3
C'è anche MRAM
DKNguyen il

1
@GH_eng I TI MSP430FR * hanno incorporato FRAM credo. Anche se potresti già essere vincolato al tuo MCU.
detenere il

21

Ecco cosa ho fatto su un prodotto ancora in produzione in serie.

  • Conserva tutti i parametri e i contatori nella RAM
  • Collegare una linea di interruzione a un rilevatore di soglia della tensione di alimentazione
  • Quando si attiva l'interrupt, spegnere tutto ciò che consuma energia (la maggior parte delle periferiche, LED, ecc.) E eseguire il backup di tutta la RAM per il flash.

Si è scoperto che c'erano circa 10-20 ms di tempo tra il grilletto a bassa tensione e il tempo in cui l'IC di gestione dell'alimentazione è entrato e ha spento tutto (in modo ordinato). Il fatto che funzioni o meno dipende dall'accumulo di energia nel tuo alimentatore, ma anche un alimentatore di piccole dimensioni può rallentarlo abbastanza da poter scrivere un piccolo set di dati in modo affidabile.


1
@Hilmer È abbastanza intelligente! Buono a sapersi. Probabilmente un CAP serbatoio posizionato prima degli input di EEPROM e MCU aumenterà ulteriormente la latenza temporale. L'unico aspetto negativo è probabilmente più componenti sul PCB.
Cerezo,

All'epoca era chiaramente la soluzione più economica, incluso il settore immobiliare PCB. Ovviamente dipende dalle tue specifiche: avevamo un ricambio con una linea GPIO di riserva, quindi era gratuita. Il resto era solo qualche jelly bean (piccole parti SMD economiche)
Hilmar,

Probabilmente puoi allungare quei 10-20ms se devi davvero mettendo un elcap nella scorta appena abbastanza grande da aiutare e non troppo grande per avere effetti collaterali fastidiosi.
Albero

@Mast: probabilmente sarebbe troppo costoso e potresti stare meglio con una soluzione alternativa
Hilmar


5

Sembra che tu possa semplicemente usare un chip o un modulo di clock RTC. Questi hanno il backup della batteria, SRAM extra per i dati dell'utente e sono dotati di interfaccia I2C.

Oppure utilizza una MCU con SRAM alimentata a batteria per iniziare, quindi non sono necessari componenti esterni.


Ad esempio DS1307, DS1338.
filo

1
Sfortunatamente, l'RTCC utilizzato sulla scheda è un DS3231M. Stessa configurazione dei pin del DS1307 RTCC ma senza registri dati di riserva interni. Scegli questo a causa del suo oscillatore integrato. Sento una recensione completa del circuito :(!
Cerezo,

5

Cypress rende ciò che chiamano SRAM non volatile . È SRAM standard che esegue automaticamente il backup in caso di interruzione dell'alimentazione. Poiché scrive solo nella memoria non volatile in caso di mancanza di corrente, ha una durata potenzialmente molto maggiore. È disponibile in versione seriale e parallela. Potrebbe essere un po 'eccessivo, poiché il più piccolo è 64 KB.

Durante il normale funzionamento, nvSRAM si comporta come una SRAM asincrona convenzionale che utilizza segnali e temporizzazione standard. nvSRAM esegue letture e scritture parallele ad accesso casuale fino a 20 ns.

In caso di mancanza di corrente, nvSRAM salva automaticamente una copia dei dati SRAM nella memoria non volatile, dove i dati sono protetti per oltre 20 anni. Il trasferimento tra SRAM e memoria non volatile è completamente parallelo, consentendo il completamento dell'operazione in 8 ms o meno, senza alcun intervento dell'utente.

All'accensione, nvSRAM restituisce i dati alla SRAM e l'operazione di sistema continua da dove era stata interrotta. nvSRAM fornisce anche i comandi di avvio STORE e RECALL del software controllato dall'utente, nonché un comando STORE hardware controllato dall'utente nella maggior parte delle versioni.

Diagramma a blocchi NVSRAM



quella roba è geniale!
Tomachi,

4

Per una singola variabile a 4 byte, EEPROM andrebbe benissimo.

Diciamo che ci stai scrivendo una volta al secondo e hai una tipica EEPROM da 32 Kb e andiamo con una resistenza conservativa di 100.000 cicli di scrittura.

Puoi scrivere i tuoi 4 byte 8000 volte prima di dover cancellare. Quindi dovrebbero essere 800 milioni di volte che puoi scriverlo anche usando una stima prudente.

Ora ci sono solo 31,5 milioni di secondi in un anno, quindi a una scrittura al secondo ci vorranno 25 anni per raggiungere la stima di fascia bassa della resistenza EEPROM.


1
Naturalmente, scrivere su EEPROM è piuttosto lento (millisecondi), quindi le "scritture frequenti" dell'OP potrebbero aver bisogno di una soluzione più veloce ... hai assunto una volta al secondo ma OP ci ha lasciato al buio su quel punto. E "cancellare" la EEPROM richiederà davvero molto tempo (secondi). Suppongo che potresti semplicemente sovrascrivere i vecchi valori invece di cancellarli, ma se i valori di conteggio non sono strettamente sequenziali, sarebbe difficile capire quale sia stato l'ultimo valore scritto.
Elliot Alderson,

@ElliotAlderson Probabilmente potresti supporre quale sia mai stato il valore più alto, sarebbe l'ultimo. Ovviamente non ho idea se una volta al secondo valga come 'frequente' o no in questo caso. Basta sottolineare che per le frequenze di scrittura distanti più di 1 secondo, EEPROM è ancora del tutto praticabile.
Hekete,

0

Ci sono molte opzioni qui, ma il vero problema è impedire che i dati vengano danneggiati. La perdita di potenza durante una scrittura potrebbe danneggiare i dati. I2C è una buona opzione per evitarlo, perché ad es. Con SPI potresti trovare una scrittura (dal punto di vista della memoria) per completare a metà dell'aggiornamento dicendo 4 byte di una parola a 32 bit. I2C è un po 'più robusto, ma solo un po'.

Il mio consiglio sarebbe di conservare 4 copie del valore. In questo modo, anche se la scrittura viene interrotta, due corrisponderanno sempre.

FRAM o simili è probabilmente l'opzione migliore.

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.