Necesita un IC de memoria no volátil con capacidad de operaciones de lectura / escritura casi ilimitada

12

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.

Cerezo
fuente
15
Quieres F-RAM.
Hogar
3
... y cual es la pregunta?
Cuajada
2
¿Qué harás si la energía comienza a fallar en medio de una operación de escritura I2C? ¿Cómo puede estar seguro de que no corromperá el recuento? Este problema es más difícil de lo que piensa, a menos que pueda detectar una pérdida de energía inminente, y en ese caso puede simplemente copiar su contador de RAM a una EEPROM típica.
Elliot Alderson
55
¿Qué tan frecuente es frecuente? Para una sola variable, incluso una EEPROM de pequeño tamaño tendría una resistencia bastante estúpida. También tendría una copia de seguridad de los últimos x recuentos en caso de que falle su última escritura.
hekete
Recuerdo que algunos recuerdos antiguos que no son FLASH EE prometieron 100 millones de ciclos.
analogsystemsrf

Respuestas:

21

Tres tipos de memoria no volátil satisfacen sus necesidades, en orden de tamaño disponible:

  • Use EEPROM / FLASH nivelado.
  • Batería de respaldo SRAM.
  • MARCO

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.

Jeroen3
fuente
1
Gracias. Revisé FRAM como lo sugirió @Hearth y creo que se adapta mejor a mis necesidades. Solo espero poder encontrar una variante I2C. Además, la variable del acumulador solo necesita tener 32 bits de longitud. Entonces el tamaño no es realmente un gran problema.
Cerezo
3
@GH_eng I²C FRAM chips . A medida que avanza la memoria, es bastante costosa (siendo una tecnología relativamente nueva), pero para lo que necesita, las alternativas probablemente costarán más.
Hogar
3
También hay MRAM
DKNguyen
1
@GH_eng Creo que el TI MSP430FR * ha incorporado FRAM. Aunque es posible que ya esté limitado en cuanto a su MCU.
desviarse el
21

Esto es lo que hice en un producto que todavía está en producción en masa.

  • Mantenga todos los parámetros y contadores en RAM
  • Conecte una línea de interrupción a un detector de umbral de voltaje de la fuente de alimentación
  • Cuando se dispare la interrupción, apague todo lo que consume energía (la mayoría de los periféricos, LED, etc.) y haga una copia de seguridad de toda la RAM para que parpadee.

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.

Hilmar
fuente
1
@Hilmer ¡Eso es bastante inteligente! Bueno saber. Probablemente un CAP de depósito colocado antes de las entradas de EEPROM y MCU aumentará aún más la latencia de tiempo. El único inconveniente es probablemente más componentes en la PCB.
Cerezo
En ese momento, era claramente la solución más barata, incluidos los bienes inmuebles de PCB. Por supuesto, depende de sus especificaciones: teníamos una línea GPIO de repuesto, así que era gratis. El resto fueron solo unas pocas gomitas (pequeñas piezas SMD económicas)
Hilmar
Probablemente puede estirar esos 10-20ms si realmente tiene que hacerlo poniendo un elcap en el suministro lo suficientemente grande como para ayudar y no demasiado grande para tener efectos secundarios problemáticos.
Mástil
@Mast: eso probablemente sería demasiado costoso y podría ser mejor con una solución alternativa
Hilmar
5

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.

Solo yo
fuente
Por ejemplo DS1307, DS1338.
filo
1
Desafortunadamente, el RTCC utilizado en la placa es un DS3231M. La misma configuración de pines que DS1307 RTCC pero sin registros de datos de reserva internos. Eligió esto debido a su oscilador integrado. Siento una revisión completa del circuito :(!
Cerezo
5

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.

Bajo operación normal, nvSRAM se comporta como una SRAM asíncrona convencional usando señales y temporización estándar. nvSRAM realiza lecturas y escrituras de acceso aleatorio paralelo tan rápido como 20 ns.

En una falla de energía, nvSRAM guarda automáticamente una copia de los datos de SRAM en la memoria no volátil, donde los datos están protegidos por más de 20 años. La transferencia entre SRAM y la memoria no volátil es completamente paralela, lo que permite que la operación se complete en 8 ms o menos, sin intervención del usuario.

Al encenderse, nvSRAM devuelve los datos a la SRAM y la operación del sistema continúa desde donde se dejó. nvSRAM también proporciona comandos de inicio de TIENDA y RECUPERACIÓN de software controlados por el usuario, así como un comando de TIENDA de hardware controlado por el usuario en la mayoría de las versiones.

Diagrama de bloques de NVSRAM

crj11
fuente
¡Eso es genial!
Tomachi
4

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.

hekete
fuente
1
Por supuesto, escribir en EEPROM es bastante lento (milisegundos), por lo que las "escrituras frecuentes" del OP pueden necesitar una solución más rápida ... usted ha asumido una vez por segundo, pero OP nos dejó en la oscuridad en ese punto. Y "borrar" la EEPROM llevará un tiempo muy, muy largo (segundos) de hecho. Supongo que podría sobrescribir los valores antiguos en lugar de borrarlos, pero si los valores de recuento no son estrictamente secuenciales, sería difícil determinar qué valor fue el último valor escrito.
Elliot Alderson
@ElliotAlderson Probablemente podría asumir que el valor más alto sería el último. Obviamente, no tengo idea si una vez por segundo cuenta como "frecuente" o no en este caso. Solo señalando que para frecuencias de escritura separadas por más de 1 segundo, EEPROM sigue siendo completamente viable.
hekete
0

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.

usuario
fuente