EEPROM — энергонезависимая память
Сохранение настроек, износ памяти, struct
Сохраняем данные, которые не должны пропасть при выключении: EEPROM.read/write, лимиты перезаписи, хранение структур.
Прогресс раздела0/62 · 0%
- EEPROM: память, которая живёт без питанияЧем EEPROM отличается от RAM и flash, сколько байт у Uno, на сколько лет хватает памяти без питания и почему пустая ячейка читается как 255.16 мин
- EEPROM.read и write: первый сохранённый байтEEPROM.read и EEPROM.write на практике: сохраняем режим гирлянды в один байт, переживаем отключение питания и не наступаем на переполнение 255.17 мин
- EEPROM.update: почему не надо писать подрядEEPROM.update пишет только при изменении значения: как устроен внутри, почему write подряд убивает ячейку за 11,6 дня и как считать ресурс записи.18 мин
- NVS и namespace: структура хранилища ESP32Хранилище NVS на ESP32: namespace в Preferences, ключи до 15 символов, типы putUShort и putFloat, лимит раздела 20 КБ, износ и схема ключей проекта.16 мин
- EEPROM в деле: три реальных паттерна проектовТри паттерна EEPROM для проектов: конфиг с версией и XOR-суммой, счётчик в кольце из 8 ячеек, журнал событий - с кодом и таблицей частоты записи.16 мин
- Итоговый проект: настройки, живущие годамиФинальный прибор раздела: Serial-меню, калибровка, счётчик наработки, журнал событий и заводской сброс - карта адресов, план износа и чек-лист запуска.17 мин
- Счётчик ватт-часов: мощность в память каждые N минутСчётчик ватт-часов на Arduino: P=U×I с ползунком вместо датчика тока, интеграл мощности тиками, запись в EEPROM раз в 5 минут и расчёт износа.16 мин
- Двухточечная калибровка: k и b в EEPROMДвухточечная калибровка на Arduino: k и b по двум опорам (лёд и кипяток), хранение в EEPROM, пересчёт в градусы в одном месте, отличие от offset.16 мин
- Заводской серийный номер: прошиваем один разСерийный номер платы в EEPROM: magic-замок от повторной записи, генерация из шума плавающего входа, вывод в Serial и сценарий из десяти плат.15 мин
- Структура под микроскопом: дамп EEPROM после putЗаписали структуру put-ом и заглянули в ячейки: дамп по адресам, little-endian у int, float в четырёх байтах, sizeof и выравнивание на 32-битных платах.16 мин
- Умная запись: put трогает только изменившиеся байтыВнутри put стоит update: нетронутые байты не тратят циклы.16 мин
- Поменял — сохранил — выключил — включил: цикл настроекНастройки порога, яркости и режима: загрузка с проверкой magic, сохранение по кнопке, светодиод несохранённого и контрольная печать после включения питания.17 мин
- Ресурс EEPROM: 100000 циклов на ячейку и счётчик перезаписейДаташит обещает ячейке EEPROM 100000 циклов: что тратит ресурс, чем update лучше write и сколько проживёт конфиг при записи раз в час — считаем на салфетке.16 мин
- Wear leveling своими руками: запись по кругу с маркеромЗапись конфига по кругу из восьми слотов: поколение как маркер последней записи, восьмикратный запас ресурса и порядок записи на случай пропадания питания.16 мин
- Первый запуск: свежая EEPROM из 0xFF и версия конфигаСвежая EEPROM читается как 0xFF: сырые байты, версия конфига как главный вопрос, миграция полей и осознанный сброс к дефолтам при первом запуске платы.15 мин
- CRC-проверка конфига: блок, побитый отключением питанияCRC8 по блоку настроек в EEPROM: обрыв питания посреди записи ловится на старте, скетч откатывается к дефолтам и переписывает блок со свежей суммой.16 мин
- Magic-байт в нулевом адресе и версия структуры конфигаМаркер 0xA5 в нулевом адресе отделяет чистую плату от настроенной, байт версии мигрирует конфиг при добавлении поля: v1 в v2 без потери значений.16 мин
- Фабричный сброс: пять секунд удержания вместо случайного касанияФабричный сброс по удержанию пять секунд: LED-прогресс, защита от придавленной кнопки, перезапись блока со свежей суммой и нетронутые счётчики платы.17 мин
- Строки в EEPROM: имя Wi-Fi, пароль и подпись устройстваSSID, пароль и подпись платы как байты в EEPROM: нуль-терминатор против байта длины, поля 33 и 64 символа, защита чтения от мусора 0xFF, план в 113 байт.16 мин
- Маркер последней записи: журнал по кругу в хронологическом порядкеПорядковый номер как маркер последней записи: журнал в EEPROM читается в хронологическом порядке даже после замыкания кольца.16 мин
- Планировка адресного пространства: карта зон, резерв и наездыКарта EEPROM под проект: строки Wi-Fi на 113 байт, журнал на 32 слота, резерв и свободная зона.15 мин
- Меню настроек на одной кнопке: меняем порог — он переживает ребутНастройки без экрана: короткий клик шагает порог по шкале из десяти делений, удержание листает параметры, двойное мигание подтверждает запись в EEPROM.16 мин
- Магическое слово 0xAA55: первый запуск против чужой памятиСлово 0xAA55 в конце блока отличает первый запуск от чужой памяти: промах 1 из 65536, печать ставится последней, вердикт загрузки показывают вспышки светодиода.16 мин
- Счётчик наработки: сколько циклов записи выдержит проектБюджет записи: 100000 циклов против частоты флашей.17 мин
- struct в EEPROM: выравнивание, sizeof и дырки в байтахEEPROM.put пишет sizeof байтов структуры: дырки выравнивания съедают ячейки, а мусор в них ломает контрольную сумму.16 мин
- Калибровочная таблица из 20 точек: линейная интерполяцияДвадцать пар сырой АЦП и температуры в EEPROM: линейная интерполяция между точками, умножение до деления в long, зажим на краях и ремонт одной врущей точки.17 мин
- Стирание и запись битов: куда уходит цикл EEPROMПустая ячейка читается 255: запись пробивает нули, ноль в единицу без стирания не вернуть.16 мин
- Износ EEPROM и wear leveling: как не убить память за месяцРесурс ячейки 100000 циклов: счётчик раз в секунду умирает за 28 часов.16 мин
- Настройки устройства: EEPROM.put/get + CRC + первый пускМодуль настроек целиком: struct, magic-байт, версия раскладки, CRC8 поверх полей и три ветки первого пуска — свежая плата, битый блок, миграция версии.16 мин
- Журнал событий в EEPROM: кольцевой лог последних N записейКольцевой журнал последних событий в EEPROM: слот 32 байта, метка millis, счётчик перезагрузок как маркер сбоя питания и печать лога в Serial по команде.17 мин
- Два слота настроек: зеркалирование и откат при сбоеСлёт настроек A/B с флагом актуальности: запись в неактивный слот, проверка CRC, переключение флага.16 мин
- Счётчик наработки: часы мотаем без износа памятиНаработка в минутах: аккумулятор в RAM и инкремент EEPROM раз в час.16 мин
- Экспорт и импорт настроек: hex-дамп через SerialДамп EEPROM в hex по 16 байтов на строку, команды DUMP и LOAD из терминала, строгий парсер hex-пар и восстановление блока настроек после неудачной прошивки.15 мин
- Износ EEPROM: сто тысяч циклов и ресурсСчитаем частоту записи в EEPROM и прогнозируем срок жизни: 100000 циклов на ячейку, update вместо write, запись по событию и ротация ячеек.16 мин
- int и float в EEPROM: побайтовая записьКак хранить int и float в EEPROM Arduino: разложение числа на байты через /256 и %256, обратная сборка, знак минуса и IEEE-754 на четыре ячейки.18 мин
- EEPROM.put и get: структуры одним вызовомEEPROM.put и EEPROM.get: сохранение структуры настроек одним вызовом, sizeof, magic-байт и версия раскладки.17 мин
- Счётчик включений: двойная запись против сбояСчётчик включений платы в EEPROM с защитой от сбоя посреди записи: парные ячейки-двойники, маркер чётности и запись в старую копию до подтверждения новой16 мин
- Массив структур в EEPROM: слоты по sizeofНабор однотипных записей в EEPROM: адрес слота как база плюс i на sizeof, busy-маркер занятости, поиск свободного слота, правка и удаление без задевания соседей17 мин
- Износ EEPROM на практике: аудит и симптомыРесурс EEPROM на практике: считаем износ ячеек от перезаписей, распознаём симптомы деградации и строим схему записи так, чтобы плата прожила десятилетия17 мин
- struct Config: структура настроек устройстваПроектируем struct Config для EEPROM: поля под порог, интервал и яркость, байт версии, резерв под будущие поля, sizeof и цена добавления поля.16 мин
- CRC для настроек: целостность данныхКонтрольная сумма защищает настройки в EEPROM: XOR-CRC и CRC8 по полям структуры, байт суммы последним, проверка при старте и возврат к дефолтам.16 мин
- Счётчик перезагрузок: практика сохраненияСчётчик перезагрузок в EEPROM: инкремент read, плюс один, update при старте, потолок uint16 65535, обнуление кнопкой и диагностика повисаний.15 мин
- Пороги не забываются: тюнинг через кнопкиКнопки плюс и минус подстраивают порог срабатывания датчика на месте: таймер тишины на millis бережёт EEPROM, update пишет лишь изменившееся, бип подтверждает.16 мин
- Меню настроек с записью в EEPROMМеню на LCD 16x2 I2C и трёх кнопках: автомат просмотр-правка, EEPROM.put одной записью по выходу из правки, перерисовка по флагу без мерцания экрана.16 мин
- Магическое число: первый запуск и дефолтыСвежая плата читает из EEPROM 255, а не ноль: маркер 0x42 отличает первый запуск, version-байт мигрирует конфиг между прошивками, дефолты заливаются раз.15 мин
- Калибровка датчика: смещение в EEPROMТермометр врёт на полтора градуса: храним float-поправку в EEPROM, вводим режим калибровки кнопкой и применяем смещение к каждому чтению после сброса питания.16 мин
- Карта памяти ATmega328: 1 КБ EEPROMРаскладываем 1024 байта EEPROM по регионам: настройки 0-63, счётчики 64-71, журнал 128-511 и резерв.16 мин
- Организация памяти: адресное пространство скетчаВсе адреса EEPROM — в одной шапке скетча: const-константы, #define блоки, enum для журнала и самопроверка раскладки.17 мин
- Кольцевой буфер в EEPROM: журнал последних событийЖурнал последних событий в EEPROM: индекс head, запись по кругу в 32 слота, трёхбайтовое время и почему кольцо бережёт ресурс памяти в 32 раза лучше сдвига.16 мин
- Читаем журнал: вывод истории из EEPROMВыводим историю из EEPROM от старых событий к новым: обход по модулю, коды словами, время в чч:мм:сс и кнопка печати без завала монитора порта.15 мин
- String в EEPROM: длина и байтыХраним текст в EEPROM: байт длины плюс до 30 символов, чтение с проверкой, кириллица по два байта и имя устройства, которое переживёт сбой питания.16 мин
- Массив в EEPROM: цикл записи значенийКалибровочная таблица в EEPROM: цикл записи с адресной арифметикой addr + i * sizeof(int), чтение по индексу и правка одного элемента без перезаписи соседних.16 мин
- Моточасы устройства: счётчик наработкиМоточасы на Arduino: секунды копим в RAM, в EEPROM пишем раз в 6 минут — ячейка живёт больше года, потеря при сбое до шести минут, остаток до обслуживания.16 мин
- Расчёт износа: как часто можно писатьРесурс EEPROM: 100000 циклов на ячейку, раз в 10 секунд — смерть за 278 часов, раз в 6 минут — за год, кольцо из десяти ячеек умножает срок на десять.17 мин
- Внешний EEPROM 24C256: память по I2CПодключаем внешний EEPROM 24C256 к Arduino по I2C: адрес чипа 0x50 и пины A0-A2, два байта адреса ячейки, запись и чтение через Wire, когда 1 КБ мало.16 мин
- 24C256: побайтовая и страничная записьСтраничная запись в 24C256: страница 64 байта, заворот адреса на границе, пауза 5 мс цикла записи, обёртки writePage и readBytes, скорость против побайтовой.16 мин
- Резервные копии настроек: две страницы и чередованиеДве копии конфига в EEPROM и чередование страниц: счётчик версий и CRC8 в конце блока, сбой питания портит только черновик, восстановление целой копии.17 мин
- Заводской сброс: кнопка возврата к дефолтамЗаводской сброс на Arduino: дефолты в скетче, удержание кнопки три секунды с millis-подсчётом, бип подтверждения, applyDefaults и мягкий рестарт.16 мин
- Термостат с памятью: режим сохраняется после сбояТермостат на Arduino с памятью: порог и гистерезис в EEPROM через put и get, кнопки тюнинга с записью по таймеру, безопасное восстановление реле после сбоя.16 мин
- Эмуляция EEPROM на ESP32: PreferencesPreferences на ESP32: хранилище ключ-значение над NVS, namespace и ключи до 15 символов, дефолты в get, commit в end и перенос скетчей с EEPROM.h.15 мин
- EEPROM: настройки, которые не пропадут при выключенииEEPROM на Arduino Uno: 1024 байта, которые не стираются при выключении.18 мин
- Счётчик включений и хранение данных по байтамСчётчик включений на EEPROM: почему пустая память читается как 255, как уложить int в два байта через /256 и %256 и вернуть яркость после старта платы.20 мин