Necesito una solución de memoria que se utilizará para realizar un seguimiento de un recuento acumulado en un proyecto basado en un microcontrolador.
Por recuento acumulado, quiero decir que el microcontrolador usa esta ubicación de memoria para mantener el recuento de la ocurrencia de un evento. El recuento debe conservarse durante los cortes de energía, de ahí la necesidad de memoria NO VOLÁTIL.
Además, la ocurrencia del evento de incremento de conteo es frecuente, por lo tanto, habrá muchas escrituras en la memoria, por lo tanto, dudo en usar EEPROM.
La interfaz de comunicación preferida será I2C, pero otras alternativas son bienvenidas.
Desde la parte superior de mi cabeza, imagino un IC de memoria volátil de baja potencia SRAM con la opción de ser alimentado por una batería de respaldo como una celda de moneda en los apagados.
Respuestas:
Tres tipos de memoria no volátil satisfacen sus necesidades, en orden de tamaño disponible:
En términos de costo, FRAM es el mejor. Todo lo que necesita está dentro del chip, incluidos los condensadores de respaldo para completar la escritura. Sin embargo, los tamaños disponibles son bajos.
La batería de respaldo SRAM es grande y costosa en materiales.
La EEPROM nivelada por desgaste requiere firmware para manejar la nivelación por desgaste.
fuente
Esto es lo que hice en un producto que todavía está en producción en masa.
Resulta que hubo alrededor de 10-20 ms de tiempo entre el disparador de bajo voltaje y el momento en que el IC de administración de energía se activó y apagó todo (de manera ordenada). Si esto funciona o no depende del almacenamiento de energía en su fuente de alimentación, pero incluso un suministro pequeño puede ralentizarlo lo suficiente para que pueda escribir un pequeño conjunto de datos de manera confiable.
fuente
Se afirma que Toggle MRAM (RAM magnetoresistiva) tiene una resistencia de escritura efectivamente infinita (no conocen ningún mecanismo que pueda desgastar la escritura). Sin embargo, no conozco ninguno de esos chips que hablen I2C, por lo que tendrías que conformarte con SPI. Aquí hay una de esas partes: https://www.digikey.com/product-detail/en/everspin-technologies-inc/MR25H256ACDF/819-1064-ND/8286370
fuente
Parece que puedes usar un chip o módulo de reloj RTC. Estos tienen respaldo de batería, SRAM adicional para datos de usuario y vienen con interfaz I2C.
O simplemente use una MCU con SRAM respaldada por batería para comenzar, por lo que no se necesitan componentes externos.
fuente
Cypress hace lo que llaman SRAM no volátil . Es la SRAM estándar que se respalda automáticamente cuando falla la alimentación. Dado que solo escribe en la memoria no volátil en caso de falla de energía, tiene una durabilidad potencialmente mucho mayor. Viene en versiones seriales y paralelas. Puede ser un poco exagerado, ya que el más pequeño es de 64Kb.
fuente
Para una sola variable de 4 bytes, EEPROM estaría totalmente bien.
Digamos que está escribiendo una vez por segundo y tiene una EEPROM típica de 32Kb y vamos con una resistencia conservadora de 100,000 ciclos de escritura.
Puede escribir sus 4 bytes 8000 veces antes de que necesite borrar. Eso debería ser 800 millones de veces que puedes escribirlo incluso usando una estimación conservadora.
Ahora solo hay 31.5 millones de segundos en un año, por lo que en una escritura por segundo tomaría 25 años alcanzar la estimación final baja de la resistencia EEPROM.
fuente
Aquí hay muchas opciones, pero el problema real es evitar que los datos se corrompan. La pérdida de energía durante una escritura podría dañar los datos. I2C es una buena opción para evitar esto, porque, por ejemplo, con SPI puede encontrar que aparece una escritura (desde el punto de vista de la memoria) para completar a mitad de la actualización, digamos 4 bytes de una palabra de 32 bits. I2C es un poco más robusto, pero solo un poco.
Mi consejo sería almacenar 4 copias del valor. De esa manera, incluso si se interrumpe la escritura, dos siempre coincidirán.
FRAM o similar es probablemente la mejor opción.
fuente