Spiffs против Eeprom на esp8266
В моем проекте у меня есть некоторые данные, которые нужно сохранить навсегда. После некоторых исследований я получил много примеров и информации, чтобы сделать это с помощью eeprom. Я использовал это эффективно. В конце концов, я решаю глубоко погрузиться в esp8266, и я получил некоторую информацию о spiffs. Теперь я знаю, что такое spiffs и какова его цель. Но мне интересно, в чем разница между eeprom и spiffs? Я знаю, что оба они используют флэш-память одинаково, и мы можем записывать и хранить данные с их помощью, но почему spiffs? Почему именно eeprom ? Каковы их плюсы и минусы и т.д.?
@Dogan Cignakli, 👍4
Обсуждение3 ответа
Лучший ответ:
Я не думаю, что это имеет какое-то значение с аппаратной точки зрения. Преимущества использования библиотеки eeprom заключаются в том, что она позволяет избежать перезаписи неизмененных данных (если вы используете spiffs, вы, возможно, захотите реализовать и это) и что esp совместим со средой arduino, где есть настоящий eeprom.
С другой стороны, SPIFFS имеет свои преимущества (например, простота загрузки, пространство). Это зависит от вас ...
На ESP8266 выбор между ними очень невелик. На самом деле все сводится к тому, что вы хотите сохранить и как лучше всего получить к нему доступ.
Эмуляция EEPROM идеально подходит для небольших битов данных - значений конфигурации и тому подобного. Где вы просто хотите сохранить несколько значений, которые будут редко меняться.
Однако SPIFFS лучше справляется с большими объемами данных. Поскольку это файловая система, она может хранить фактические файлы, что делает ее идеальной для обслуживания изображений и статических данных, например, для веб-страниц.
Файловая система SPIFFS может быть собрана на вашем ПК из файлов по вашему выбору, а затем загружена по последовательному каналу с помощью mkspiffs
и esptool.py
или инструмент SPIFFS, который можно установить в Arduino IDE. Это означает, что файлы очень легко обновлять.
Однако SPIFFS не так хорош, когда дело доходит до записи данных - эксперименты показали, что при частой записи он становится довольно медленным. EEPROM не страдает от такой проблемы, но тогда вы не сможете записать в EEPROM столько данных, сколько сможете в SPIFFS.
Так что это действительно все, что нужно сделать. Ни один из них не "лучше" другого, но каждый лучше подходит для разных способов работы или для разных стилей обработки данных.
Если я сохраню измеренные данные в формате CSV с SPIFFS и данные конфигурации в EEPROM, может ли возникнуть конфликт из-за того, что библиотеки записывают в одном и том же месте?, @Eric Duminil
Нет, потому что SPIFFS и EEPROM - это разные вещи., @Majenko
@Majenko Разные по названию и API, но внутри оба используют одно и то же оборудование, а именно Flash. EEPROM на устройстве OP - это просто эмуляция., @Nick
Я также добавлю еще несколько вещей:
SPIFFS действует как String или Serial объект - так что вы можете выполнить println() или что угодно еще, что вы хотите, и прочитать / разобрать его обратно. Существует также доступ на цифровом уровне, который позволяет вам также напрямую считывать или записывать структуры памяти. Он устойчив к износу и отлично подходит для всего, где вам нужно несколько независимых конфигураций или много (с возможностью поиска!) Данных.
Вы также можете загружать файлы (или загружать их) с веб-сервера, и большинство устройств, поддерживающих строки для записи, также могут использовать файл (YMMV).
EEPROM в этой системе не подвержен износу (если только вы специально не загрузили стороннюю библиотеку для этого) и использует один сектор флэш-памяти. Слишком частое обращение к нему приведет к сбою сектора (~ 10 000-1000 000 раз, так что это очень много). Вы также ограничены размером сектора, поэтому максимальный размер данных, которые вы можете хранить, составляет 4096 байт.
Кроме того, EEPROM записывается как массив. Все ваши данные попадают в этот массив, и вы должны отслеживать, где находится каждый фрагмент и насколько он был велик (возможно, в нескольких библиотеках, файлах или функциях). Хуже того, вы не можете сказать, изменили ли вы формат с момента его последнего сохранения (повторно загрузили свой код или что-то в этом роде), поэтому у вас действительно должна быть контрольная сумма или что-то в этом роде.
TL; DR: SPIFFS имеет больший размер (вместимость для хранения и с точки зрения кода доступа) и уровень износа. Он обладает множеством удобных функций и позволяет записывать или составлять сложные данные.
EEPROM крошечный и имеет ограничение на то, сколько раз он может быть зафиксирован до сбоя (плохо для регистрации данных и прочего). В лучшем случае вы можете записывать в него блоки памяти.
Редактировать: SPIFFS теперь устарела из-за отсутствия поддержки со стороны разработчиков, что несколько печально. Он был заменен на LittleFS, который (к моему неудовольствию) имеет больше накладных расходов и не выполняет статическое выравнивание износа (он выравнивает уровень износа только для освобождения места при редактировании / перемещении файла и не использует повторно память, потребляемую файлами, которые не меняются (даже если они уже давно наименьший износ)). Однако интерфейс (помимо изменения всех экземпляров на "LittleFS" вместо SPIFFS и некоторых других второстепенных вещей) в остальном во многом одинаков для пользователя, поэтому этот пост по-прежнему применяется.
Небольшое и запоздалое замечание по этому поводу: в ESP8266 и EEPROM, и SPIFFS эмулируются на одной и той же микросхеме флэш-памяти, поэтому количество циклов записи до повреждения данных одинаково для обоих..., @neurino
- EEPROM не соответствует перезагрузке
- Как читать и записывать EEPROM в ESP8266
- Получить доступ к EEPROM ATtiny с помощью кода Arduino?
- В ESP8266 EEPROM сохраненные данные отличаются, когда я пытаюсь их прочитать
- Как исправить код утечки памяти в ESP8266/NodeMCU, вызванный концентрацией строк?
- Значение неинициализированной EEPROM в ESP8266
- Wemos D1 EEProm put/get не получает правильное значение
- Нужна помощь с EEPROM, не сохраняющим значения массива на ESP8266 после перезапуска
Спасибо за ответы. Я дополнил некоторые недостающие части по этому поводу, @Dogan Cignakli