tarjeta microSD clase 4 en modo SPI devuelve 0x000000021F después de 'CMD8'

0

Estoy tratando de leer una tarjeta microSD a través de una ranura SD sin marca y una FPGA Basys3. La tarjeta microSD, Kingston microSD HC 8GB Clase 4, se usa a través de un adaptador de tarjeta SD, también Kingston.

Tengo problemas para superar el CMD8 del proceso de inicialización. Después de enviar CMD0 , respondió con 0x01 , lo cual es normal. Después de CMD0 envié el comando CMD8 ; respondió con 0x000000021F . No pude encontrar nada relacionado con este código en ninguna documentación.

Para probar, probé con un SanDisk Ultra SDHC 32GB Class 10 con el mismo código. Se inicializó con éxito.

Otras cosas que he intentado:

Por favor ayuda.

Formas de onda

El primero muestra todo el proceso de inicialización. SD_CD es Card Detect (Active Low) y SD_WP es Write Protect (Active Low). SD_CLK se ejecuta a 390 kHz, 256 veces más lento que _cpuClock . Tenga en cuenta que los SD_MISO , SD_CD , SD_WP y _cpuClock se simulan manualmente (es decir, no recibe ninguna señal del módulo SD). Una vez detectada la tarjeta, se espera 1 milisegundo, seguido de 74 SD_CLK 's.

LasegundaimagenesunzoomdeCMD0ysurespuesta.

LaterceraimagenesunacercamientodeCMD8ysurespuesta.

LaimagenfinalesunacercamientodeCMD55ysurespuesta.

Actualización1(Antesde@AnnoymousAnswer)Melasarregléparaponerenmismanosunpardecartasmás.Despuésdelaprueba,parecequesoloSanDiskClass10SDHC(tantoSDcomomicroSD)devuelveunestadofinalizadodeinicialización.ElKingstonClass4SDHCSDdevuelveuntiempodeesperadespuésdeCMD0,mientrasqueelKingstonClass4SDHCmicroSDdevuelveun0x000000021F.Cambiareladaptadornohizoningunadiferenciaentodosloscasos.Enlaimagendeabajo,losexitososestánenverdeylosnoexitososestánenrojo.

Actualización 2 (Respuesta a @Annoymous Answer) Después de cambiar MOSI de posedge a negedge , la tarjeta SD de la Clase 4 de Kingston parece haberse inicializado (lo que anteriormente se había agotado). Sin embargo, la tarjeta microSD Clase 4 de Kingston aún responde con 0x000000021F .

    
pregunta krismath

1 respuesta

3

La imagen CMD8 adjunta muestra la respuesta normal 1AA (2.7 - 3.6 V, y verifica el patrón AA).

Varias notas sobre cosas que veo:

  • no inicie el comando inmediatamente después de activar CS. Espere 8 ciclos de reloj de repuesto y, a continuación, solo inicie el comando;
  • lo mismo al final. No desactive CS solo después de pensar que obtuvo una respuesta completa para el comando. Realice 8 ciclos de reloj adicionales antes de desactivar CS;
  • No estoy seguro, pero las imágenes muestran que pones datos en las entradas de la tarjeta SD en el borde positivo del reloj de la tarjeta SD. Como recuerdo que la tarjeta SD guarda los datos en el borde positivo de su reloj, por lo tanto, poner los datos allí al mismo tiempo puede violar el tiempo. En mi implementación, si recuerdo correctamente, puse los datos en las líneas de entrada de la tarjeta SD en negedge, para que muestre en la siguiente posición.
respondido por el Anonymous

Lea otras preguntas en las etiquetas