Spiffs (SPI Flash File System)
V0.3.7
Copyright (c) 2013-2017 Peter Andersson (PellePlutt1976 en Gmail.com)
Para cosas legales, vea la licencia. Básicamente, puede hacer lo que quiera con la fuente. Use, modifique, venda, imprima, lo enrolle y fumarlo, siempre y cuando no me considere responsable.
¡Me encanta escuchar comentarios!
INTRODUCCIÓN
Spiffs es un sistema de archivos destinado a dispositivos SPI ni Flash en objetivos integrados.
Spiffs está diseñado con las siguientes características en mente:
- Objetivos pequeños (integrados), RAMS SPARSE sin montones
- Solo se pueden borrar grandes áreas de datos (bloques)
- Un borrado restablecerá todos los bits en bloque a los que
- Escribir tira a uno a ceros
- Los ceros solo se pueden sacar a los que borre
- Nivelación de desgaste
EDIFICIO
mkdir build; make
De lo contrario, configure la variable builddir en la parte superior de makefile como algo opuesto a la build predeterminada. Verificación de cordura en el host a través de make test y consulte .travis.yml para el procedimiento oficial de prueba en profundidad. Consulte el wiki para integrar los spiffs en proyectos y Spiffsimg de Nodemcu es un buen ejemplo sobre el tema.
CARACTERÍSTICAS
Lo que hace Spiffs:
- Diseñado específicamente para un uso bajo de RAM
- Utiliza buffers de RAM de tamaño estático, independientemente del número de archivos
- API similar a Posix: Abrir, cerrar, leer, escribir, buscar, estadística, etc.
- Puede ejecutarse en cualquier flash ni solo flash SPI, en teoría, también en el flash incrustado de un microprocesador
- Las configuraciones de múltiples spiffs pueden ejecutarse en el mismo objetivo, e incluso en el mismo dispositivo SPI Flash
- Implementa la nivelación del desgaste estático
- Verificaciones de consistencia del sistema de archivos incorporados
- Altamente configurable
Lo que los spiffs no:
- Actualmente, Spiffs no admite directorios. Produce una estructura plana. Crear un archivo con Path tmp/myFile.txt creará un archivo llamado tmp/myfile.txt en lugar de un myfile.txt en el directorio tmp .
- No es una pila en tiempo real. Una operación de escritura podría durar mucho más que otra.
- Mala escalabilidad. Spiffs está destinado a dispositivos de memoria pequeños: los tamaños normales para flashes SPI. Ir más allá de ~ 128mbyte es probablemente una mala idea. Este es un efecto secundario del objetivo de diseño para usar la menor cantidad de RAM como sea posible.
- Actualmente, no detecta ni maneja bloques malos.
- Una configuración, un binario. No hay spiffs genéricos binarios que manejen todo tipo de configuraciones.
AVISO
0.4.0 está en construcción. Esta es una reescritura completa y cambiará la estructura subyacente. Por lo tanto, no será compatible con versiones anteriores del sistema de archivos. La API es la misma, con modificaciones menores. Se eliminarán algunos indicadores de configuración (ya que son obligatorios en 0.4.0) y algunas características pueden caer hasta 0.4.1. Si tiene alguna preocupación o pregunta, se puede discutir en el tema #179
Más información
Consulte el wiki para configurar, integrar, usar y optimizar los spiffs.
Para el diseño, consulte Docs/Tech_Spec.
Para un controlador SPI Flash genérico, vea esto.
HISTORIA
0.3.7
- Se corrigió evitar la búsqueda de compensaciones negativas #158
- Se corrigieron los desplazamientos del descriptor de archivo no actualizados para múltiples FD en el mismo archivo #157
- Página de caché corregido no cerrado para los archivos eliminados #156
- Se solucionó un error Lseek cuando buscaba exactamente al final de un primer nivel totalmente indexado LUT #148
- Problema de nivelación de desgaste fijo #145
- intento fijo de escribir de límites en Flash #130,
- Configure el desplazamiento del archivo al buscar el final #121 (gracias @sensslen)
- Se solucionó la búsqueda en archivos virgen #120 (gracias @sensslen)
- Metadatos de archivo opcionales #128 (gracias @cesanta)
- AFL Testing Framework #100 #143 (gracias @pjsg)
- TestFrame Actualizaciones
Nuevas funciones de API:
-
SPIFFS_update_meta, SPIFFS_fupdate_meta - actualiza metadatos para un archivo
La nueva configuración define:
-
SPIFFS_OBJ_META_LEN : habilite la posibilidad de agregar metadatos adicionales a los archivos
0.3.6
- Se corrigió el error de rango en la asignación de memoria de índice #98
- Agregar mapeo de memoria de índice #97
- Optimizar spiffs_read para archivos grandes #96
- Agregue caché temporal para abrir archivos #95
- Más robusto GC #93 (gracias @dismirlian)
- Se corrigió una doble escritura de los mismos datos en ciertas situaciones de caché
- Se corrigió un error abierto en las compilaciones de lectura
- Archivo no visible en spiffs_readdir #90 (gracias @benpicco-tmp)
- El código de carga de caché limpia #92 (gracias @niclash)
- Asimetría de bloqueo/desbloqueo corrigido #88 #87 (gracias @JackJefferson, @Dpruessner)
- TestFrame Actualizaciones
Nuevas funciones de API:
-
SPIFFS_ix_map : asigne el índice meta datos a la memoria para un archivo -
SPIFFS_ix_unmap : meta datos de índice UNMAPS para un archivo -
SPIFFS_ix_remap : cambia el desplazamiento del archivo para el mapa de metadatos del índice -
SPIFFS_bytes_to_ix_map_entries - utilidad, obtenga la longitud del vector necesario para una cantidad dada de bytes -
SPIFFS_ix_map_entries_to_bytes - utilidad, obtenga el número de bytes que un vector puede representar una longitud dada
La nueva configuración define:
-
SPIFFS_IX_MAP : habilite la posibilidad de asignar meta datos de índice a la memoria para leer más rápido -
SPIFFS_TEMPORAL_FD_CACHE : habilitar caché temporal para abrir archivos más rápido -
SPIFFS_TEMPORAL_CACHE_HIT_SCORE - para ajustar el caché temporal
0.3.5
- Se corrigió un error en la verificación FS
- API Devuelve los códigos de error reales #84) (gracias @nails)
- Corrección de advertencias del compilador para no GCC #83 #81 (gracias @nails)
- No se puede recuperar de FS #82 completo (gracias @rojer)
- Define Spiffs_o_* Flags #80
- Problema con Long Filenames #79 (gracias @PSJG)
- Nombre de archivo duplicado corrección #74 (gracias @igrr)
- Spiffs_eof y spiffs_tell devuelve valor incorrecto #72 (gracias @artempisarenko)
- Racionado de actualizaciones de TestFrame #77 #78 #86 (gracias @dpreussner, @PSJG AO)
0.3.4
- Se agregó el archivo de devolución de llamada de usuario FUNC.
- Se corrigió un error de estadística con OBJ ID.
- Spiffs_probe_fs agregado
- Agregue la posibilidad de compilar una versión de solo lectura de Spiffs
- Hacer que la magia dependa de la longitud de FS, si es necesario (ver #59 y #66) (gracias @hreintke)
- Spiffs_open_by_page_function expuestos
- El archivo de tamaño cero no se puede buscar #57 (gracias @lishen2)
- Agregar funciones Tell y EOF #54 (gracias @raburton)
- Hacer API String Params const #53 (gracias @raburton)
- Preserve user_data durante el monte () #51 (gracias @rojer)
Nuevas funciones de API:
-
SPIFFS_set_file_callback_func : registre una devolución de llamada informando sobre eventos de archivo -
SPIFFS_probe_fs : sondea un flash SPI tratando de descubrir el tamaño de FS -
SPIFFS_open_by_page : abra un archivo por índice de página -
SPIFFS_eof : verifica si se alcanza el final del archivo -
SPIFFS_tell - Devuelve el desplazamiento del archivo actual
La nueva configuración define:
-
SPIFFS_READ_ONLY -
SPIFFS_USE_MAGIC_LENGTH
0.3.3
Podría no ser compatible con 0.3.2 estructuras. Ver número #40
- Posibilidad de agregar desplazamiento de enteros a manijas de archivos
- La función truncada supone muy pocas páginas libres #49
- Error en la función truncada #48 (gracias @PawelDefee)
- Actualizar spiffs_gc.c: eliminar el parámetro innecesario (gracias @PawelDefee)
- Actualizar documentos de integración (gracias @PawelDefee)
- FIJA el truncamiento del puntero en plataformas de 64 bits (gracias @igrr)
- Los archivos de tamaño cero no se pueden leer #44 (gracias @rojer)
- (Más) Cálculo correcto de max_id en obj_lu_find #42 #41 (gracias @lishen2)
- Verifique el código de error correcto en obj_lu_find_free #41 (gracias @lishen2)
- Comentarios de Moar para spiffs_lseek (gracias @igrr)
- Rolado correcto en spiffs_page_object_ix #40 (gracias @jmattsson @lishen2)
- Se corrigió la prueba GC_Quick (gracias @jmattsson)
- Agregar bandera spiffs_excl #36
- Spiffs_close puede fallar en silencio si el caché está habilitado #37
- Datos de usuario en devoluciones de llamada #34
- Ignorando Singleton Build in Cache Setup (gracias Luca)
- Error de compilación corrigido #32 (gracias @chotasanjiv)
- Alinearse CAND_SCORES (gracias @hefloryd)
- Corrige advertencias de compilación cuando spiffs_cache es 0 (gracias @ajaybhargav)
La nueva configuración define:
0.3.2
- Limite el tamaño del caché si se da demasiado caché (gracias Pgeiem)
- Nueva característica: borrado controlado. #23
- Spiffs_Rename filtra los descriptores de archivo #28 (gracias Benpicco)
- La impresión de DBG movida define en el marco de prueba a params_test.h
- Lseek debería devolver el desplazamiento resultante (gracias Hloryd)
- Tipo fijo en DBG IFDEFS
- Advertencia de silencio sobre la comparación firmada/sin firmar cuando spiffs_obj_id es de 32 bits (gracias Benpicco)
- Posible error en test_spiffs.c #21 (gracias yihcdaso-yeskela)
- El caché podría escribir con demasiada frecuencia #16
- Incluso actualizaciones de testrunner de moar
- Actualización del marco de prueba y algunas pruebas adicionales
- Algunos pensamientos para la próxima generación
- Pruebe sigsevs al tener demasiados sectores #13 (gracias solowolfx2)
- GC podría ser subóptimo #11
- FIJA ETERNAL READDIR cuando ObjHeader en el último bloque, última entrada
Nuevas funciones de API:
-
SPIFFS_gc_quick : llame a un GC no intrusivo -
SPIFFS_gc : llame a un GC intrusivo a gran escala
0.3.1
- Eliminó dos advertencias de retorno, fue demasiado gatillo en el lanzamiento
0.3.0
- Se agregó Namecheck existente al crear archivos
- Muchos errores de análisis estáticos #6
- Cambiar el nombre de FUNC agregado
- Corrige la longitud de spiffs_read al leer más allá del tamaño del archivo
- Se agregó lectura más allá de la prueba de longitud del archivo
- Hecho construir un poco más configurable
- Nombre cambiado en Spiffs de "errno" a "err_code" debido a los conflictos compilados en Mingw
- Verificaciones de GC mejoradas, corrigió un error de adición, más robusto Truncate para un caso muy especial
- GC Checks se adelanta a GC, truncar aún menos quisquilloso
- Estrucia de alineación necesaria para algunos objetivos, defina en la configuración de Spiffs #10
- Spiffs Files System Magic, definible en la configuración
La nueva configuración define:
-
SPIFFS_USE_MAGIC - habilitar o deshabilitar la verificación mágica en el monte -
SPIFFS_ALIGNED_OBJECT_INDEX_TABLES - alineación para ciertos objetivos
Nuevas funciones de API:
-
SPIFFS_rename - cambiar el nombre de archivos -
SPIFFS_clearerr - borra el último errno -
SPIFFS_info : devuelve información sobre los bytes usados y totales en FS -
SPIFFS_format : formatea el sistema de archivos -
SPIFFS_mounted - comprobar si el sistema de archivos está montado