La tarjeta SD responde con un comando ilegal (0x04) cuando envío Write_Block (o Read_Block)

1

Estoy intentando hacer rodar mi propia gestión de la tarjeta SPI SD. Hasta ahora, puedo obtener la tarjeta inicializada (detalles de eso más abajo). Una vez inicializado, cuando envío los comandos Write_Block (CMD24) o Read_Single_Block (CMD17), la tarjeta SD siempre devuelve 0x04 (comando no válido) como respuesta R1. ¿Alguien ha visto esto antes?

Más información detallada sobre cómo configuro la tarjeta, etc.:

  • Envío 74 bits vacíos a la tarjeta con CS alto,
  • Envía CMD0 con CRC 0x95 hasta que obtenga 0x01 como respuesta,
  • Envíe CMD8, argumento 0x1AA, con CRC 0x87, y obtenga una respuesta R1 de 0x01, respuesta R7 de 0x1AA,
  • Enviar CMD55 / ACMD41 hasta que obtenga una respuesta R1 de 0x00

(He seguido todos estos pasos con un depurador para comprobar que estoy obteniendo las respuestas que espero)

En este punto, envío CMD17 o CMD24 y obtengo una respuesta de 0x04. He probado algunos argumentos diferentes como direcciones, 0x00, 0x01, 0x200, pero todos con el mismo resultado. ¿Alguien tiene alguna idea aquí?

Gracias de antemano.

EDITAR: Tuve otro tipo de problema de temporización que causó esto: mi reloj estaba relativamente confuso (un pulso muy largo y luego 7 cortos para cada byte), y eso parece haber causado el problema (no estoy seguro, ya que sigo trabajando a través de otras cuestiones). Me sorprende que logré que la tarjeta se inicializara en absoluto.

    
pregunta Leon

1 respuesta

1

Como último paso de la inicialización, es posible que desee establecer explícitamente la longitud del bloque en 512 con CMD16 antes de intentar acceder a la tarjeta para leer o escribir.

Editar : como esta solución rápida posible no funcionó, hagamos una solución de problemas más profunda:

  1. prueba otra tarjeta, mejor varias si tienes, para ver si alguna de ellas funciona; de esta manera podremos descubrir si el problema está relacionado con la tarjeta o su interoperabilidad con su código;
  2. Compruebe que envía el CRC correcto para el comando CMD17 / CMD24. El comando ilegal es la respuesta si el CRC es incorrecto;
  3. Después de que CMD17 / CMD14 falla, emita el comando CMD13 para obtener el estado R2: la tarjeta puede estar bloqueada o experimentar errores ECC;
  4. Lea el registro OCR para ver si la tarjeta puede funcionar con el voltaje que usted suministra (en particular, la matriz de memoria de la tarjeta, no solo su interfaz SPI y su controlador);
  5. También leería CID y CSD para ver qué contiene la tarjeta.
respondido por el Anonymous

Lea otras preguntas en las etiquetas