Almacenamiento en tarjeta micro-SD de bajo consumo

Estamos construyendo un registrador de datos de bajo consumo basado en el ATmega328P, para hacer uso del cargador de arranque e IDE de Arduino, etc. Idealmente, el consumo de energía debe ser inferior a 0,3 mA a 3,3 V para obtener una vida útil de alrededor de 4 meses con una sola batería AA Los datos del sensor se almacenarán a un máximo de 76 bytes/seg durante los 4 meses, dando alrededor de 750 MiB de datos. Por lo tanto, tenemos la necesidad de un dispositivo de gran memoria, que aún sea de bajo consumo.

Por lo que puedo decir, la única solución práctica para almacenar tantos datos es usar una tarjeta SD. Sin embargo, las tarjetas SD parecen usar un poco más de energía de la que podemos permitirnos, 0,2 mA de corriente inactiva para las tarjetas que tenemos ahora y más cuando están escribiendo.

Así que algunas preguntas:

  • ¿Es un interruptor de lado alto la única forma práctica de controlar el consumo de energía de la tarjeta SD?
  • ¿Hay alguna advertencia que debamos tener en cuenta al cambiar la energía a la tarjeta? Por ejemplo, la nivelación de desgaste es un proceso que se realizará después de escribir un bloque, o puede ocurrir en cualquier momento.
  • ¿Existen otras alternativas que debamos considerar?
solarduino.net/?p=58 es un artículo que puede ser de su interés
Considere agregar RAM externa como 23LC1024. Luego puede almacenar más y mantener la tarjeta SD apagada. Microchip también fabrica una versión con respaldo de batería, si le molesta la idea de que los datos permanezcan en una memoria volátil.

Respuestas (4)

Si está presupuestando un promedio de 0,3 mA, cada µA cuenta. No es un gran problema para el microcontrolador, pero la tarjeta SD consumirá decenas de mA. Desea tenerlo encendido lo menos posible. Pero el ATmega328P tiene solo 2 kB de RAM, lo que significa que su búfer de muestra estará lleno en menos de medio minuto, y luego es hora de escribir en la tarjeta SD. Dos veces por minuto.

Consideraría un TI MSP430 en lugar del AVR. Sigue siendo el controlador comúnmente disponible de menor potencia. Le ahorrará los µA que necesitará al escribir en la tarjeta SD. El MSP430F5418A también tiene 16 kB de RAM, por lo que debe encender la tarjeta SD solo una vez cada tres minutos y medio.

Puede ejecutar el MSP430 en su oscilador de baja frecuencia y cambiar al DCO (oscilador controlado digitalmente) de alta frecuencia para escribir en la tarjeta SD, de modo que esto tome el menor tiempo posible.

Para alimentar la tarjeta SD, de hecho, usaría un interruptor de lado alto. El BSS215P es un P-MOSFET de nivel lógico adecuado.

editar
Si no le importa un paquete BGA, un dispositivo NAND Flash puede ser una alternativa a la tarjeta SD. Este puede operar en modo MMC o SPI. Consume menos que una tarjeta SD, pero aún consume 200 µA en modo de espera, por lo que aún querrá apagarlo con el FET de lado alto. Asegúrese de hacer que las E/S al chip sean bajas antes de desconectar la alimentación. Eso también se aplica a la tarjeta SD.

Gracias por la info. Desafortunadamente, actualmente estamos limitados a MCU con cargadores de arranque Arduino disponibles, pero estamos considerando el Atmega644PA debido al aumento de RAM. La MCU será despertada por una interrupción RTC para realizar las mediciones y estará apagada en otros momentos. ¿Hay alternativas a la tarjeta SD? Su sugerencia de obtener una MCU con mucha RAM para un búfer grande es buena y no se me ocurrió. :)
@stevenvh ¿Qué características del MOSFET BSS215P lo hacen adecuado para esta aplicación?
Un AVR puede incluso ser capaz de suministrar una tarjeta SD desde un pin GPIO (20mA debería ser posible).

(Respondiendo a mi propia publicación con información útil)

He realizado algunos experimentos con un conjunto limitado de tarjetas SD para comprobar su consumo de energía. Parecen variar ampliamente entre los fabricantes y dentro de los tipos, algunas tarjetas consumen 10 veces más energía de suspensión que otras.

Hay dos resultados a continuación. El primero es el consumo de corriente estimado al dormir, y el segundo es el consumo de corriente promedio para aproximadamente 1 sector, escribo cada 5 segundos para mi tablero .

Card                     Sleep (mA)         Cyclic write (mA)   Number of cards tested

Sandisk 4GB Class 4      0.34-0.95 (0.69)   0.64-1.25 (1.05)    5
Verbatim 4GB Class 4     0.06-0.12 (0.09)   0.12-0.17 (0.16)    6
Kingston 4GB Class 4     1.34-1.34 (1.34)   1.47-1.47 (1.47)    1
Lexar 4GB Class 4        0.09-0.09 (0.09)   0.11-0.12 (0.12)    2

Lexar 8GB Class 6        0.06-0.09 (0.08)   0.09-0.12 (0.10)    4 (best so far)

Toshiba 16GB Class 10    0.12-0.12 (0.12)   0.18-0.18 (0.18)    1

No he incluido la corriente máxima porque no parece una medida confiable con mi multímetro. Probablemente porque la tarjeta solo se escribe durante unos pocos ms. Pero me di cuenta de que todas las tarjetas dieron alrededor de 5 - 6 mA de medición máxima (suavizado) mientras que Lexar dio 2 - 3 mA (suavizado). Tenga en cuenta que la corriente máxima real es un orden de magnitud mayor que esto, pero indica que la tarjeta Lexar tiene una corriente de escritura baja y está inactiva.

ganador actual

Lexar 8GB Clase 6

Actualizaré esta lista a medida que se realicen más pruebas. (Última actualización: 2014-08-14)

Querrás un uCurrent ( eevblog.com/projects/ucurrent ) para tus experimentos. Conectado a un osciloscopio, puede brindarle una buena idea del consumo de energía a lo largo del tiempo durante varias secuencias de su programa.
seria genial si tienes algun dato actualizado
@rfii Desafortunadamente, no he trabajado en esto durante años.

Buenas pruebas. Consulte nuestro tutorial de registro de datos de baja potencia con Arduino Pro Mini y tarjetas SD: http://www.osbss.com/tutorials/temperature-relative-humidity/

Probablemente contenga exactamente lo que necesita (la interrupción RTC lo activa, cerca de un año de vida útil de la batería, etc.). Nuestro consumo de energía "principal" es de alrededor de 0,195 mA a 3,3 V, y puede bajar a 0,11 mA o mucho menos. si usa otras placas o el propio chip ATmega328P.

Tal como dijo @stevenvh, necesitará un transistor para controlar la alimentación del lector de tarjetas SD cuando el procesador está en modo de suspensión.

Las corrientes de suspensión más bajas que he visto para las tarjetas SD son de alrededor de 0,05 mA para el antiguo sandisk 256Mb y, al igual que la gente de OSBSS, rara vez obtengo compilaciones de mi registrador de datos por debajo de 0,1 mA porque las tarjetas SD típicas parecen consumir alrededor de 0,07 mA. Aún así, cuando llegue a ese territorio, debería poder obtener fácilmente 3-4 meses de un AA si su regulador de arranque es lo suficientemente eficiente.

Asegúrese de comprobar que está retirando las conexiones no utilizadas en su adaptador de tarjeta SD, o las corrientes de suspensión pueden ser mucho más altas. Explore también la biblioteca de bajo consumo de Rocket Screem, ya que esto le permite ingresar fácilmente a diferentes modos de suspensión 328P.

En cuanto al cambio: el compañero que escribió las bibliotecas SD para arduino advierte contra la desconexión de las tarjetas SD en el patio de recreo de Arduino, por lo que no he seguido ese enfoque. Tendría curiosidad por saber cómo funcionó para los chicos de OSBSS (?)