CLI Systems presentó UTFS (escrito también como μTFS), un sistema de archivos liviano pensado para microcontroladores con recursos escasos. A diferencia de filesystems tradicionales como FAT32 o EXT4, o incluso de alternativas más livianas como LittleFS y SPIFFS (las más usadas en placas como el ESP32), UTFS apunta a un escalón más simple todavía: no usa memoria dinámica y omite funciones complejas como wear leveling.

¿Para qué casos sirve UTFS?

Está diseñado para memoria plana y byte-direccionable: EEPROM en crudo, páginas de flash del propio CPU o memorias externas SPI/I²C. Permite que firmware bare-metal almacene blobs nombrados (los "archivos") uno detrás del otro. Cada archivo se acompaña de un header fijo de 24 bytes con metadatos: identificadores, tamaños y firmas definidas por la aplicación.

Especificaciones y características

  • Footprint — Header fijo de 24 bytes por archivo; cero uso de heap (sin malloc).
  • Formato — Layout secuencial inspirado en TAR; forward-compatible, así que se pueden agregar archivos sin romper layouts existentes.
  • Storage-agnostic — Solo requiere portar dos funciones para interactuar con el medio físico: sys_read y sys_write.
  • Confiabilidad — Usa firmas definidas por la aplicación (por ejemplo 0xABCD) para detectar almacenamiento corrupto o sin inicializar en la primera llamada a utfs_load().
  • Licencia — Open source bajo MIT, sin formato propietario que ate al desarrollador a un fabricante.
UTFS ajusta automáticamente las posiciones de los datos cuando los tamaños cambian entre revisiones del firmware (izquierda), y usa una dirección base personalizada para coexistir con datos legados (derecha)
UTFS ajusta automáticamente las posiciones de los datos cuando los tamaños cambian entre revisiones del firmware (izquierda), y usa una dirección base personalizada para coexistir con datos legados (derecha)

¿Dónde se ubica frente a las alternativas?

Muchos proyectos con microcontrolador resuelven el problema guardando todos los datos como una estructura grande en una dirección fija de EEPROM. Es simple, pero se rompe si el formato cambia: los datos viejos pasan a ser inválidos. En la otra punta, FatFs o LittleFS ofrecen prestaciones avanzadas pero requieren más memoria y pesan más en correr.

UTFS se sitúa en el medio. No incluye wear leveling ni escrituras atómicas seguras, por lo que un corte de energía durante un save puede dejar datos parcialmente escritos (igual que ocurre con escrituras normales sobre EEPROM). A cambio, mantiene la simplicidad: cada dato se guarda como un bloque nombrado independiente, fácil de gestionar y actualizar en sistemas chicos.

¿Cómo se prueba en hardware real?

La documentación incluye ejemplos funcionales sobre Arduino Uno (ATmega328, usando la EEPROM integrada) y Microchip SAMD20 (usando flash interna). Para llevarlo a otro hardware solo hay que conectar el API a las funciones de lectura y escritura del dispositivo.

El código fuente en C99, los ejemplos y la documentación completa están disponibles en el repositorio GitHub de CLI Systems, listos para integrar a cualquier proyecto. Más información, incluyendo el detalle de la implementación, está en la página del proyecto.

Programa "Hello World" sobre UTFS
Programa "Hello World" sobre UTFS

Vía Hackaday.