Слетают настройки еепром

То ли китайцы чипы заюзанные шлют, то ли лыжи не едут.

Храню настройки во встроенной еепром. Настройки считываю при включении платы с условием:

x = EEPROM.read(1);

if (x < 1 || x > 250)

{

x = 1; (дефолтное значение)

EEPROM.write(1, x) ;

delay(5) ;

}

Нулевую ячейку не использую, сохранять начинаю с первой и по порядку.

Периодически получаю деформацию некоторых данных и переход к дефолтным параметрам. Почему-то.

Существует ли в вашем логичном мире алгоритм безотказной работы с памятью? Например, дублирование данных с последующей сверкой. Или, может, я зря использую начальные ячейки?

Не факт что EEPROM виноват. Возможно, косяк в коде. Напишите програмку запись --чтение EEPROM байта данных, и , к примеру, каждый раз увеличивайте значение на 1. При несовпадении - фиксируйте ошибку.
Погоняйте какое-то время, по вашим адресам, ну типа как MemTest))

Дык в том и дело, что настройки я тоже программно зажимаю в диапазоне 1-250. Выйти за диапазон нельзя. Выставил, записал в еепром, работаю. Слететь может как через месяц, так и через неделю.

Даже если аварийное выключение света, пониженное напряжение, то еепром считывается вначале и дальше с ней работа прекращается,и вряд ли это влияет на деградацию памяти, так? Bodlevel 2,7v.

Посещают мысли делать 2 или 3 копии своих параметров, но в случае отвала одного из них, какой считать эталонным для перезаписи остальных?

любые 2 одинаковых. И храни свои параметры с адреса 0x10

И контрольную сумму.

Как вариант - прицепите внешнюю EEPROM , купите новую, для проверки.
Если глюк останется - косяк в коде.
Ещё-
если данных не много, при записи можно сдвигать адреса, записывая каждый раз на новое место. Это чтобы продлить срок службы памяти

Давайте уже извращацца поизврещеннее: представим один байт как в 8 бит а эти 8 бит как 8 байт в еепром. Любое ненулевое число записанное в этих виртуальных битах = “1” а писать “1” можно только сдвигая бит влево или вправо. Ну “0” это и будет “0” При таком формате записи епромки на тышшу лет хватит)))

Может у вас в коде “х” вылетает за пределы 0-250?
И поэтому происходит переход к дефолтным значениям?

Думаю, что так и получается. На как-то само.

Я единожды ставлю настройки и больше в них не лезу. И их в коде больше не трогаю.

Один раз считал параметр при включении и с ним работаю. Операции перезаписи в еепром нет.

И таких плат несколько клонов. На одних всë збс, на других слетает.

Можете пояснить? Первый десяток “болеет”? Я слышал, что с нулевым точно лучше дел не иметь.

Внешняя есть, но она собирает статистику по кольцевому буферу.

Что, под завязку забита?
А ещё одну, для проверки, нельзя что-ли?
Хозяин-барин…

Пока низя, платы разведены и их надо потратить. Думал, мож хитрости есть какие-то у опытных товарищей, может, кто сталкивался с подобным

На моё ИМХО,. если есть проблемы с данными, bodlevel лучше повысить, хотя-бы на время, тоже для проверки

Полностью согласен. Уже наступал на эти грабли, но при использовании PIC микроконтроллеров. На низком напряжении питания EEPROM разваливался в хлам при простом чтении, это при том, что команд записи в EEPROM в прошивке просто не было.

А вот боязнь использовать 0й адрес к проблеме отношения не имеет.