Respuesta de comando CMD8 de la tarjeta SD v1.0

0

Uso la biblioteca FAT32 de Elm Chan con un código de inicialización personalizado para la gestión SD con STM32. Tengo un montón de tarjetas SD de 512Mb-2Gb que quiero utilizar en hardware. Noté un comportamiento extraño con algunas de las cartas.
De acuerdo con el código de Elm, deberíamos emitir un comando CMD8 para verificar el tipo de tarjeta: 1.0 / 1.1 o 2.0+

Las tarjetas de 512Mb me dan

CMD0 OK
sdc_cmd: CMD8
Spi::assert
R: 0xFF
R: 0x5

Lo que es un comando ilegal + inactivo - OK

Las tarjetas de 1Gb / 2Gb me dan

CMD0 OK
sdc_cmd: CMD8
Spi::assert
get_response:
R: 0xFF
R: 0x1
CMD8 OK
SDHC detected
SD v2

después de la iniciación de standart emito

sdc_cmd: CMD16
Spi::assert
get_response: expecting 0x1
R: 0xFF
R: 0x1
Block size was set to 512
SD init OK
Spi::highspeed
disk_read: Drive=0, sector=0,
Sdc::read_block, Address=0, BlockSize=1
sdc_cmd: CMD17
Spi::assert
get_response: expecting 0x0
R: 0xFF
R: 0x1

Por lo tanto, no responde a CMD17 como esperaba. En Windows, todas las tarjetas de 2Gb funcionan bien y se detectan como SD, no SDHC.

La pregunta:

1) ¿Por qué la tarjeta de 2Gb se comporta como v2.0? 2) ¿Qué hacer en este caso? ¿Dónde me equivoqué en el proceso de inicio?

El código es aquí SDC_Error Sdc :: initialize (void)

    
pregunta pugnator

1 respuesta

1
  

1) ¿Por qué la tarjeta de 2Gb se comporta como v2.0?

Casi todas las tarjetas de 2 GB son más nuevas que la especificación de tarjeta SD 2.0 y, por lo tanto, admiten los comandos más nuevos. Pero aún se ejecutan en modo SD: la dirección de 32 bits se mide en bytes y no en bloques de 512 bytes.

Solo las tarjetas SDHC > = 4GB usan direcciones de bloque de 512 bytes.

  

2) ¿Qué hacer en este caso?

Establezca el tamaño de bloque en 512 bytes y use la tarjeta como cualquier otra tarjeta SD.

  

¿Dónde cometí un error en el proceso de inicio?

Debe usar la elaborada inicialización de la tarjeta SD que se envía con FATFS en lugar de intentar rodar la suya propia.

    
respondido por el Turbo J

Lea otras preguntas en las etiquetas