STM32 y SDCard: gestión de espacio

0

Mi tarea es recopilar mediciones de las periferias del STM32F4 en la tarjeta SD y comencé a leer sobre esto. ¿Podrías volver a verificar si estoy en lo correcto?

  • La memoria de un solo bloque en mi tarjeta SDCard es de 512 bytes, por lo que antes de escribir algo, debería reunir 512 bytes de datos (de lo contrario, perderé el resto del bloque).
  • Para hacer eso, necesito escribir cola. Decidí crear DMA en modo fifo, transferir de flash a SRAM, y en la interrupción DMA use la función FatFS para moverlo a la tarjeta SD.

Y mi segunda pregunta, ¿cuál sería la mejor opción, cuando los datos recopilados pasen a 512 bytes (por ejemplo, antes de la ejecución del bucle hay 510 bytes de datos y vienen 10 bytes nuevos). ¿La funcionalidad DMA se proporciona por sí misma o debería evitarla de alguna manera?

    
pregunta m0drzew

1 respuesta

1

No, cuando escribes menos de 512 bytes, tu biblioteca FatFS (o casi cualquier otra):

  1. Lee el bloque en la RAM
  2. Agregue sus datos a los existentes.
  3. Borre el bloque en la tarjeta SD.
  4. Escribe todo el bloque desde la RAM.

Y obviamente no menciono la biblioteca que lee descriptores de archivos o cualquier cosa que probablemente suceda también si abres el archivo cada vez que quieres escribir en lugar de escribir en uno que solo se abre una vez al principio .

En cuanto a la segunda pregunta: Depende. Si configura el DMA para usar solo un búfer de 512 bytes, pueden ocurrir cosas:

  1. Si el DMA está configurado para usar el búfer como un búfer circular, en su ejemplo, escribirá los 2 bytes al final del búfer y sobrescribirá los primeros 8 bytes al comienzo del búfer con los bytes restantes.
  2. Si no lo está utilizando como un búfer circular, suponiendo que lo configuró para desencadenar una interrupción de "Transferencia completa", se activará justo después de que el último (512º) byte se almacene en el búfer. Ahora, dependiendo de la velocidad de transmisión de su fuente de datos (sea lo que sea que no haya mencionado), tiene un tiempo limitado: debe reconfigurar el DMA para usar otro búfer o, si hay tiempo suficiente, procese sus datos antes de que llegue el próximo byte . Si no maneja esa interrupción de Transferencia completa en el tiempo suficiente y llegan nuevos datos, todos los nuevos datos se perderán y el DMA activará una interrupción de saturación (si está habilitada).
respondido por el Adam Czapski

Lea otras preguntas en las etiquetas