CustomLFS¶
LITTLEFS · TWEEDE BESTANDSSYSTEEM · EXTRAFS · QSPI
Op nRF52 heeft MeshCore twee bestandssystemen. Het interne van de Adafruit-core houdt de instellingen en sleutels bij; daarnaast maakt CustomLFS een tweede LittleFS-volume aan op een ander stuk flash, of op een externe QSPI-chip. Alleen nRF52 doet dit.
[!NOTE] Bron. Deze pagina is geverifieerd tegen de firmware zelf:
MeshCorev1.16.0, commit03b6ef4, 28 juli 2026 — bestandenplatformio.ini,examples/companion_radio/main.cppenexamples/companion_radio/DataStore.h.
Wat het doet¶
CustomLFS van oltaco is een uitbreiding op de LittleFS-ondersteuning van de
Adafruit nRF52-core. Waar die core één vast intern volume kent, laat
CustomLFS je zelf een volume definiëren: beginadres, grootte en blokgrootte
geef je op, en je krijgt er een LittleFS op terug. De variant
CustomLFS_QSPIFlash doet hetzelfde op een externe flashchip aan de
QSPI-bus. De repo staat op
github.com/oltaco/CustomLFS.
Hoe MeshCore hem binnenhaalt¶
platformio.ini r.95
https://github.com/oltaco/CustomLFS#0.2.2
Geen registrypakket maar een git-URL, met achter # de tag 0.2.2. De regel
staat in [nrf52_base], dus alleen nRF52-varianten krijgen hem.
Twee bouwvlaggen in dezelfde sectie horen erbij:
platformio.ini r.91-92
-D LFS_NO_ASSERT=1
-D EXTRAFS=1
EXTRAFS schakelt het tweede volume in. LFS_NO_ASSERT haalt de asserts uit
LittleFS: een inconsistentie in het bestandssysteem laat de node dan
doorlopen in plaats van hem te laten stoppen.
Die tweede vlag raakt CustomLFS niet zelf — die bevat geen littlefs maar wrapt
Adafruit_LittleFS (CustomLFS.h r.30). Hij raakt de littlefs-kopie in het
nRF52-framework. De tweede kopie in de bouwboom,
arch/stm32/Adafruit_LittleFS_stm32/src/littlefs/, houdt zijn asserts wél,
omdat [stm32_base] de vlag niet zet. Zie
../library-configuration.md voor dat
mechaniek.
Hoe MeshCore hem gebruikt¶
De keuze tussen intern, extra en QSPI valt bij het compileren:
examples/companion_radio/main.cpp r.15-26
#if defined(NRF52_PLATFORM) || defined(STM32_PLATFORM)
#include <InternalFileSystem.h>
#if defined(QSPIFLASH)
#include <CustomLFS_QSPIFlash.h>
DataStore store(InternalFS, QSPIFlash, rtc_clock);
#else
#if defined(EXTRAFS)
#include <CustomLFS.h>
CustomLFS ExtraFS(0xD4000, 0x19000, 128);
DataStore store(InternalFS, ExtraFS, rtc_clock);
#else
DataStore store(InternalFS, rtc_clock);
De drie getallen bij CustomLFS ExtraFS zijn het beginadres in de flash
(0xD4000), de grootte (0x19000, 102 400 bytes) en de blokgrootte.
DataStore krijgt vervolgens één of twee volumes mee. Is er een tweede, dan
gaan contacten en kanalen daarheen en blijft de rest op het interne volume:
examples/companion_radio/DataStore.h r.54
FILESYSTEM* _getContactsChannelsFS() const { if (_fsExtra) return _fsExtra; return _fs;};
De tekst CustomLFS komt in twee bronbestanden voor; het bijbehorende
InternalFS in twaalf.
Wat het voor een node betekent¶
Het tweede volume geeft ruimte die niet meetelt bij het interne bestandssysteem. Op een companion-node komen de contacten en kanalen daarop te staan, gescheiden van de instellingen en sleutels op het interne volume.
Dat dit alleen op nRF52 bestaat, komt doordat de flashindeling daar bekend en stabiel is: de nRF52-core reserveert een vast gebied, en wat daarna komt is vrij. Op ESP32 wordt de indeling door een partitietabel bepaald, op RP2040 door de core zelf. Op STM32WL is er domweg te weinig flash.