EEPROM con alta resistencia

Actualmente estoy trabajando en un proyecto incrustado 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. Entonces, estaba planeando usar EEPROM en el que escribiré continuamente mi valor de contador. Pero he leído en alguna parte que la EEPROM tiene una resistencia de lectura/escritura de alrededor de 100 000 y actualizaré ese contador probablemente a 120 000 cada 24 horas. Así que estoy encontrando alternativas para lograr esta tarea. por favor dame tu sugerencia para hacer lo mismo.

¿Utiliza un eprom grande y usa nivelación?
¿Se puede usar RAM + detección de pérdida de energía? Eso es lo que se suele hacer.
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).
Re cerrar votos. La pregunta no es sobre la nivelación del desgaste.
Hay otros tipos de NVRAM además de EEPROM o flash. Intente buscar chips FRAM o MRAM; estos tienen varios órdenes de magnitud de mayor resistencia.
Usaría un SPIFFS de ESP8266 para esto: 3 MB de espacio, nivelado automáticamente. sin wifi, ESP usa alrededor de 15ma.

Respuestas (9)

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 estado de ahorro de FRAM en caso de corte de energía

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

Esa no es una solución en absoluto, porque las escrituras de varios bytes aún se corromperán en caso de un corte de energía. ¿O está sugiriendo que el OP se limite a un solo byte?
@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 pérdidas de energía intermitentes o reinicios asíncronos 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.
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 ellos 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 conjuntos de datos pequeños, simplemente puede almacenar datos y su complemento en cada conjunto de datos. Al inicio, solo verifica qué copia de los datos almacenados se valida.
Por cierto, algunas personas sugerían en broma el uso de la memoria central. FRAM es una versión moderna de la tecnología que funciona de manera similar a la forma en que operaba la memoria central.
@MichaelKaras Correcto, es una especie de versión moderna de la memoria central. Creo que leí hace un tiempo que el último fabricante de memorias de núcleo magnético verdadero finalmente dejó de fabricarlas. Se usó hasta hace relativamente poco tiempo en aplicaciones específicas porque nada más era tan tolerante a la radiación.
Si hay suficiente espacio disponible, mantener un contador de manera que pueda actualizarse de manera segura se puede hacer de varias maneras sencillas. Una forma sencilla es tener dos copias del contador, así como un indicador para qué copia es válida; si el indicador solo se cambia cuando ambas copias son válidas, y antes de cambiar cualquiera de las copias, el código establece el indicador para indicar que la otra copia es válida (y después de escribir establece 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.
¿Cuál será el precio de FRAM? porque aquí el costo es un problema real. Además, solo quiero escribir solo 20 bytes.
Un microcontrolador MSP430 con FRAM cuesta alrededor de $ 3 o menos en cantidades de 1K unidad. Mucho menos en volumen alto. Puede obtener muestras de forma gratuita. Estoy seguro de que hay ejemplos de otras compañías y tal vez incluso dispositivos FRAM independientes.
También puede obtener dispositivos FRAM como I2C o chips externos paralelos. Puedo encontrar chips FRAM seriales de 16Kbit de proveedores chinos en la región de $1 cada uno (en cantidades de 100). Sin embargo, he descubierto que los proveedores europeos tienden a querer mucho más para ellos.
... en realidad quizás no tanto como pensaba. Veo que Mouser UK tiene los chips FM24CL16B que estaba buscando por £ 1.22 cada uno (= ~ $ 1.80) en carretes de 3,000, y digikey los hará por no mucho más que eso en el precio de un solo chip.
@Michael Karas: Sí, la técnica que describe es excelente, pero es una técnica de software y no tiene nada que ver con el uso de FRAM. Esa solución funcionaría igual de bien usando la EEPROM tradicional. Por lo tanto, la solución al problema de los OP no es usar FRAM sino usar las técnicas correspondientes en el software (o energía de respaldo como han sugerido otros). El uso de FRAM aún puede ser beneficioso por otras razones (velocidad, etc.) ofc, pero en general no ayuda con la seguridad contra fallas de energía, excepto porque tiene menos tiempo para conectar si está usando energía de respaldo.
@ultimA Eso es cierto, aunque si espera muchas fallas o interrupciones de energía durante una vida útil prolongada, FRAM tiene la ventaja de muchos más ciclos de escritura.

Tengo este problema en un proyecto actual.

La forma en que lo manejo 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 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 energía sin procesar. Si vuelve a subir, con algo de histéresis, entonces el micro esencialmente se reinicia. De lo contrario, si la energía continúa bajando, el micro eventualmente se detendrá. En el próximo reinicio, el valor del contador se carga desde la EEPROM, luego se usa en vivo en la RAM nuevamente hasta el próximo apagado.

No lleva mucho tiempo escribir un pequeño valor en la 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 está bajando, y aún así tener suficiente tiempo de ejecución garantizado antes de que la energía del micro baje del umbral operativo o de escritura de EEPROM.

En mi caso, el único hardware adicional fue un diodo Schottky para evitar que la fuente de alimentación de CC absorbiera carga del depósito local en el camino hacia abajo, 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 observar el voltaje en la entrada de cualquier suministro final que alimente el micro, no el voltaje de alimentación del micro directamente. Para cuando este último baje, puede que sea 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 necesita la fuente de alimentación del micro 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 gran rango que está por debajo de lo normal pero donde el micro aún puede funcionar de manera confiable.

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

El suministro de energía 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 suspensión mientras el suministro principal está apagado.

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

Microchip tiene una serie de partes I 2 C "EERAM" que permitirán que los datos se almacenen en SRAM, luego los escriban en EEPROM (usando la energía almacenada en un capacitor) cuando se pierda la energía, para que se carguen cuando regrese la energía. Esto parece que sería perfecto para su aplicación.

Un ejemplo representativo de estas piezas es el 47L04 .

Otra solución.

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

Utilice 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 puede usar un módulo SRAM respaldado por batería (NVRAM). Por ejemplo M48Z02-150PC1

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

No estoy seguro en otras regiones, pero aquí en el Reino Unido, Digikey es mucho más barato que Mouser para piezas FRAM. Y como siempre, siempre que pueda encontrar un proveedor en el que pueda confiar (o si solo necesita una pequeña tirada y puede vivir con la posibilidad de tratar con un proveedor potencialmente no confiable), hay muchos proveedores chinos que pueden mejorar sustancialmente en ambos precios.

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

Si su proyecto incrustado tiene NIC, envíe su contador a una 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á almacenado el último valor del contador. No hay corrupción del valor del contador en la pérdida de energía porque se debe 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 de forma remota si es necesario.

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

A) Use un capacitor de 100 µF (o mayor) para encender el contador durante el tiempo de inactividad. 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 dudosas de configurar.

C) Haga un potenciómetro controlado por motor (como un servo), en algún momento su contador se desbordará, ¿verdad? Mapea eso a 360 grados. Luego haga un bucle 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 permítales recordar el valor por usted durante el tiempo de inactividad. Luego, una vez que vuelva la energía, recupere el valor del contador.

¿Todavía puedes comprar memoria central?
@ 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 regreso 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.
Quiero decir... tal vez como experimento sería divertido, pero definitivamente nunca lo usaría en un sistema que necesitaba para trabajar.
@ BeB00 ebay.com/bhp/vintage-core-memory Bueno, parece que existe en caso de que alguien quiera cosas de alta calidad.
:P No estoy seguro de que tenga una garantía de 60 años.