Estoy conectando una tarjeta SD a través de SPI usando un microcontrolador AVR (más específicamente es la consola Uzebox).
Puedo inicializar con éxito la tarjeta activando CRC check ON con CMD59 (así que tengo un algoritmo CRC7 comprobado), y puedo leer sectores de él (descargar los datos leídos por CMD17 da los resultados correctos: veo lo que hay en el tarjeta propiamente dicha).
Lo que parece que no puedo trabajar es una verificación de CRC para los sectores de datos que usan los bytes de CRC recibidos de la tarjeta.
Actualmente tengo tres tarjetas SDSC que verifiqué para comportarme de la siguiente manera con mi algoritmo:
-
Dos de las tarjetas dan el mismo valor para ambos bytes CRC, y ninguno corresponde al resultado de CRC-CCITT con un valor de inicio 0x0000 o 0xFFFF (probado con múltiples sectores, los valores cambian según los datos del sector , pero los dos bytes son siempre los mismos).
-
La tercera tarjeta parece no tener CRC, proporcionando 0x0000 en estos bytes.
El código de transmisión de SPI para esos bytes finales parece correcto, hice algunos pasos para verificar que efectivamente leí lo que quiero incluir y que realmente hago dos transacciones de SPI para los dos bytes.
¿Alguien tiene alguna idea de lo que podría estar pasando allí? ¿O debería simplemente olvidarme de esos bytes CRC? (Tal vez las tarjetas simplemente no las implementen o lo hagan incorrectamente en modo SPI)