Así que pude conectar con éxito una tarjeta SD Sandisk con Spartan 3 FPGA (usando verilog). La tarjeta después del encendido se inicializa correctamente y es capaz de leer y escribir el sector de datos correctamente. El único problema que queda es que después de encender si presiono el botón de reinicio, la tarjeta se cuelga y deja de funcionar. Tampoco he podido averiguar qué significa un restablecimiento completo para la tarjeta SD. ¿Debería ser reinicializado de alguna manera? ¿Qué comando debo enviar a la tarjeta para eso? Cualquier ayuda es apreciada.
Tendrá que simular su código Verilog o usar el analizador para ver las cosas que suceden en el sistema en vivo.
En mi opinión, solo hay dos circunstancias en las que la tarjeta SD aparece "colgada":
mala implementación de la especificación, cuando la tarjeta no entiende lo que está pasando o no puede entender que el comando anterior debe cancelarse. Sin embargo, la tarjeta debe decirle algo que no sea el 1 durante la ejecución de estos comandos; por ejemplo, durante la lectura de múltiples bloques, se transmite CRC, que contendrá ceros, durante la escritura de múltiples bloques, el host debe transmitir CRC; de lo contrario, la tarjeta responde con error, que también contendrá 0 Su tarea aquí es verificar el conjunto de comandos de la tarjeta SD que usa su controlador y ajustar la secuencia de inicialización (número de ciclos de reloj libres antes de continuar con CMD0) en consecuencia;
su máquina de estado FPGA falla después de presionar restablecer. Por ejemplo, el reloj deja de funcionar en el pin de entrada del reloj de la tarjeta SD, MOSI se atasca, etc. información en la línea MOSI.
Una vez que se enciende e inicializa una tarjeta SD, pero luego reinicia su FPGA, es probable que el código inicie una nueva inicialización de la tarjeta ya inicializada. La interfaz SD no tiene ninguna línea de reinicio especial. El único restablecimiento completo en SD es el reinicio de encendido, por lo que la mejor manera de llevar una tarjeta SD al estado preinicializado es apagar y encender.
if(!reset)
parte de mi código? Y si se presiona el botón de reinicio, ¿a qué estado debería ir mi FSM diseñado? ¿Inactivo o CMD0?
TEMLIB
Dulce