То ли китайцы чипы заюзанные шлют, то ли лыжи не едут.
Храню настройки во встроенной еепром. Настройки считываю при включении платы с условием:
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 копии своих параметров, но в случае отвала одного из них, какой считать эталонным для перезаписи остальных?
Как вариант - прицепите внешнюю EEPROM , купите новую, для проверки.
Если глюк останется - косяк в коде.
Ещё-
если данных не много, при записи можно сдвигать адреса, записывая каждый раз на новое место. Это чтобы продлить срок службы памяти
Давайте уже извращацца поизврещеннее: представим один байт как в 8 бит а эти 8 бит как 8 байт в еепром. Любое ненулевое число записанное в этих виртуальных битах = “1” а писать “1” можно только сдвигая бит влево или вправо. Ну “0” это и будет “0” При таком формате записи епромки на тышшу лет хватит)))
Полностью согласен. Уже наступал на эти грабли, но при использовании PIC микроконтроллеров. На низком напряжении питания EEPROM разваливался в хлам при простом чтении, это при том, что команд записи в EEPROM в прошивке просто не было.
А вот боязнь использовать 0й адрес к проблеме отношения не имеет.