2011-11-10 13 views
5

Tengo 32   GB Kingston SDHC tarjeta microSD que tiene que comunicarse con MSP430F2618 a través de SPI. No pude inicializarlo usando CMD55 + ACMD41 (con bit30 configurado en 1), como se describe en el documento de especificación SD. Lo que funciona es la siguiente secuencia:SDHC tarjeta microSD e inicialización de SPI

CMD0, arg: 0   , CRC: 0x95 (response:0x01) 
    CMD8, arg: 0x1AA  , CRC: 0x87 (response:0x01) 
    CMD1, arg: 0x40000000, CRC: 0xFF (response:0x00) 

me trataron también con una tarjeta SanDisk GB 8   y trabaja para eso también. De hecho, estoy usando CMD1 aquí, no ACMD41, con el bit HCS configurado en 1. Sin embargo, no es estable, a veces funciona, a veces no funciona. Esto puede ser sobre hardware.

¿No es extraño que las tarjetas respondan a CMD1 con el argumento 0x40000000?

Respuesta

6

No debe usar CMD1 para inicializar tarjetas SDHC; como se dice en la especificación de la tarjeta SD:

En cualquiera de los casos CMD1 no se recomienda porque puede ser difícil para el host distinguir entre tarjeta MultiMediaCard y tarjeta de memoria SD.

Algunos controladores (las tarjetas más nuevas y de mayor capacidad en su mayoría) simplemente permanecerán en modo INACTIVO si emite CMD1. Primero debe emitir CMD8 0x1AA después del reinicio (CMD0), y luego usar CMD55 + ACMD41.

tl; dr para inicializar la tarjeta debe:

  1. CMD0 arg: 0x0, CRC: 0x95 (respuesta: 0x01)

  2. CMD8 arg: 0x000001AA, CRC: 0x87 (respuesta: 0x01)

  3. CMD55 arg: 0x0, CRC: ninguna (CMD55 siendo el prefijo a cada ACMD)

  4. ACMD41, arg: 0x40000000, CRC: cualquier

  5. si la respuesta: 0x0, que estás bien; si es 0x1, ir a 3.

Tenga en cuenta que la mayoría de las tarjetas de requieren pasos de 3/4 a repetirse, por lo general una vez, es decir, la secuencia real es CMD0/CMD8/CMD55/ACMD41/CMD55/ACMD41 - a asegúrese de probar n veces (seleccione n dentro de su razón), y suponga que falla si no lo hace.

Además, tenga en cuenta que usted debe valer SS (también conocido como CS) bajo al menos antes y después de CMD0 - y, en realidad, probablemente siempre al enviar cualquier comando a la tarjeta SD.

Cuestiones relacionadas