¿Es una técnica práctica agregar un flash/RAM IC dedicado para aumentar la memoria de un microcontrolador para evitar escribir en una tarjeta SD?

Estoy trabajando con un microcontrolador Atmega328P. Este microcontrolador generará datos y los almacenará en una tarjeta SD. Mi proyecto también será alimentado por batería. Mi investigación ha demostrado que escribir en una tarjeta SD es relativamente costoso. Especialmente debido al hecho de que estoy usando una batería de 225mAH con un regulador de potencia limitado de 120mA.

He leído que un método común para ahorrar energía es almacenar en búfer los comandos de escritura en una sola escritura. Esto parece relativamente sencillo.

Sin embargo, ahora me encuentro con el problema de que el Atmega328p solo tiene 2kB de RAM. Por lo tanto, realmente tengo un espacio de búfer limitado.

Entonces, mi pregunta: ¿sería una técnica viable comprar una memoria flash / RAM IC dedicada para aumentar el espacio de búfer? Tengo curiosidad acerca de la practicidad de esto y lo difícil que sería implementarlo.

¿Alguna idea? Sé que la respuesta obvia sería comprar un microcontrolador con más RAM, pero estoy tratando de quedarme con este microcontrolador para que el proyecto sea compatible con el lenguaje Arduino.

Es probable que no valga la pena organizar las cosas a través de una memoria externa, pero busque un mejor procesador con más RAM. El "lenguaje Arduino" no está ligado a la arquitectura AVR, aunque tarde o temprano deberías ampliar tus horizontes de todos modos. Además, si solo necesita megabytes y no gigabytes, podría considerar un flash SPI.
@ChrisStratton Con respecto al último comentario de SPI flash, no sabía que existía tal cosa. Y solo me interesa el almacenamiento en el rango de megabytes. Esto parece algo que podría ser potencialmente valioso. ¿Todavía lo desaconsejaría según su primer comentario? ¿Y por qué razón, simplemente porque sería más fácil ir a un microcontrolador diferente?
Encontrará MCU asequibles con hasta un megabyte más o menos de flash interno, que generalmente pueden volver a escribir. Encontrará fácil trabajar con flashes SPI que van hasta por lo menos 4 megabytes (32 megabits) fáciles de obtener, y existen versiones de 8 megabytes. Por encima de eso, te empujan hacia la NAND paralela, que es más dolorosa, y las tarjetas SD que, como producto de consumo, son menos predecibles (por decirlo suavemente) que los circuitos integrados desnudos. Mi comentario fue en contra de organizar algo a través de una memoria externa antes de escribirlo en otra: intente encontrar suficiente RAM integrada para contener bloques parciales internamente.
SPI SRAM también es una cosa. Las tarjetas SD son un poco basura, especialmente si pierde energía durante una escritura. De usted, simplemente registre todo en un chip Flash en serie que sea más conveniente.
Agregar otro chip y luego escribir en él solo para leerlo nuevamente para ahorrar algunas escrituras en su tarjeta SD no parece ser la mejor manera de ahorrar energía de la batería. Además del IC agregado, los ciclos de la CPU también usan energía.
Escribir en una memoria SPI tendrá una sobrecarga de todos modos; Uso dispositivos donde la corriente de suspensión es pequeña: everspin.com/supportdocs/MR25H40VDF

Respuestas (1)

He implementado un sistema como este. Utilizamos FRAM no volátil como búfer, pero SRAM también funcionaría según sus requisitos para sobrevivir a la pérdida de energía.

Guardé datos en el FRAM hasta que estuvo casi lleno. Luego lo escribí en la tarjeta SD. Para hacer que el sistema sea más confiable, utilicé la suma de verificación de bloques en FRAM. También escribí todos los metadatos del sistema de archivos de la tarjeta SD en FRAM. Cuando se requerían actualizaciones, primero se actualizaba la FRAM y luego se copiaba a la tarjeta SD, lo que hacía que las actualizaciones fueran atómicas (es decir, en ningún momento del proceso fue posible perder datos o dejar el sistema de archivos en un estado corrupto). Usé un controlador FAT32 modificado para esto, que desafortunadamente es un código propietario o lo compartiría.

Encontré que este es un método muy eficiente. Aunque se pierde algo de tiempo escribiendo datos tres veces (una vez en el búfer de datos FRAM, luego en el búfer de bloque de la tarjeta SD FRAM y luego en la tarjeta SD), esto se compensó en gran medida al poder DMA los datos y hacer otras cosas. procesamiento mientras tanto.

Con RAM volátil normal, obviamente no puede usarla para hacer escrituras atómicas. Sin embargo, el almacenamiento en búfer sigue siendo valioso. En mis pruebas, las tarjetas SD escriben significativamente más rápido si puede guardar bloques de> 4 kB a la vez, idealmente 64 kB o más. Esto probablemente se deba a la forma en que se administra su memoria flash interna.