Ver2.0 SDHC Tiempo de respuesta largo de la tarjeta después del ACMD41 durante la inicialización

0

Me gustaría implementar un manejo de tarjetas SD de muy bajo consumo con los 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 alimentación de la tarjeta SD para ahorrar energía. Y me gustaría llegar a la inicialización de la tarjeta SD tan rápida como pudiera.

Para inicializar la tarjeta SD utilicé la sugerencia de @vaxquis de este problema:

¿Qué es la ¿Corregir la secuencia de comandos para la inicialización de la tarjeta microSD en SPI?

Está funcionando bien, puedo inicializar la tarjeta, guardar los datos y volver a cargarlos si es necesario.

PERO, después de reiniciar la alimentación de la tarjeta SD, antes del comando ACMD41, cuando configuro la señal de selección de chip en BAJA, la tarjeta SD responderá 0x00 solo después de aprox. ~ 50-80ms. Durante ese tiempo 0x01 es la respuesta de la SD. Entonces, si sigo enviando el ACMD41 continuamente, obtuve una respuesta de 0x00 solo después de 50-80 ms. O, si configuro LOW para CS y espero 50-80ms, inmediatamente obtuve una respuesta 0x00.

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

¿Alguna sugerencia para mi problema?

Así que mi secuencia de inicio:

  • Habilitar la tarjeta SD VCC
  • espera ~ 1ms
  • iniciar la inicialización (CS alto + enviar 80 reloj)
  • CS LOW
  • CMD0 (arg: 0, crc: 0x95) + espera respuesta R1
  • CMD8 (arg: 0x000001AA, crc: 0x87) + espera respuesta de eco R1 + arg
  • CMD55 (arg: 0, crc: 0x65) + respuesta de espera
  • CMD41 (arg: 0x40000000, crc: 0x77) + respuesta de espera
  • repita ACMD41 (CMD55 + CMD41) hasta 0x00
  • CS HIGH
  • ... escribe, lee datos ...
  • espera ~ 1ms
  • desactivar la tarjeta SD VCC
  • duerme ~ 800ms
  • empezar de nuevo

Si no se cambia la alimentación de la tarjeta SD, este problema no aparece.

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

    
pregunta D_Dog

1 respuesta

1

Leyendo su pregunta, tengo una analogía: detener el motor del vehículo en el semáforo rojo por un minuto o dos. Piensas eso: ahorras un poco de gas, 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 estar equivocadas, a menos que el motor esté especialmente diseñado para arrancar desde arriba.

Motor ordinario cuando arranca: consume más gas; emite más contaminación; y lleva mucho más.

Ahora piense en su caso: ¿cuánta energía consume el reinicio de la tarjeta SD en comparación con el modo de espera / inactividad? También le aconsejo que busque la tarjeta de baja potencia especial , o la que está diseñada para operaciones regulares de apagado / apagado (lea: tiempo de inicio más rápido y bajo consumo de energía durante la inicialización). No estoy seguro de que existan, o pueden existir solo para el mercado industrial (y costarán más que las tarjetas de consumo).

Actualización: observe lo siguiente en la especificación:

  

6.4.2 Apagado y ciclo de encendido

     

Cuando el host apaga la alimentación, la tarjeta VDD se reducirá a menos de 0.5 voltios durante un período mínimo de 1 ms. Durante el apagado, DAT, CMD y CLK deben ser desconectados o conducidos a un 0 lógico por el host para evitar una situación en la que la corriente de operación se dibuja a través de las líneas de señal.

Por lo tanto, la medición del consumo de la tarjeta SD en su pin de alimentación puede no ser suficiente, la corriente aún puede fluir a través de los pines de señal.

En mi opinión, para que la tarjeta consuma un mínimo de energía en el estado de encendido, debe configurar el CLK bajo (por lo tanto, use el modo SPI 0, o al menos asegúrese de que no cambie) y CS alto.

Si aún desea mantener el modo de ciclo de energía cuando las tarjetas realmente muestran tiempos de arranque prolongados, entonces no habrá una solución de ingeniería eléctrica , debe realizar el manejo del software. Por ejemplo, divida el búfer de datos en dos partes, y complete una parte mientras inicia la tarjeta SD y vacía la segunda parte. Se asumirá que iniciará la tarjeta dos veces más, pero garantizará que no se interrumpan las tarjetas con un tiempo de inicio de hasta ~ 250 ms.

  

Y olvidé mencionar que no uso resistencias de pull-up en mi circuito porque el SPI funcionó sin ellos. ¿Pero pueden mejorar el rendimiento?

No afectará el rendimiento, afectará el consumo de energía. Por lo que sé, las resistencias se pueden usar para diseños críticos para la metastabilidad, ya que usted maneja la única tarjeta y realiza una inicialización completa desde cero y sin que la señal de salida de MCU flote, no necesita pull-ups.

Y, por cierto, olvidé mencionar: la tarjeta SD puede tener dominios internos (lo más probable es que sean débiles, al menos en el pin CS), que pueden ser configurables. Es posible que desee asegurarse de deshabilitar los pull-ups internos.

    
respondido por el Anonymous

Lea otras preguntas en las etiquetas