Механизм записи и увеличение ресурса EEPROM у МК
- Dmitry Dubrovenko
- Поставщик валерьянки для Кота
- Сообщения: 2360
- Зарегистрирован: Вс янв 09, 2011 16:51:39
- Откуда: Санкт-Ленинград
- Контактная информация:
Механизм записи и увеличение ресурса EEPROM у МК
Как известно, почти все современные МК обладают встроенной EEPROM данных.
Хотя ресурс данной памяти довольно велик, он всё же ограничен, и приведён в даташитах.
А вопрос, каков механизм записи в EEPROM?
Т.е. идёт "изнашивание" всей памяти, или только той ячейки, к которой обращаются?
Хотя ресурс данной памяти довольно велик, он всё же ограничен, и приведён в даташитах.
А вопрос, каков механизм записи в EEPROM?
Т.е. идёт "изнашивание" всей памяти, или только той ячейки, к которой обращаются?
ICQ нет, и, в ближайшее время, не будет.
- Реклама
- maglev
- Потрогал лапой паяльник
- Сообщения: 316
- Зарегистрирован: Пт апр 17, 2009 22:45:42
- Откуда: Minsk
- Контактная информация:
Re: Механизм записи и увеличение ресурса EEPROM у МК
Сколько раз уже спрашивали...
Изнашивается конкретный адрес, при стирании все биты(?), при записи - биты, в которые пишется "0".
Изнашивается конкретный адрес, при стирании все биты(?), при записи - биты, в которые пишется "0".
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Механизм записи и увеличение ресурса EEPROM у МК
Ну это спорный вопрос, поскольку память имеет страничную организацию...maglev писал(а):...
Изнашивается конкретный адрес...
- maglev
- Потрогал лапой паяльник
- Сообщения: 316
- Зарегистрирован: Пт апр 17, 2009 22:45:42
- Откуда: Minsk
- Контактная информация:
Re: Механизм записи и увеличение ресурса EEPROM у МК
Страничную организацию имеет flash-память, и для нее правила другие. EEPROM-же страниц не имеет, это одно из основных отличий от flash с т.з. пользователя.
- Dmitry Dubrovenko
- Поставщик валерьянки для Кота
- Сообщения: 2360
- Зарегистрирован: Вс янв 09, 2011 16:51:39
- Откуда: Санкт-Ленинград
- Контактная информация:
Re: Механизм записи и увеличение ресурса EEPROM у МК
maglev, тенкс!
Только поясните, правильно ли я понял, что с "изнашиванием", память перестаёт стираться (т.е. все биты выставляться в "1"), и при записи, нестёртые биты остаются в исходном состоянии, а те, которые программируются (в которые записывается "0"), программируются нормально?
Только поясните, правильно ли я понял, что с "изнашиванием", память перестаёт стираться (т.е. все биты выставляться в "1"), и при записи, нестёртые биты остаются в исходном состоянии, а те, которые программируются (в которые записывается "0"), программируются нормально?
ICQ нет, и, в ближайшее время, не будет.
- Реклама
- maglev
- Потрогал лапой паяльник
- Сообщения: 316
- Зарегистрирован: Пт апр 17, 2009 22:45:42
- Откуда: Minsk
- Контактная информация:
Re: Механизм записи и увеличение ресурса EEPROM у МК
Память перестает стираться (стирание это запись "1"), дохлый бит остается в нуле.
Но я-бы не рассчитывал на эти тонкости, т.к. заявленный ресурс она отрабатывает гарантированно во всем диапазоне температур и напряжений, а испорченные ячейки могут повести себя непредсказуемо. Охладишь или нагреешь - возможна спонтанная регенерация, потом опять вывалится.
Но я-бы не рассчитывал на эти тонкости, т.к. заявленный ресурс она отрабатывает гарантированно во всем диапазоне температур и напряжений, а испорченные ячейки могут повести себя непредсказуемо. Охладишь или нагреешь - возможна спонтанная регенерация, потом опять вывалится.
- Dmitry Dubrovenko
- Поставщик валерьянки для Кота
- Сообщения: 2360
- Зарегистрирован: Вс янв 09, 2011 16:51:39
- Откуда: Санкт-Ленинград
- Контактная информация:
Re: Механизм записи и увеличение ресурса EEPROM у МК
Ну, я так примерно и сказал.maglev писал(а):Память перестает стираться (стирание это запись "1"), дохлый бит остается в нуле.
Просто сейчас пишу программу, где надо периодически сохранять данные.
Данных всего один байт, поэтому сделал алгоритм проверки записи, и, при ошибке, смены адреса ячейки.
ICQ нет, и, в ближайшее время, не будет.
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Механизм записи и увеличение ресурса EEPROM у МК
Тогда Вам EEPROM хватит на всю жизнь. 
I am DX168B and this is my favourite forum on internet!
- maglev
- Потрогал лапой паяльник
- Сообщения: 316
- Зарегистрирован: Пт апр 17, 2009 22:45:42
- Откуда: Minsk
- Контактная информация:
Re: Механизм записи и увеличение ресурса EEPROM у МК
Я-бы так не делал, если правильно понимаю идею. Ты используешь одну ячейку до исчерпания ресурса, надеясь поймать момент, когда она умрет. Этот момент надежно поймать нельзя.Dmitry Dubrovenko писал(а): алгоритм проверки записи, и, при ошибке, смены адреса ячейки.
Правильнее писать каждый раз в новые адреса, размазывая (гарантированный) ресурс на количество используемых ячеек. Так обычно и делают, если имеет смысл по количеству планируемых перезаписей.
- Engineer_Keen
- Друг Кота
- Сообщения: 3872
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Механизм записи и увеличение ресурса EEPROM у МК
А какова вероятность, что новые данные не равны уже записанным? Или там случайное число 0-255? А то можно перед записью проверять, вдруг и записывать ничего не нужно, тогда еще немного ресурс сэкономится.
- Dmitry Dubrovenko
- Поставщик валерьянки для Кота
- Сообщения: 2360
- Зарегистрирован: Вс янв 09, 2011 16:51:39
- Откуда: Санкт-Ленинград
- Контактная информация:
Re: Механизм записи и увеличение ресурса EEPROM у МК
Почему же?maglev писал(а):Этот момент надежно поймать нельзя.
Если верификация записи не проходит, вот и "момент".
Так бы оно, возможно, и было, но ведь адрес ячейки надо тоже куда-то записывать.maglev писал(а):Правильнее писать каждый раз в новые адреса, размазывая (гарантированный) ресурс на количество используемых ячеек
Это - само-собой, разумеется.Engineer_Keen писал(а):А то можно перед записью проверять, вдруг и записывать ничего не нужно
ICQ нет, и, в ближайшее время, не будет.
- Neekeetos
- Держит паяльник хвостом
- Сообщения: 993
- Зарегистрирован: Пн сен 18, 2006 11:16:05
- Откуда: Тула
- Контактная информация:
Re: Механизм записи и увеличение ресурса EEPROM у МК
Тебе правильно сказали что записывать в одну и туже ячейку ожидая что она даст сбой записи это не оптимальный вариант, по той например причине что ячейка с выработанным ресурсом может нормально записаться но например считаться неверно позже. Грубо говоря не все ошибки при записи и чтении можно отследить.Dmitry Dubrovenko писал(а):Почему же?maglev писал(а):Этот момент надежно поймать нельзя.
Если верификация записи не проходит, вот и "момент".
Я когда делал такую вещь использовал распределение записи. В епромке ресурс тратится при любом изменении состояния битов, так что есть вариант записывать (не стирая) например одну и туже ячейку несколько раз подряд (8 на самом деле) обнуляя биты по очереди получая для одной ячейки тот же ресурс при 8кратном увеличении количества физических записей, при этом ты можешь использовать содержимое такой ячейки как указатель. Сама схема такая, выбираешь сколько тебе нужно ячеек, разбиваешь их на две группы - указатель и данные. Указателей в 8 раз меньше чем данных. Потом при записи ты последовательно обнуляешь биты в указателях, записывая в соотв ячейку данных новые. Ресурс увеличивается пропорционально количеству ячеек под данные. Те при использовании 9 байт = 1байт указатель и 8 байт данные, ресурс будет в 8 раз больше. Количество ячеек можно рассчитать. Ресурс среднего епрома 1 миллион перезаписей, это примерно 11 дней можно записывать новые данные в одну ячейку раз в секунду. Если требуется к примеру ресурс в 5 лет то 5 лет *365 дней/ 11 дней = 165 ячеек данных + 165/8 ~ 20байт указателей. Естественно все эти расчеты будут другими если частота записи отличается от раза в секунду.
Информация по RLC mini находится >тут<
-
AndyKorg
- Встал на лапы
- Сообщения: 93
- Зарегистрирован: Пт янв 07, 2011 08:52:08
- Откуда: Санкт-Петербург
Re: Механизм записи и увеличение ресурса EEPROM у МК
Простите, что влезаю. Но ведь запись в EEPROM в основном используется для спасения каких-то данных на случай пропадания питания. Может и тут такой случай и достаточно поставить конденсатор на питание МК и как то отслеживать наличие напряжения питания и в случае чего писать в EEPROM, а не периодически.
Конечно возможно, что конденсатор некуда поставить или ног не хватает для отслеживания питания. В этом случае конечно "такраканы пассуют".
Конечно возможно, что конденсатор некуда поставить или ног не хватает для отслеживания питания. В этом случае конечно "такраканы пассуют".
Re: Механизм записи и увеличение ресурса EEPROM у МК
Не обязательно. Может быть, ведется журнал событий. Если держать его в ОЗУ, а в момент пропадания питания переписывать в EEPROM, то простого конденсатора по питанию явно недостаточно - это не умозрительно, сам на этом деле долго ломал бошку. Нужен автомат питания, который четко отследит момент, начиная с которого энергии хватит только на записать в EEPROM. И если в процессе записи питание восстановилось, тем не менее закончить запись. А если не восстановилось, во избежание автколебательного процесса по питанию включить все допустимые нагрузки, и как Титаник, уйти на дно с включенной илюминациейAndyKorg писал(а): Но ведь запись в EEPROM в основном используется для спасения каких-то данных на случай пропадания питания.
Вот вариант с указателями (Neekeetos) мне нравится - красиво.
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Механизм записи и увеличение ресурса EEPROM у МК
А я бы так сделал:
Данные держал бы в ОЗУ и в случае отключения питания сохранил бы в EEPROM,
но запитав МК по такой схеме:

Отслеживать питание ногой РХ1 и после всей процедуры отключить МК от батареи, выставив лог. 0 на ноге РХ0
Ногу РХ1 можно настроить как внешнее прерывание по спадающему фронту и в обработчике произвести запись в EEPROM. В конце обработчика выставить ногу РХ0 в лог. 0
Для защиты от кратковременных отключений питания, можно повесить электролит в пару сотен мкф между ногой PX1 и массой, но наверное надо будет устранить утечку заряда из него, поставив в цепи PX1 диод и кондёр этот подключить после него.
Данные держал бы в ОЗУ и в случае отключения питания сохранил бы в EEPROM,
но запитав МК по такой схеме:
Отслеживать питание ногой РХ1 и после всей процедуры отключить МК от батареи, выставив лог. 0 на ноге РХ0
Ногу РХ1 можно настроить как внешнее прерывание по спадающему фронту и в обработчике произвести запись в EEPROM. В конце обработчика выставить ногу РХ0 в лог. 0
Для защиты от кратковременных отключений питания, можно повесить электролит в пару сотен мкф между ногой PX1 и массой, но наверное надо будет устранить утечку заряда из него, поставив в цепи PX1 диод и кондёр этот подключить после него.
- Вложения
-
- MC.PNG
- (8.3 КБ) 1340 скачиваний
I am DX168B and this is my favourite forum on internet!
- maglev
- Потрогал лапой паяльник
- Сообщения: 316
- Зарегистрирован: Пт апр 17, 2009 22:45:42
- Откуда: Minsk
- Контактная информация:
Re: Механизм записи и увеличение ресурса EEPROM у МК
А завтра форточку открыли, или солнышко с утра пригрело, или конденсатор в питателе подсох - вот и не читается.Dmitry Dubrovenko писал(а):Почему же?maglev писал(а):Этот момент надежно поймать нельзя.
Если верификация записи не проходит, вот и "момент".
- Dmitry Dubrovenko
- Поставщик валерьянки для Кота
- Сообщения: 2360
- Зарегистрирован: Вс янв 09, 2011 16:51:39
- Откуда: Санкт-Ленинград
- Контактная информация:
Re: Механизм записи и увеличение ресурса EEPROM у МК
Как уже говорили, довольно сложная аппаратная реализация.AndyKorg писал(а):как то отслеживать наличие напряжения питания
В моём случае, вдобавок, конструкция уже готовая, переделке не подлежит, а надо новую прошивку.
Или бульдозером наехали, или кислотой облили...maglev писал(а):А завтра форточку открыли, или солнышко с утра пригрело, или конденсатор в питателе подсох
Допустим, теория с побитным изнашиванием верна.Jack_A писал(а):Вот вариант с указателями (Neekeetos) мне нравится - красиво.
Тогда поясните, что за МК такой, который позволяет запись осуществлять без стирания?
Если говорить об извращениях, могу ещё один вариант предложить.
Если достаточно семи битов данных, то восьмой можно использовать в качестве указателя. И никаких дополнительных ячеек.
ICQ нет, и, в ближайшее время, не будет.
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Механизм записи и увеличение ресурса EEPROM у МК
ATTINY26L. Даю полную гарантию, что новые данные можно писать в EEPROM поверх старых, без предварительного стирания. А вот FLASH требует предварительного стирания.Dmitry Dubrovenko писал(а): Тогда поясните, что за МК такой, который позволяет запись осуществлять без стирания?
Я уже много проектов сделал с использованием записи в EEPROM.
I am DX168B and this is my favourite forum on internet!
- Dmitry Dubrovenko
- Поставщик валерьянки для Кота
- Сообщения: 2360
- Зарегистрирован: Вс янв 09, 2011 16:51:39
- Откуда: Санкт-Ленинград
- Контактная информация:
Re: Механизм записи и увеличение ресурса EEPROM у МК
"Покурил" даташит.DX168B писал(а):ATTINY26L
Что-то ничего подобного не увидел (как-раз наоборот).
Ткните носом, плиз.
ICQ нет, и, в ближайшее время, не будет.
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Механизм записи и увеличение ресурса EEPROM у МК
Вот работающие куски кода для этого МК.
Тут копируются байты из массива в EEPROM.
Извратов не пугайтесь. Это маленький отрывок большой программы.
По окончанию процедуры записи стоит вырубить прерывание по готовности EEPROM,
иначе оно Вас зае***т в процессе работы программы. Незнаю, как в других МК, но тут такая мелкая гадость.
Код: Выделить всё
.include "tn26def.inc"
;---------------------------------------------- Назначение имён регистрам
.def temp0 = R16
.def temp1 = R17
.def temp2 = R18
;----------------------------------------------
.cseg
;**********************************************
;* Векторы прерываний *
;**********************************************
.org 0x0000
rjmp RESET
.org 0x0009
rjmp EEP_RDY
.org INT_VECTORS_SIZE
;---------------------------------------------- Готовность EEPROM по прерыванию
EEP_RDY:
ldi temp2, 0x00 ;По готовности EEPROM чистим temp2
reti
;---------------------------------------------- Начало программы
RESET:
ldi temp0, RamEnd ;Указатель стека
out SP, temp0
;...............
;.....
;---------------------------------------------- Запись "заводского" кода и значений настроек
WRSTD:
ldi ZL, Low(CONFIG_IMAGE*2)
ldi ZH, High(CONFIG_IMAGE*2)
clr temp1
WRSTD_LOOP:
lpm temp0, Z
rcall EEWRITE1
adiw Z, 0x01
inc temp1
cpi temp1, 50
brmi WRSTD_LOOP
;-------------------------------
rcall SUCCESS ; Индицируем успешную операцию.
rjmp RESET
;---------------------------------------------- Универсальный загрузчик в EEPROM
EEWRITE1:
cli
sbi EECR, EERIE
out EEAR, temp1
out EEDR, temp0
sbi EECR, EEMWE
sbi EECR, EEWE
ldi temp2, 0xFF
sei
EEWR2:
cpi temp2, 0x00
brne EEWR2
cbi EECR, EERIE
ret
;---------------------------------------------- Образ "заводских" настроек
CONFIG_IMAGE:
.db 0x01, 0x02, 0x03, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
.db 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
.db 0x05, 0x05, 0x05, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
.db 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
.db 0x00, 0xFF, 0xFF, 0xFF, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
Извратов не пугайтесь. Это маленький отрывок большой программы.
По окончанию процедуры записи стоит вырубить прерывание по готовности EEPROM,
иначе оно Вас зае***т в процессе работы программы. Незнаю, как в других МК, но тут такая мелкая гадость.
I am DX168B and this is my favourite forum on internet!



