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)