- PVSM.RU - https://www.pvsm.ru -

SPIFFS – (Serial Peripheral Interface Flash File System) файловая система флеш-памяти, подключаемой по последовательному периферийному интерфейсу. Простыми словами: есть микроконтроллер ESP32 (рисунок 1), у него есть встроенная перезаписываемая энергонезависимая NOR-память, в которой хранятся: настройки (Preferences), загрузчик (Bootloader), микропрограмма (скомпилированный скетч), файловая система (SPIFFS) и ещё что-нибудь, типа обновления "по воздуху" (OTA).

Рисунок 1. Функциональная блок-схема микроконтроллера ESP32
NOR-память – это такой вид энергонезависимой перезаписываемой памяти, который имеет достаточно высокую скорость считывания, относительно низкую скорость записи и стирания, в сравнении с типом памяти NAND. Встретить NOR-память большого объёма практически невозможно, обычно ограничиваются 128 МБ. В случае с ESP32 – четырьмя.
На сегодняшний день SPIFFS имеет некоторые недостатки недоработки, в их числе: отсутствие поддержки папок; не стек реального времени, поэтому одна и та же операция может занимать разное время; отсутствие возможности нахождения и исправления битых блоков. Если перечисленные недостатки для Вас некритичны, то продолжаем читать следующий пункт.
К сожалению, из коробки память микроконтроллера не размечена под SPIFFS, для того чтобы разметить, необходимо воспользоваться плагином ESP32FS [1] для среды разработки Arduino IDE.
После того, как плагин скачен – его необходимо установить:

Рисунок 2. Меню Инструменты (Tools)
Если Вы хотите трогать файлы и видеть информацию о свободном пространстве, то скачайте скетч BRIDGE [4] и прошейте им своё устройство.
Так же скачайте и скомпилируйте кроссплатформенный файловый менеджер A-Explorer [5] (рисунок 3). На GitHub бинарные файлы вскоре будут лежать в папке bin.

Рисунок 3, a. Файловый менеджер A-Explorer под macOS

Рисунок 3, б. Файловый менеджер A-Explorer под Windows
Данный файловый менеджер позволит узнать информацию о свободном пространстве, загружать/выгружать/удалять файлы. Имеется индикация прогресса выполнения операции.
Как видите по рисунку 3 плагин разметил приблизительно 1,38 МБ памяти под SPIFFS.
BRIDGE – это скетч, а прежде всего одноимённая функция, которая работает с файловой системой SPIFFS и A-Explorer является графической оболочкой для неё. Последний отправляет ту или иную команду, а данная функция её обрабатывает на самом устройстве с использованием библиотек FS и SPIFFS. Давайте посмотрим, чего есть интересного в этих библиотеках.
Начнём с рассмотрения публичных методов класса SPIFFS:
Метод bool begin(bool formatOnFail=false, const char * basePath="/spiffs", uint8_t maxOpenFiles=10). Данный метод пытается инициализировать экземпляр класса. Первым аргументом принимает истину или ложь на тот случай, стоит ли форматировать файловую систему, если файловая система не отформатирована. Второй аргумент принимает путь, где будет располагаться корень файловой системы. Третий аргумент определят количество одновременно открытых файлов. Последние два параметра лучше оставить дефолтными и не менять их. Если файловая система отсутствует (не был использован плагин, приведённый выше). то функцию вернёт ложь.
Метод bool format() проверят отформатирована ли файловая система – возвращает истину, в противном случае – ложь.
Метод size_t totalBytes(). Такой метод возвращает size_t-число общего количества Байт размеченных под файловую систему.
Метод size_t usedBytes(). Этот метод возвращает size_t-число используемых Байт в файловой системе.
Метод void end(). Данный метод производит деинициализацию данного класса. После вызова данного метода другие методы вызывать бессмысленно.
В данном классе всё, ничего особо интересного нет. Давайте перейдём к классу FS и посмотрим, что оттуда нам может пригодиться.
Первое, что бросается в глаза, так это метод-инициализатор класса bool begin(). Данный метод не требует аргументов и вызывать его нет необходимости, т. к. мы будем использовать сразу следующий метод.
Метод File open(const char path, const char mode) и его брат File open(const String& path, const char* mode). Данные методы принимают по два аргумента первый из них символьный и строковый указатель на путь к файлу, а второй режим открытия, который может быть следующей константой:
FILE_READ – открыть только для чтения;
FILE_WRITE – открыть только для записи;
FILE_APPEND – открыть для дозаписи.
После того, как мы открыли файл, теперь можем произвести над ним какие-либо операции.
Да-да, можно взять эту функцию и запустить её в отдельном потоке в любом другом скетче
Спасибо большое за уделённое время! Буду рад, если данная статья принесёт Вам пользу.
Автор: dsiberia9s
Источник [9]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/arduino/342664
Ссылки в тексте:
[1] ESP32FS: https://github.com/me-no-dev/arduino-esp32fs-plugin/releases/tag/1.0
[2] M5Stack: http://ru.m5stack.com/?family=Core
[3] этой: https://m5stack.com/pages/download
[4] BRIDGE: https://github.com/dsiberia9s/BRIDGE
[5] A-Explorer: https://github.com/dsiberia9s/A-Explorer
[6] здесь: https://docs.espressif.com/projects/esp-idf/en/latest/api-reference/storage/spiffs.html
[7] здесь: http://wikihandbk.com/wiki/ESP8266:%D0%9F%D1%80%D0%BE%D1%88%D0%B8%D0%B2%D0%BA%D0%B8/Arduino/%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0_%D1%81_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2%D0%BE%D0%B9_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%BE%D0%B9_%D0%B2_%D0%B0%D0%B4%D0%B4%D0%BE%D0%BD%D0%B5_ESP8266_%D0%B4%D0%BB%D1%8F_IDE_Arduino
[8] здесь: https://github.com/me-no-dev/arduino-esp32fs-plugin
[9] Источник: https://habr.com/ru/post/483280/?utm_campaign=483280&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.