Энергонезависимое хранение nRF52/возврат переменной-есть ли простое решение?

У меня есть программа Arduino, написанная для nRF52, которая работает в течение заданного времени (т. Е. 2 минуты), прежде чем автоматически отключится. Переменное значение времени может быть изменено пользователем с помощью BLE-записи с внешнего устройства (т. е. от 2 минут до 5 минут). Проблема в том, что по умолчанию при перезапуске программы используется заданное значение (2 минуты). Как я могу заставить программу "сохранить" последнюю используемую переменную значения времени (т. Е. 5 минут) для следующей загрузки/перезапуска?

Насколько я понимаю, nRF52 Nordic НЕ имеет встроенного EEPROM, такого как AVR. Я читал о небольшой файловой системе Adafruit, которая создает своего рода постоянное пространство для хранения, но я надеюсь, что есть что-то более простое.

, 👍1

Обсуждение

Ваши варианты-внутренняя прошивка или внешний EEPROM. Если вы имеете дело с внутренней прошивкой, то какой-то FS, вероятно, является самым простым выбором. Внешний EEPROM/FRAM может быть таким же простым, как чип I2C и библиотека. LFS не создает "своего рода постоянное пространство для хранения", это абстракция FS. Есть также такие вещи, как https://github.com/d00616/arduino-NVM., @Dave Newton

https://www.arduino.cc/reference/en/libraries/arduino-nvm/, @Juraj

Спасибо вам обоим. Я перевариваю связанную информацию. Решу и постараюсь. До сих пор я понял, что мне нужно быть осторожным с тем, чтобы не помещать какие-либо функции, связанные с записью/стиранием, в "цикл", чтобы не "изнашивать" память., @TommyS

Рассмотрел варианты. Просто размышляю вслух: у Adadfuit уже есть несколько библиотек QSPI и чип на их платах. Но требуется 6 проводов (обычный SPI 4 провода). NVM-это решение без внешних компонентов, но оно вмешивается в стек программных устройств BLE nRF5, требующий некоторого сложного программирования. Я склоняюсь к EEPROM и FRAM для простоты адресации/программирования, но оба требуют некоторой (небольшой) внешней недвижимости. Однако используется только 1 или 2-проводной интерфейс I2C., @TommyS

Еще один вариант заключается в том, что при загрузке скетч на моем устройстве будет считывать выбранные пользователем значения в приложении подключенного внешнего устройства BLE (телефон, ectc) и использовать их в качестве значений переменных в скетче: например, выбор временной задержки для автоматического выключения. ., @TommyS


1 ответ


Лучший ответ:

2

Библиотека arduino-NVM для микроконтроллеров nRF51 и nRF62 имеет объект EEPROM, который эмулирует EEPROM во внутренней флэш - памяти микроконтроллера.

Объект EEPROM в arduino-NVM выполняет ту же функцию, что и объект EEPROM в библиотеке Arduino EEPROM для классической ATmega.

,