În laboratorul de astăzi vom folosi flash-ul intern al plăcuței ESP32 pe post de sistem de fișiere.
Chip-ul ESP32 de la Espressif are în interior o memorie externă (flash) cu o capacitate de 4MB. Ea este folosită pentru a salva programele și datele programelor. Memoria externă este conectată la procesor prin intermediul bus-ului de SPI (Serial Peripheral Interface), iar procesorul poate accesa maxim 16MB de memorie externă.
Pentru a putea face diferența intre partea de programe și partea de date, memoria externă este impărțită in partiții. Tabela de partiții se află la offset-ul 0x8000 față de adresa de început a memoriei externe, și poate arăta astfel:
Dimensiunea fiecărei partiții poate fi modificată, dar aplicații precum Arduino IDE au aceste dimensiuni predefinite. Offset-ul fiecărei partiții poate fi definit într-un header, iar compilatorul aranjează codul în așa fel încât accesul la partiția de programe sau cea de date să poată fi diferențiat.
Un sistem de fișiere este asemănător cu o bază de date, astfel incât mai multe fișiere să poată fi organizate ierarhic iar datele dintr-un fișier să nu corupă (suprascrie) datele din alt fișier.
Deoarece sistemul de fișiere consumă spațiu adițional de pe memoria externă (ex. numele fișierului), în sistemele embedded cu puțin spațiu se folosesc sisteme de fișiere cât mai simple.
Sistemul de fișiere SPIFFS (SPI Flash File System) a fost început de Peter Andersson, pentru a adresa particularitățile memoriilor flash (NOR flash), care în special sunt afectate de scrierile repetate la aceeași adresă.
Repository-ul principal este disponibil pe GitHub (SPIFFS), dar Arduino IDE are deja suportul precompilat pentru ESP32.
API-ul sistemului de fișiere include funcții precum SPIFFS_open() sau SPIFFS_write(), dar Arduino IDE ofera un API de abstractizare a sistemului de fișiere si putem apela funcții precum fs.open() și fs.write(). Programul “SPIFFS_test” din Arduino IDE este un astfel de exemplu.
Ne propunem să implementăm o agendă personală care va scrie și citi informațiile pe sistemul de fișiere SPIFFS. Datele de intrare vor fi introduse de utilizator prin intermediul unui smartphone care se va conecta la plăcuta ESP32 prin Bluetooth.
Plecând de la exemplul “SPIFFS_test” și “SerialToSerialBT” din Arduino IDE, putem folosi smartphone-ul pentru a trimite date și comenzi prin Bluetooth către ESP32. În funcția principală “loop()” dorim o dată să citim mesajul de la telefon, iar apoi să putem scrie sau citi către memoria externă.