20 min. La SD es la fuente de verdad: el radio pierde paquetes, la tarjeta no. Pero solo si se escribe de forma que sobreviva a un corte de energĂa.
La tarjeta escribe en bloques (tĂpicamente 512 B) y en erase blocks mucho mayores. Escribir 20 bytes por muestra provoca ciclos de lectura-modificaciĂłn-escritura del bloque completo. Además, cada cierto tiempo la tarjeta hace wear leveling internamente y una escritura que normalmente tarda microsegundos puede tardar decenas de milisegundos. Ese pico es impredecible y hay que diseñar para Ă©l.
Consecuencia directa: la escritura a SD nunca va en la tarea de adquisiciĂłn. Va en su propia tarea, alimentada por una cola.
[tareas de sensores] → cola → [tarea SD] → buffer en RAM → flush a tarjeta
El tamaño del buffer se elige por el peor caso: cuántas muestras entran mientras dura el pico de escritura más largo. Si el buffer se llena, hay que decidir qué se tira — y decidirlo antes, no en carrera.
| PolĂtica | Se pierde en un corte | Costo |
|---|---|---|
| Flush cada muestra | casi nada | mata el rendimiento y desgasta la tarjeta |
| Flush por tiempo (p. ej. cada 1 s) | 1 s de datos | predecible — suele ser la respuesta correcta |
| Flush cada N registros | hasta N registros, y N no equivale a un tiempo fijo | engañoso: a baja frecuencia se pierde muchĂsimo tiempo de datos |
FAT32 guarda metadatos (tamaño, cadena de clusters) aparte de los datos. Si se corta la energĂa entre escribir datos y actualizar metadatos, el archivo queda con tamaño cero o truncado aunque los bytes estĂ©n fĂsicamente en la tarjeta. De ahĂ dos defensas:
preAllocate de SdFat) — los metadatos se escriben una vez, al inicio.đź’ˇ exFAT sube el lĂmite de tamaño de archivo, pero no arregla el problema de metadatos. La defensa es el formato, no el sistema de archivos.
preAllocate, buffering)sdmmc y VFS/FATFS