Copia de FATFS entre Ramdisk (FMC) y SD (SPI) en STM32F4 [cerrado]

0

Estoy tratando de resolver este problema. Estoy usando FATFS13 en mi placa STM32F469 personalizada y estoy usando la biblioteca de periféricos estándar.

He conectado 1 MB de SRAM a través del bus FMC y una tarjeta SD a través del bus SPI. Puedo montar en ambos hardware un sistema de archivos FAT, FAT12 en la RAM y FAT32 en la SD. Probé tarjetas SD de hasta 32 GB, así que puedo decir que todo está funcionando. Es posible administrar archivos en cada volumen. Los nombré RAMDISK y SDCARD en ffconf.h

Básicamente, quiero dos unidades para que el usuario pueda copiar archivos gráficos en la SRAM para un acceso más rápido durante la ejecución de los programas.

El problema es que cuando intento copiar un archivo de una unidad a otra, solo se copia la primera parte de los datos. Un solo ciclo: - leer de la fuente - copia a dest - leer de la fuente - > Error 9 en la fuente ((9) El objeto de archivo / directorio no es válido).

Intenté profundizar en el código, y con el depurador noté que después de escribir en el archivo de destino cuando es el momento de leer el segundo fragmento de datos, el 'obj- > fs- > fs_type' del el archivo de origen se establece en 0. Por lo tanto, la validación falla.

No puedo entender por qué. ¿Tuviste una experiencia similar?

Para evitar este error, necesito tener un solo archivo abierto por vez, por lo que resolví temporalmente el problema con esta secuencia: - fuente abierta - Leer chunck de datos en offset - fuente cercana - Destino abierto para añadir - Guardar parte de los datos - destino cercano.

Según su experiencia, ¿hay alguna forma particular de realizar una copia correcta en diferentes volúmenes?

Gracias.

    

1 respuesta

1

Entiendo que es difícil entender un problema a partir de piezas de código, solo me preguntaba si alguien tiene un problema similar. Después de muchas pruebas y depuración, probablemente entendí el problema ... Originalmente puse los dos sistemas de archivos FATFS en una matriz.

Como tengo dos unidades, declaré: FATFS FileSystems [FF_VOLUMES];

En cambio, intenté declarar dos estructuras diferentes como:

FATFS FileSystemSD;

FATFS FileSystemRAM;

Todo funcionó perfectamente. La copia entre los dos volúmenes está bien ahora. Entonces, si uso esas estructuras dentro de una matriz, de alguna manera, en algún lugar, los datos se desordenan si accedemos a archivos en diferentes volúmenes a la vez. Revisé los índices en el código pero no noté nada malo.

Por ahora, no puedo entender qué está pasando, haré más pruebas, pero esto resolvió mi problema.

    
respondido por el Francesco De Simone

Lea otras preguntas en las etiquetas