De acuerdo con las hojas de datos de la tarjeta SD, hay una resistencia pull-up interna en la línea DAT3 y podemos usar esta línea para detectar la tarjeta. Además, se describe el comando ACMD42 que se utiliza para desactivar esta resistencia pull-up. Sin embargo, cuando busco algún código de controlador de dispositivo SD, veo que no envían este comando.
¿Es obligatorio enviar el comando ACMD42 o es una recomendación? ¿Qué sucede si no enviamos este comando?
Tiene razón en que, según las especificaciones, la línea DAT3 tiene varios usos.
En modo SD es la cuarta línea de datos y en modo SPI es la señal de selección de chip. La especificación simplificada de la capa física versión 4.10 dice:
En el momento del encendido, esta línea tiene un pull up de 50 KOhm habilitado en la tarjeta.
Y continúa diciendo (énfasis mío):
Para la detección de tarjetas, el host detecta que la línea se eleva. Este pull-up debe ser desconectado por el usuario , durante la transferencia de datos regular, con el comando SET_CLR_CARD_DETECT (ACMD42)
Entonces, la especificación establece explícitamente que se debe usar ACMD42 para desconectar la resistencia pull-up.
¿Qué pasaría si el anfitrión no hace esto? Hay tres escenarios:
Solo puedo adivinar sobre el modo SD ya que esa parte de la especificación no es pública.
Tenga en cuenta que una gran cantidad de código en línea para tarjetas SD es de bastante mala calidad. Hay varias partes de la especificación que son bastante claras sobre lo que debe hacer un host en varios puntos. Por lo general, estos se simplifican en el código público. Sin embargo, este código seguirá funcionando el 90% del tiempo.
Entonces, en resumen: la especificación dice que debe desconectar la resistencia, pero si no lo hace, probablemente no tendrá problemas en el modo SPI.
austin
cagatayo