JESFS - JOs eingebettetes Seriendateisystem
für Standard- (Serienn-) Nor-Flash
Denken Sie nur an sehr einfache Dinge wie Sprachdaten: auf einem „sehr kleinen“ eingebetteten Gerät (nicht etwas „Großes“ wie ein eingebettetes Linux, aber etwas, das jahrelang mit kleinen Batterien laufen kann): Es wird häufig „irgendwo im Code“ integriert.
Schwer zu ändern! Wenn sich die Sprachdaten jedoch in Dateien befinden, sind Änderungen einfach. Gleiches gilt für Grafiken, Setups, alles… es ermöglicht sogar die Firmware auf dem eingebetteten Gerät aus vielen verschiedenen Quellen!
Denken Sie an eingebettete Geräte, die sogar ihre neueste Firmware selbst erhalten können! ZB über WLAN, mobiles Internet, Bluetooth, UART, Radio-Link,…
Plötzlich sind alle Optionen offen! Und wenn Sie Bedenken hinsichtlich der Sicherheit haben: Machen Sie sich keine Sorgen: Problem, das bereits gelöst wird, wie Sie später sehen werden.
Das Hauptproblem für „sehr kleine Geräte“ war bisher das „Dateisystem“: Jeder kennt „Fett“, „NTFS“,… aber haben Sie jemals an ein Dateisystem in einem kleinen Chip gedacht? Oder sogar innerhalb einer CPU? Kein Problem mit der richtigen Software. Deshalb habe ich geschrieben
"JESFS - JOs eingebetteter Seriennateisystem"

[Bild: 4 MB JESFs auf 2x3 mm]
Meine tägliche Arbeit ist das IoT. Da ich keine wirklich praktische Lösung gefunden habe, habe ich mich entschlossen, meine eigene zu erstellen. "Robustheit", "Sicherheit" und "kleiner Fußabdruck" waren meine Designbeschränkungen.
JESFS wurde für die Verwendung in der „realen Welt“ und für die Verwendung mit seriellen Nor-Flash-Erinnerungen wie der M25R-Serie entwickelt, die auf NRF52840-DK, NRF52832 und dem CC13xx/CC26XX-Launchpads verwendet werden, was bis zu 16 MB erhältlich ist, oder sogar noch mehr.
Einige Grundlagen über Jesfs:
- Ultra-Small RAM- und Code-Fußabdruck: Kann mit nur 8KByte-Programmspeicher oder weniger auf dem kleinsten MCUs verwendet werden (wie die berühmten MSP430-Serie, fast alle Arten von 32-Bit-Armkernen (M0, M3, M4, ...)). Nur 200 Bytes RAM sind ausreichend!
- Vollständig Open Source, kostenlos und geschrieben in Standard C.
- Arbeitet mit seriellem Nor-Flash von 8KByte bis 16mbyte (opt. Bis zu 2GByte), konnte aber auch mit CPU-internal Nor-Flash verwendet werden.
- Arbeitet Hand in Hand mit dem ultra-mall-Jesfsboot Secure Bootloader (erfordert weniger als 8 KB an Standard-Armkernen, einschließlich einer AES-128-Verschlüsselungsmotor für zuverlässige Over-The-Air-Updates („OTA“)).
- Beinhaltet eine optimierte Verschleißniveau (für die maximale Lebensdauer des Gedächtnisses).
- Sehr schnelle Datenübertragung (z. B. Lesen von Dateien: 3,7 MB/s auf NRF52840).
- Ein spezieller Modus wurde hinzugefügt, um Millionen von Schreibzyklen zu ermöglichen, insbesondere für Datenerfassung, Ereignisberichte und Journaling -Aplikationen.
- JESFS ist hartnäckig: Kein Datenverlust bei Stromverlust oder Zurücksetzen.
- Entwickelt für (fast) alle Situationen, in denen noch Erinnerungen verwendet werden konnten (diejenigen, in denen nur Blöcke gelöscht werden können (0-> 1) und nur 0 geschrieben werden können.
- Getestet mit: macronix mx25rxx, gigadevices gd25wdxx und gd25wqxx, ...
- Streng
- Entwickelt, um den Vorteil eines zugrunde liegenden RTOs zu nutzen, kann aber auch eigenständig verwendet werden.
- Beispielanwendungen für die NRF52840/NRF52832-DK, LaunchPads CC13XX/26xx, Atmel SAMD20, Windows-PC und andere (Dokumentation PDF: JESFs.PDF)
- Einfach zu bedienen mit einer intuitiven API:
int16_t fs_open(FS_DESC *pdesc, char* pname, uint8_t flags);
int32_t fs_read(FS_DESC *pdesc, uint8_t *pdest, uint32_t anz);
int16_t fs_write(FS_DESC *pdesc, uint8_t *pdata, uint32_t len);
int16_t fs_close(FS_DESC *pdesc);
int16_t fs_delete(FS_DESC *pdesc);
int16_t fs_rewind(FS_DESC *pdesc);
int16_t fs_rename(FS_DESC *pd_odesc, FS_DESC *pd_ndesc);
uint32_t fs_get_crc32(FS_DESC *pdesc);
int16_t fs_check_disk(void cb_printf(char *fmt, ...), uint8_t *pline, uint32_t line_size);
int16_t fs_format(uint32_t f_id);
int16_t fs_start(uint8_t mode);
void fs_deepsleep(void);
int16_t fs_info(FS_STAT *pstat, uint16_t fno);
void fs_sec1970_to_date(uint32_t asecs, FS_DATE *pd);
Changelog (jesfs_main.c)
- V1.0 cc13xx/cc26xx und Windows
- V1.5 (nrf52) nrf52840 port
- V1.51 (NRF52) NRF52840 DEEP SLEEP/WAKEUP (Tiefschlaf mit RTC -aktiven und vollständigen RAM -Retention <3UA)
- V1.6 'fs_disk_check ()' hinzugefügt: sorgfältige Festplattenprüfung
- V1.61 (NRF52) Quellkosmetik und reduzierte Standardspimuhr auf 16 MHz auf NRF52840 (32 MHz nur ohne SoftDevice empfohlen)
- V1.7 (NRF52) Defines für U-Blox Nina-B3 hinzugefügt
- V1.8 zeitset mit '!' und uart-rx-rx-regel
- V2.0 (NRF52) uart-Treiber in app_uart für Mehrzwecke in TB_TOOLS geändert
- V2.01 (nrf52) wurde in SDK17 geändert (Problem mit nrf_clock () in SDK17, siehe docu)
- V2.02 (NRF52) wurde in SDK17.0.2 und SES 5.10b (Problem mit nrf_clock () in SDK17.0.2 nicht in SDK17.0.2 festgelegt, siehe Docu).
- V2.10 (NRF52) Unterstützung für NRF52832 hinzugefügt
- V2.20 (NRF52) Probe für NRF52832 (E/A-Konfiguration für U-Blox Anna-B112-Modul) hinzugefügt)
- V2.30 (NRF52) Fügte Druck der Flash -ID zur Analyse in jesfs_main.c hinzugefügt.
- V2.54 (nrf52) 'tb_get_runtime ()' in tb_tools.c hinzugefügt
- V2.55 (NRF52) wurde in SDK17.1.0 und SES 5.42AB (Problem mit nrf_clock () in SDK17.0.2 nicht in SDK17.0.2 festgelegt, siehe DOCU).
- V2.60 (NRF52) Verwenden Sie globales Makro $ sdk_root
- V2.61 (SAMD20) ALMEL SAMD20 BEITIGT ( Lob !)
- V2.70 _Feature Supply_Voltage_Check () hinzugefügt;
- V2.71 Alle globalen FS_Funktionen prüfen _supply_voltage_check () beim Eintrag
- V2.72 jesfs_hl.c (Datei v1.91)
Verwenden von JESFS-Blackbox-Demo
Ein Flugschreiber für den Heimgebrauch
Viele technische Geräte arbeiten für Jahre und Jahre zuverlässig und es kümmert sich niemanden um sie. Aber wenn sie scheitern, gibt es immer die Frage: Was ist schief gelaufen?
Dies ist, wo die JESFs äußerst nützlich werden könnten.
Lesen Sie mehr: Blackbox_eval.pdf
Hardware
Einige getestete Serienflash-Chips
Breiter Spannungsbereich (1,6 V-3,6 V) und Ultra-Low-Power-Standby:
- MACRONIX MX25R-SERIE (MX25RXX)
- Gigadevices GD25W-Serie (GD25WD80C, GD25WQ64E, ...)
Verwendung mit NRF52-CPUs:


Verwendung mit CC13xx/26xx-CPUs:

Installation (für NRF52 -CPUs):
Gebaut mit SES (v6.22a ( )) und SDK 17.1.0 ( : spätere Versionen von SES erfordern geänderte Projekteinstellungen !!!)
Setzen Sie Makro $ SDK_ROOT Wo finden Sie das SDK in SES -> Tools -> Optionen -> Gebäude: z.
Setzen Sie das Plattform-Makro mit I/O-Pins (siehe tb_tools.h)
Optional beheben Sie das Problem mit nrf_clock () (siehe docu tb_tools_nrf52.c/.h)