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.
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.
chris stratton
Izzo
chris stratton
pjc50
Marca
Pedro Smith