2 votos

Uso de FatFS en la flash interna del microcontrolador STM32f303

Quiero usar la librería FatFS usando la memoria flash interna del STM32F303. He creado el archivo user_diskio.c y he descrito las funciones necesarias USER_write , USER_read y USER_ioctl para leer y escribir datos en/desde la flash interna

  if (FATFS_LinkDriver(&USER_Driver, USER_Path) == 0)
  { 
    result = f_mount(&FATFS_Obj,(TCHAR const*)USER_Path, 1);
    ...
  }

f_mount obtiene el error FR_NO_FILESYSTEM. Usando la función f_mkfs((TCHAR const*)USER_Path, 0, 512); consigue FR_NOT_ENABLED error. No entiendo, cómo debo formatear el sector de disco para utilizar la biblioteca FatFS.

1voto

Quiero usar la librería FatFS usando la memoria flash interna del STM32F303.

Eso no va a funcionar muy bien. Le recomiendo que lo reconsidere.

FatFS espera trabajar con un dispositivo de bloques en el que es posible escribir cualquier sector de 512 bytes del disco en cualquier momento. No es así como funciona la memoria flash en los dispositivos STM32 - en la serie STM32F3, la memoria flash está organizada como un conjunto de sectores de 2 KB (¡no los sectores de 512 bytes asumidos por FAT!), cada uno de los cuales sólo puede ser escrito como parte de un ciclo de programación/borrado.

Escribir en un único subsector de 512 bytes del sector flash de 2 KB requerirá una operación costosa y lenta en la que se borra todo el sector flash y luego se vuelve a escribir con un sector modificado. Esto desgastará la memoria flash muy rápidamente, provocando un fallo prematuro del dispositivo.


Dicho todo esto, basándome en el código de FatFS que he mirado, FR_NOT_ENABLED no parece ser un valor de retorno válido de f_mkfs() . O bien has leído mal el código de error, o te estás encontrando con un error en la versión de FatFS que estás utilizando.

0voto

Mark0978 Puntos 495

Deberías formatear tu flash como FAT32 o exFAT. Dado que tu flash es interna a la MCU, tendrás que conseguir que f_mkfs llamada correcta (de lo contrario, podrías haberla formateado externamente).

En este momento parece que tiene el argumento equivocado contar (consulte este ejemplo ) y FR_NOT_ENABLED no es un código de retorno válido para esta función de todos modos, por lo que probablemente ni siquiera la llames en tu código.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X