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.