EEPROM con alta resistencia

8

Actualmente estoy trabajando en un proyecto integrado en el que tengo un contador que estará activo todo el tiempo. Si se corta la energía, también tengo que almacenar el último estado del contador y volver a cargarlo en el próximo inicio. Así que estaba planeando usar EEPROM en el que escribiré continuamente mi valor de contador. Pero he leído en alguna parte que EEPROM tiene una resistencia de lectura / escritura de aproximadamente 100,000 y actualizaré ese contador probablemente 120,000 por 24 horas. Así que estoy encontrando alternativas para lograr esta tarea. por favor dame tu sugerencia para hacer lo mismo.

Nishant Kathiriya
fuente
44
¿Usa una gran eprom y usa nivelación?
PlasmaHH
55
Posible duplicado de la nivelación
PlasmaHH
66
¿Se puede usar RAM + detección de pérdida de energía? Eso es lo que generalmente se hace.
Bryan Boettcher
1
EEPROM probablemente no sea la solución más adecuada. Aparte de eso, puede intentar reducir la frecuencia de escritura si sus requisitos lo permiten. También es posible que desee realizar las escrituras en direcciones aleatorias / en ejecución en lugar de la misma (seguramente tendrá que encontrar alguna estructura de datos capaz de recuperar eso después).
Eugene Sh.
2
Hay otros tipos de NVRAM que EEPROM o flash. Intente buscar chips FRAM o MRAM; estos tienen varios órdenes de magnitud de mayor resistencia.
Turbo J

Respuestas:

12

Otra solución podría ser utilizar un microcontrolador con FRAM no volátil. FRAM no sufre las mismas limitaciones en los ciclos de escritura que EEPROM.

Algunos de los productos MSP430 de TI están disponibles con FRAM, aquí hay un enlace a una aplicación similar a la que usted describe:

MSP430 con FRAM guardar estado en falla de energía

Aquí está el artículo de Wikipedia sobre FRAM: FRAM

John D
fuente
Esa no es una solución en absoluto, porque las escrituras de varios bytes aún se corromperán ante una falla de energía. ¿O sugieres que el OP se limite a un solo byte?
ultimA
1
@ultimA La biblioteca NVS garantiza escrituras de 16 bits, el OP no dice qué tan grande es su contador. Este es solo un ejemplo, otras técnicas pueden permitir el almacenamiento de estructuras de datos más grandes: Almacenamiento no volátil (NVS): biblioteca que hace que el manejo de datos no volátiles sea fácil y robusto contra la pérdida de energía intermitente o reinicios asincrónicos de dispositivos. Los dispositivos MSP430 con memoria no volátil FRAM garantizan escrituras de 16 bits en todos los escenarios. A menudo, los datos que se almacenan son una estructura más grande. El NVS contiene funciones que almacenan datos de una manera que garantiza la recuperación de la última entrada válida sin corrupción.
John D
55
FRAM es una excelente solución para este problema. Me alegra ver una respuesta aquí que sugiere su uso. Si no hubiera habido uno, iba a escribir una respuesta similar. Mis soluciones que usan FRAM siempre almacenan dos copias de los datos secuencialmente. Solo uno de esos posiblemente se corromperá. FRAM también escribe mucho más rápido que EEPROM. Cada copia de los datos necesita una forma de validar que es correcta. Eso se puede hacer usando un XOR CRC simple o para un pequeño conjunto de datos, simplemente puede almacenar datos y su complemento en cada conjunto de datos. Al inicio, solo verifica qué copia de los datos almacenados valida.
Michael Karas el
Por cierto, algunas personas sugirieron en broma el uso de la memoria central. FRAM es una versión moderna de tecnología que funciona de manera similar a la forma en que funciona la memoria central.
Michael Karas el
1
Si hay suficiente espacio disponible, mantener un contador de una manera que se pueda actualizar de manera segura se puede hacer de varias maneras sencillas. Una forma simple es tener dos copias del contador, así como un indicador para el cual la copia es válida; si el indicador solo se cambia cuando ambas copias son válidas, y antes de cambiar cualquiera de los códigos de copia establece el indicador para indicar que la otra copia es válida (y después de escribir establece que el indicador para mostrar que ambas son válidas), entonces no importará qué valor se lee de algo que se estaba escribiendo durante un apagado.
supercat
11

Tengo este problema en un proyecto actual.

La forma en que lo estoy tratando es mantener el valor en vivo del contador en la RAM. Agregué un poco de hardware para que el microcontrolador pueda detectar que el voltaje de alimentación de entrada sin procesar es bajo. Si es así, detiene lo que está haciendo, guarda el valor del contador en vivo en EEPROM, luego espera a ver el voltaje de alimentación sin procesar. Si vuelve a subir, con algo de histéresis, entonces el micro se reinicia esencialmente. De lo contrario, si la energía continúa bajando, el micro eventualmente se detendrá. En el siguiente reinicio, el valor del contador se carga desde EEPROM, luego se utiliza en vivo en la RAM nuevamente hasta el próximo apagado.

No lleva mucho tiempo escribir un valor pequeño en EEPROM. Lo más probable es que su sistema de suministro de energía existente tenga suficiente almacenamiento de energía para que pueda detectar que el voltaje se está agotando, y aún así tiene suficiente tiempo de ejecución garantizado antes de que la alimentación del micro caiga por debajo del umbral de escritura operativo o EEPROM.

En mi caso, el único hardware adicional era un diodo Schottky para evitar que la fuente de alimentación de CC absorbiera la carga del depósito local en el camino, y dos resistencias como divisor de voltaje para que el micro pueda leer el voltaje de entrada sin procesar. El resto es firmware.

Es importante tener en cuenta que debe vigilar el voltaje en la entrada a cualquier fuente de alimentación final que alimente el micro, no el voltaje de alimentación del micro directamente. Para el momento en que este último baja, puede ser demasiado tarde. Con suerte, hay un rango de voltaje que está por debajo del peor de los casos cuando todo funciona correctamente y por encima de lo que la fuente de alimentación del micro necesita para garantizar un voltaje regulado al micro. En mi caso, el suministro del micro era un regulador reductor alimentado desde 48 V, por lo que hay un amplio rango que está por debajo de lo normal pero donde el micro aún puede funcionar de manera confiable.

Olin Lathrop
fuente
4

Solución antigua, antigua, contador CMOS + batería de litio o batería de litio Ram +.

La fuente de alimentación para el elemento de almacenamiento proviene de la fuente de alimentación normal cuando está disponible o de la batería cuando no lo está.

Muchos micros modernos en reposo mantendrán su estado con un suministro de corriente muy bajo. Por lo tanto, puede usar esta técnica con detección de apagado para ir a dormir y luego usar una batería para mantener el estado durante el período de sueño mientras el suministro principal está apagado.

RoyC
fuente
2
Una solución aún más antigua es la memoria de núcleo magnético.
glen_geek
Solo quería responder lo mismo :) Aquí está el dispositivo para usar hojas de datos.maximintegrated.com/en/ds/DS1307.pdf
Anónimo
1
@glen_geek Incluso yo no recuerdo haber usado eso. :)
RoyC
4

Microchip tiene una serie de I 2 partes C "EERAM" que permitirán almacenar datos en SRAM, luego escribirlos en EEPROM (usando energía almacenada en un condensador) cuando se pierde la energía, para cargarse cuando vuelve la energía. Parece que sería perfecto para su aplicación.

Un ejemplo representativo de estas partes es el 47L04 .

duskwuff -inactive-
fuente
3

Otra solución.

Detecte el apagado y use un supercap o no super cap para mantener el poder encendido durante unos pocos milisegundos. Use este tiempo para escribir su valor de contador en EPROM. Solo escriba en EPROM cuando se apague. Número de ciclos de EPROM = no de ciclos de apagado.

RoyC
fuente
3

Use un chip FRAM como el FM24C04B. Tienen una resistencia de escritura muy alta y no son volátiles.

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

También podría usar un módulo SRAM con respaldo de batería (NVRAM). Por ejemplo M48Z02-150PC1

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

usuario4574
fuente
No estoy seguro acerca de otras regiones, pero aquí, en el Reino Unido, digikey es mucho más barato que el ratón para las piezas de FRAM. Y como siempre, siempre que pueda encontrar un proveedor en el que pueda confiar (o si solo necesita una pequeña carrera y puede vivir con la posibilidad de tratar con un proveedor potencialmente no confiable), hay muchos proveedores chinos que pueden mejorar sustancialmente Ambos precios.
Julio
1

Decidí ir con "ds1307 RTC". Porque tiene 54bytes de SRAM con respaldo de energía. que permite un ciclo infinito de lectura / escritura.

Nishant Kathiriya
fuente
0

Si su proyecto incrustado tiene NIC, envíe su contador a la computadora / servidor remoto. Parece que 120,000 iteraciones en 24 horas es aproximadamente una iteración en 0.72 segundos, debería estar bien para el tráfico de red.

El servidor siempre tendrá el último valor del contador almacenado. No hay corrupción del valor del contador en la pérdida de energía porque se necesita emitir un paquete válido para actualizar el valor en el servidor; sin embargo, requiere conectividad constante o se debe diseñar un protocolo de tiempo de espera especial. Además, como beneficio adicional, podrá controlar su dispositivo desde el control remoto si es necesario.

Anónimo
fuente
1
Si el requisito es implementar un contador de cuadros para evitar ataques de repetición y garantizar el cumplimiento del protocolo, ¿cómo va a enviar el valor al dispositivo?
0

A) Use un capacitor de 100 µF (o más grande) para encender el contador durante el tiempo de apagado. O cualquier lógica que se requiera para mantener el valor del contador.

B) Use memorias de núcleo magnético , pueden ser un poco difíciles de configurar.

C) Haga un potenciómetro controlado por motor (como un servo), en algún momento su contador se desbordará, ¿verdad? Asigne eso a 360 grados. Luego haga un ciclo de retroalimentación para que pueda establecer el valor del potenciómetro digitalmente y leerlo digitalmente.

D) Envíe el valor de su contador una vez cada minuto a algún servidor o servidores, y deje que recuerden el valor por usted durante el tiempo de inactividad. Luego, una vez que vuelva la energía, recupere el valor del contador.

Harry Svensson
fuente
1
¿Aún puedes comprar memoria central?
BeB00
@ BeB00 No sé, eso es antes de mi tiempo. Pero usaría una tuerca hexagonal para varillas roscadas de 2 mm con algunos cables enrollados como una bobina toroidal. - Y luego de vuelta a cualquier circuito que se use comúnmente con la memoria central. Supongo que solo un ADC sería lo suficientemente bueno para leer, cuando la histéresis del núcleo va en sentido contrario y libera energía.
Harry Svensson el
Quiero decir ... tal vez como experimento sería divertido, pero definitivamente nunca usaría eso en un sistema que necesitaba para trabajar
BeB00
@ BeB00 ebay.com/bhp/vintage-core-memory Oh, bueno, parece que existe en caso de que alguien quiera cosas de alta calidad.
Harry Svensson el
: P No estoy seguro de que esté garantizado por 60 años
BeB00