SPIFFS (SPI Flash File System)
V0.3.7
Copyright (C) 2013-2017 Peter Andersson (Pelleplutt1976 sur gmail.com)
Pour des trucs légaux, voir la licence. Fondamentalement, vous pouvez faire ce que vous voulez avec la source. Utilisez, modifiez, vendez, imprimez-le, roulez-le et fumez-le - tant que je ne serai pas tenu responsable.
J'adore entendre les commentaires!
INTRODUCTION
Spiffs est un système de fichiers destiné aux périphériques SPI ni flash sur des cibles intégrées.
Spiffs est conçu en tenant compte des caractéristiques suivantes:
- Petites cibles (intégrées), RAM clairsemée sans tas
- Seules les grandes zones de données (blocs) peuvent être effacées
- Une effacement réinitialise tous les bits en bloc à ceux
- L'écriture en tire un aux zéros
- Les zéros ne peuvent être tirés qu'en effacer
- Usure d'usure
BÂTIMENT
mkdir build; make
Sinon, configurez la variable builddir vers le haut de makefile comme quelque chose qui s'opposait à la build par défaut. Vérifier la santé mentale sur l'hôte via make test et se référer à .travis.yml pour la procédure de test approfondie officielle. Voir le wiki pour intégrer Spiffs dans les projets et Spiffsimg de Nodemcu est un bon exemple sur le sujet.
CARACTÉRISTIQUES
Ce que fait Spiffs:
- Spécialement conçu pour une faible utilisation de la RAM
- Utilise des tampons de RAM de taille statique, indépendamment du nombre de fichiers
- API de type POSIX: ouvrir, fermer, lire, écrire, chercher, statistique, etc.
- Il peut fonctionner sur n'importe quel flash ni non seulement SPI Flash - théoriquement également sur un flash intégré d'un microprocesseur
- Plusieurs configurations SPIFFS peuvent fonctionner sur la même cible - et même sur le même périphérique SPI Flash
- Implémente le nivellement d'usure statique
- Vérification de cohérence du système de fichiers intégré
- Hautement configurable
Ce que Spiffs ne fait pas:
- Actuellement, Spiffs ne soutient pas les répertoires. Il produit une structure plate. La création d'un fichier avec Path TMP / MyFile.txt créera un fichier appelé TMP / MyFile.txt au lieu d'un myFile.txt sous TMP Directory.
- Ce n'est pas une pile en temps réel. Une opération d'écriture pourrait durer beaucoup plus longtemps qu'une autre.
- Mauvaise évolutivité. SPIFFS est destiné aux petits périphériques de mémoire - les tailles normales pour SPI clignotent. Aller au-delà de ~ 128 Mmbyte est probablement une mauvaise idée. Il s'agit d'un effet secondaire de l'objectif de conception pour utiliser le moins de RAM possible.
- Actuellement, il ne détecte ni ne traite pas de mauvais blocs.
- Une configuration, une binaire. Il n'y a pas de binaire Spiffs générique qui gère tous les types de configurations.
AVIS
0.4.0 est en construction. Il s'agit d'une réécriture complète et changera la structure sous-jacente. Par conséquent, il ne sera pas compatible avec les versions antérieures du système de fichiers. L'API est la même, avec des modifications mineures. Certains indicateurs de configuration seront supprimés (car ils sont obligatoires dans 0.4.0) et certaines fonctionnalités pourraient tomber jusqu'à 0.4.1. Si vous avez des inquiétudes ou des questions, il peut être discuté dans le numéro # 179
Plus d'informations
Voir le wiki pour configurer, intégrer, utiliser et optimiser les Spiffs.
Pour la conception, voir Docs / Tech_Spec.
Pour un pilote Generic SPI Flash, voyez ceci.
HISTOIRE
0.3.7
- Correction d'évitement de la recherche de compensations négatives # 158
- Correction des décalages de descripteur de fichiers non mis à jour pour plusieurs FD sur le même fichier # 157
- Page de cache fixe non fermée pour les fichiers supprimés # 156
- Correction d'un bogue Lseek lors de la recherche exactement de la fin d'un LUT de premier niveau entièrement indexé # 148
- Problème de nivellement des usures fixes n ° 145
- Tentative fixe d'écrire des limites dans Flash # 130,
- Définissez le décalage du fichier lors de la recherche de fin # 121 (merci @SensSlen)
- Correction de la recherche dans les fichiers vierges # 120 (merci @sensslen)
- Metadata de fichiers en option # 128 (merci @cesanta)
- Framework de test AFL # 100 # 143 (merci @pjsg)
- Mises à jour de TestFrame
Nouvelles fonctions API:
-
SPIFFS_update_meta, SPIFFS_fupdate_meta - met à jour les métadonnées d'un fichier
La nouvelle configuration définit:
-
SPIFFS_OBJ_META_LEN - Activer la possibilité d'ajouter des métadonnées supplémentaires aux fichiers
0.3.6
- Correction du bogue de plage dans le mappage de mémoire d'index # 98
- Ajouter un mappage de mémoire d'index # 97
- Optimiser spiffs_read pour les grands fichiers # 96
- Ajouter un cache temporel pour l'ouverture des fichiers # 95
- Plus robuste GC # 93 (merci @dismirlian)
- Correction d'une double écriture de mêmes données dans certaines situations de cache
- Correction d'un bug ouvert dans Read_only Builds
- Fichier non visible dans spiffs_readdir # 90 (merci @ benpicco-tmp)
- Cache de chargement de chargement # 92 (merci @niclash)
- Lock / déverrouillage fixe asymétrie # 88 # 87 (merci @jackjefferson, @dpruessner)
- Mises à jour de TestFrame
Nouvelles fonctions API:
-
SPIFFS_ix_map - Map Index Meta Data to Memory pour un fichier -
SPIFFS_ix_unmap - Unmaps Index Meta Data pour un fichier -
SPIFFS_ix_remap - modifie le décalage du fichier pour la carte des métadonnées d'index -
SPIFFS_bytes_to_ix_map_entries - utilitaire, obtenez la longueur du vecteur nécessaire pour une quantité donnée d'octets -
SPIFFS_ix_map_entries_to_bytes - utilitaire, obtenez le nombre d'octets Un vecteur peut représenter une longueur donnée
La nouvelle configuration définit:
-
SPIFFS_IX_MAP - Activer la possibilité de cartographier l'index des métadonnées pour la lecture plus rapidement -
SPIFFS_TEMPORAL_FD_CACHE - Activer le cache temporel pour l'ouverture des fichiers plus rapidement -
SPIFFS_TEMPORAL_CACHE_HIT_SCORE - pour régler le cache temporel
0.3.5
- Correction d'un bug dans le chèque FS
- L'API renvoie les codes d'erreur réels # 84) (merci @nails)
- Correction des avertissements du compilateur pour non GCC # 83 # 81 (merci @nails)
- Impossible de se remettre de Full FS # 82 (merci @rojer)
- Définir SPIFFS_O_ * Flags # 80
- Problème avec les noms de fichiers longs # 79 (merci @psjg)
- Nom du fichier en double Correction du bug # 74 (merci @igrr)
- Spiffs_eof et spiffs_tell renvoie la mauvaise valeur # 72 (merci @artempisarenko)
- Bunch of TestFrame Mises à jour # 77 # 78 # 86 (merci @dpreussner, @psjg ao)
0.3.4
- Ajout du fichier de rappel utilisateur Func.
- Correction d'un bug de stat avec ID OBJ.
- Spiffs_probe_fs ajouté
- Ajouter la possibilité de compiler une version en lecture seule de Spiffs
- Rendre la magie dépendante de la longueur du FS, si nécessaire (voir # 59 & # 66) (merci @hreintke)
- Exposé spiffs_open_by_page_function
- Le fichier de taille zéro ne peut pas être recherché # 57 (merci @ lishen2)
- Ajouter des fonctions Tell et EOF # 54 (merci @raburton)
- Faire des paramètres de la chaîne API CONS # 53 (merci @raburton)
- Conserver user_data pendant Mount () # 51 (merci @rojer)
Nouvelles fonctions API:
-
SPIFFS_set_file_callback_func - Enregistrez un rappel informant des événements de fichiers -
SPIFFS_probe_fs - sonde un flash SPI essayant de déterminer la taille de FS -
SPIFFS_open_by_page - Ouvrez un fichier par index de page -
SPIFFS_eof - vérifie si la fin du fichier est atteinte -
SPIFFS_tell - Renvoie le décalage du fichier actuel
La nouvelle configuration définit:
-
SPIFFS_READ_ONLY -
SPIFFS_USE_MAGIC_LENGTH
0.3.3
Pourrait ne pas être compatible avec les structures de 0,3.2. Voir le numéro n ° 40
- Possibilité d'ajouter un décalage entier aux poignées de fichiers
- La fonction tronquée présume trop peu de pages gratuites # 49
- Bug dans la fonction tronquée # 48 (merci @paweldefee)
- Mettre à jour SPIFFS_GC.C - Supprimez le paramètre inutile (merci @paweldefee)
- Mettre à jour les documents d'intégration (merci @paweldefee)
- Correction de la troncature du pointeur dans des plates-formes 64 bits (merci @igrr)
- Les fichiers de taille zéro ne peuvent pas être lus # 44 (merci @rojer)
- (Plus) Calcul correct de max_id dans obj_lu_find # 42 # 41 (merci @ lishen2)
- Vérifiez le code d'erreur correct dans obj_lu_find_free # 41 (merci @ lishen2)
- Commentaires Moar pour Spiffs_lseek (merci @igrr)
- Un rembourrage fixe dans spiffs_page_object_ix # 40 (merci @jmattsson @ lishen2)
- Correction du test GC_Quick (merci @jmattsson)
- Ajouter un drapeau SPIFFS_EXCL # 36
- Spiffs_close peut échouer silencieusement si le cache est activé # 37
- Données utilisateur dans les rappels # 34
- Ignorer la construction de singleton dans la configuration du cache (merci Luca)
- Erreur de compilation corrigée # 32 (merci @chotasanjiv)
- Aligner Cand_scores (merci @hefloryd)
- Correction des avertissements de construction lorsque spiffs_cache est 0 (merci @ajaybhargav)
La nouvelle configuration définit:
0.3.2
- Limiter la taille du cache si trop de cache est donné (merci pgeiem)
- Nouvelle fonctionnalité - Effacement contrôlé. # 23
- SPIFFS_RENAME LEAKS Fichier Descripteurs # 28 (Merci Benpicco)
- L'impression DBG déplacée définit dans Test Framework vers params_test.h
- Lseek devrait retourner le décalage qui en résulte (merci hefloryd)
- Type fixe sur DBG IFDEFS
- avertissement de silence à propos de la comparaison signée / non signée lorsque SPIFFS_OBJ_ID est 32 bits (merci Benpicco)
- Erreur possible dans test_spiffs.c # 21 (merci yihcdaso-yeskela)
- Le cache pourrait rédiger trop souvent # 16
- Même les mises à jour de MOAR TESTRUNNER
- Mise à jour du cadre de test et quelques tests ajoutés
- Quelques pensées pour la prochaine génération
- Tester les sigsev lorsqu'ils ont trop de secteurs # 13 (merci seulwolfx2)
- GC pourrait être sous-optimal # 11
- Fixé Eternal Readdir lorsque Objheader au dernier bloc, dernière entrée
Nouvelles fonctions API:
-
SPIFFS_gc_quick - Appelez un GC non intrusif -
SPIFFS_gc - Appelez un GC intrusif à grande échelle
0.3.1
- Supprimé deux avertissements de retour, était trop déclenché à la libération
0.3.0
- Ajout de NameCheck existant lors de la création de fichiers
- Beaucoup de bogues d'analyse statique # 6
- Ajout de renommée Func
- Correction de la longueur SPIFFS_READ lors de la lecture au-delà de la taille du fichier
- Ajout de lecture au-delà du test de la longueur du fichier
- Rendu la construction un peu plus configurable
- Nom modifié dans Spiffs de "errno" à "err_code" en raison de conflits compilés dans Mingw
- Amélioration des chèques GC, corrigez un bogue d'ajout, plus robuste tronqué pour un cas très spécial
- GC vérifie les préimpressions GC, tronquant encore moins pointilleux
- Alignement de structure nécessaire pour certaines cibles, définir dans Spiffs Config # 10
- Spiffs FileSystem Magic, définissable dans la configuration
La nouvelle configuration définit:
-
SPIFFS_USE_MAGIC - Activer ou désactiver la vérification magique lors du mont -
SPIFFS_ALIGNED_OBJECT_INDEX_TABLES - Alignement pour certaines cibles
Nouvelles fonctions API:
-
SPIFFS_rename - Renommer les fichiers -
SPIFFS_clearerr - Efface le dernier errno -
SPIFFS_info - Renvoie des informations sur les octets utilisés et totaux dans FS -
SPIFFS_format - formats le système de fichiers -
SPIFFS_mounted - vérifie si le système de fichiers est monté