Antecedentes: estoy usando un nRF52832 Kit de desarrollo con esta tarjeta microSD en este panel informativo . La tarjeta se alimenta a 3 V (he probado que funciona con el regulador del kit de desarrollo y una fuente de alimentación externa). Estoy usando resistores de la serie de 22 ohmios en las líneas SCLK, SDO, SDI, CS y un resistor pullup de 10k ohmios en el SDO.
Estoy usando FatFs para montar la tarjeta SD y escribir en un archivo. Puedo inicializar la tarjeta, pero mi llamada a f_open
devuelve el código de error 13 ( FR_NO_FILESYSTEM
).
Después de algunas excavaciones, pude determinar que FR_NO_FILESYSTEM
se está devolviendo desde una llamada a find_volume
, que intenta encontrar una partición FAT en la unidad. Entiendo que esto significa leer el sector 0 de la tarjeta y leer los bytes 510 y 511. Para un volumen FAT válido, esos bytes deben ser 0x55 0xAA. Sin embargo, mirando las transacciones SPI, mi tarjeta parece devolver 0x00 0x00.
He intentado formatear mi tarjeta SD como FAT32 usando el Formateador de tarjetas SD , la herramienta de formato de Windows, La Utilidad de Disco de OS X, Ubuntu gparted y dd, pero para asegurarme, usé Hex Workshop para leer el sector de arranque de la tarjeta SD en mi computadora portátil y vi a 0x55 0xAA en la posición apropiada:
EstoyusandounSaleaeLogicProparacapturarlasecuenciaSPI.Noestoysegurodecuáleslamejorformadecompartirlacapturacompleta,peroaquíhayunatablaquemuestratodoslosvaloresdecodificados:
Puede ver que la inicialización funciona bien (responde a CMD0, CMD8, etc.), y hacia el final devuelve 0xFE (¿entiendo que indica un token de datos válido?), pero luego 0x00 0x00 en lugar de 0x55 0xAA.
Mi ffconf.h está aquí: enlace - Mi sdmm.c se modificó ligeramente para usar la API SPI de Nordic ( nrf_drv_spi_transfer
) y función de retardo ( nrf_delay_us
). Estoy usando un pin GPIO separado como mi CS ( nrf_gpio_pin_set
y nrf_gpio_pin_clear
).
¿Alguien tiene alguna idea sobre por qué esta lectura no funciona?