1 votos

Ver2.0 Tarjeta SDHC tiempo de respuesta largo después de ACMD41 durante la inicialización

Me gustaría implementar un manejo de tarjetas SD de muy bajo consumo con procesadores MSP430. Me gustaría registrar los datos de medición en la tarjeta SD sin un sistema de archivos. Quiero encender y apagar la tarjeta SD para ahorrar energía. Y me gustaría alcanzar una inicialización de la tarjeta SD tan rápida como sea posible.

Para inicializar la tarjeta SD he utilizado la sugerencia de @vaxquis de este tema:

¿Cuál es la secuencia de comandos correcta para la inicialización de la tarjeta microSD en SPI?

Funciona muy bien, puedo inicializar la tarjeta, guardar los datos y recargarla si es necesario.

PERO, después del reinicio de la tarjeta SD, antes del comando ACMD41 cuando pongo la señal de selección de chip en LOW, entonces la tarjeta SD responderá 0x00 sólo después de aproximadamente ~50-80ms. Durante ese tiempo 0x01 es la respuesta de la SD. Así que si sigo enviando el ACMD41 continuamente tengo la respuesta 0x00 sólo después de 50-80ms. O bien, si pongo LOW para CS y espero 50-80ms entonces tengo inmediatamente la respuesta 0x00.

Después de la inicialización, todo va bien.

¿Alguna sugerencia para mi problema?

Así que mi secuencia de init:

  • Habilitar tarjeta SD VCC
  • esperar ~1ms
  • inicio de la inicialización (CS alto + envío del reloj 80)
  • CS LOW
  • CMD0 (arg:0, crc:0x95) + esperar respuesta R1
  • CMD8 (arg:0x000001AA, crc:0x87) + wait R1 + arg echo response
  • CMD55 (arg:0, crc:0x65) + esperar respuesta
  • CMD41 (arg:0x40000000, crc:0x77) + esperar respuesta
  • repetir ACMD41 (CMD55 + CMD41) hasta 0x00
  • CS ALTO
  • ... escribir, leer datos ...
  • espera ~ 1ms
  • desactivar la tarjeta SD VCC
  • dormir ~800ms
  • volver a empezar

Si la alimentación de la tarjeta SD no está conectada, este problema no aparece.

Y estoy usando una tarjeta SDHC Ver2.0 de 8GB.

1voto

krum85 Puntos 306

Al leer tu pregunta me viene una analogía: parar el motor del vehículo en el semáforo en rojo durante uno o dos minutos. Piensas que: ahorras un poco de gasolina, ahorras un poco en el desgaste del motor, y crees que eres verde porque no emites gases en ese minuto o dos.

El problema en esta analogía es que todas las suposiciones pueden ser erróneas, a menos que el motor esté especialmente diseñado para un arranque regular.

El motor ordinario cuando se pone en marcha: consume más gasolina; emite más contaminación; y se desgasta mucho más.

Ahora piensa en tu caso: ¿cuánta energía consume el reinicio de la tarjeta SD frente al modo de reposo/inactividad? También te aconsejo que busques especial tarjeta de bajo consumo, o la que está diseñada para operaciones regulares de apagado/encendido (léase: tiempo de arranque más rápido y bajo consumo de energía durante la inicialización). No estoy seguro de que existan, o puede que sólo existan para el mercado industrial (y costarán más que las tarjetas de consumo).

Actualización: observe lo siguiente en el pliego de condiciones:

6.4.2 Apagado y ciclo de encendido

Cuando el host apaga la alimentación, la VDD de la tarjeta deberá bajar a menos de 0,5Volt durante un periodo mínimo de 1ms. Durante el apagado, DAT, CMD y CLK deben ser desconectados o conducidos a un 0 lógico por el host para evitar que la corriente de funcionamiento se dibuje a través de las líneas de señal.

Por lo tanto, medir el consumo de la tarjeta SD en su pin de alimentación puede no ser suficiente - la corriente puede seguir fluyendo a través de los pines de señal.

En mi opinión, para que la tarjeta consuma el mínimo de energía en el estado de encendido debes poner CLK bajo (así usar el modo 0 de SPI, o al menos asegurarte de que no conmuta) y CS alto.

Si todavía quiere seguir con el modo de ciclo de energía cuando las tarjetas pueden realmente mostrar largos tiempos de arranque, entonces no habrá ingeniería eléctrica solución, debe realizar la manipulación en el software. Por ejemplo, dividir el buffer de datos en dos partes, y llenar una parte mientras se inicia la tarjeta SD y se vacía la segunda parte. Esto asumirá que usted iniciará la tarjeta dos veces más, pero asegurará que no haya interrupción con tarjetas con un tiempo de inicio de hasta ~250 ms.

Y olvidé mencionar que no uso resistencias pull-up en mi circuito porque el SPI funcionaba sin ellas. Pero, ¿pueden mejorar el rendimiento?

No afectarán al rendimiento, pero sí al consumo de energía. Por lo que sé las resistencias pueden ser utilizadas para los diseños críticos a la metaestabilidad, como usted conduce la única tarjeta y realizar la inicialización completa desde cero y sin señal de salida MCU flotante no necesita pull-ups.

Y por cierto, se me olvidó mencionarlo: La tarjeta SD puede tener pull-ups internos (probablemente débiles - al menos en el pin CS), que pueden ser configurables. Es posible que desee asegurarse de desactivar los pull-ups internos.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X