Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Пропадают значения в еепром
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Integral
Подскажите почему иногда при внезапном пропадании питания МК в еепром записываются значения 255???

Во время пропадания питания в еепром ниче не записываю.

Как устранить эту проблему?

А делаю я так.... начинаю разединять/соединять по много раз провода питания МК, после раз ~50 в некоторых ячеяках еепрома появляются значения 255. Неужели это иза помех по питанию при искрении? Кондюки на самом МК, на стабилизаторе перед и после все по 0.1мкФ.

МК мега16.
Николай Иванович Приходько
а ввообще есть в программе код записи в ипром? если есть, то возможно в результате случайного джампа из-за дёрганья питалова происходит переход на код записи в еепром
Integral
да, есть..... с утра уберу, проверю и отпешусь....
Николай Иванович Приходько
Цитата(Integral @ Oct 4 2008, 03:15) *
да, есть..... с утра уберу, проверю и отпешусь....

Ещё попробуйте между строчками:

sbi EECR, EEMWE ; Разрешили запись в EEPROM
; ----------------------------------------------
; не более чем 4-х тактовая проверка санкционированности записи в EEPROM
; софтом верхнего уровня
; ----------------------------------------------
sbi EECR, EEWE ; Начали аппаратную запись в EEPROM


Вставлять проверку условия была ли вообще санкционирована запись в EEPROM софтом верхнего уровня

Например такую:
;------------------------------------------------------
lds R16 , ( EEPROM_WRITING_ENABLE_TAG ); Считали из ОЗУ тэг разрешения записи
cpi R16 , $37
brne found_run_Time_Failure
;------------------------------------------------------

Не забывайте только что проверка условия должна выполняться не более 4 тактов процессора - иначе запись не будет произведена


И ещё. Запись в EEPROM (т.е. последовательная установка битов EEMWE и EEWE) должна быть только в одном месте программы. Потому что чем больше будет понатыкано в программе команд записи тем больше вероятность несанкционированной записи в EEPROM
Deka
Ещё неплохо указатель записи сбрасывать на заранее определённую ячейку в которою возможна запись мусора в момент пропадания питания.
gormih
Цитата(Integral @ Oct 4 2008, 02:58) *
Подскажите почему иногда при внезапном пропадании питания МК в еепром записываются значения 255???

Во время пропадания питания в еепром ниче не записываю.

Как устранить эту проблему?

А делаю я так.... начинаю разединять/соединять по много раз провода питания МК, после раз ~50 в некоторых ячеяках еепрома появляются значения 255. Неужели это иза помех по питанию при искрении? Кондюки на самом МК, на стабилизаторе перед и после все по 0.1мкФ.

МК мега16.

Проблема не программная, а чисто аппаратная. Действительно, у всех микроконтроллеров ATMEGA, особенно у тех, что без технологии picopower наблюдается порча значений в EEPROM при нестабильном напряжении питания. Проблема проявляет себя, когда при выключении питания некоторый промежуток времени значение напряженя питания на соответствующих выводах микроконтроллера лежит в окне 0.2 ... 2.2 В. Для устранения данной проблемы предлагаеся использовать любое решение, которое позволит "мнгновенно" отключать питание на выводах питания.
Integral
Цитата(gormih @ Oct 4 2008, 11:54) *
....значение напряженя питания на соответствующих выводах микроконтроллера....


"соответствующих" - это на какие таких выводах? или на любих портах ввода/вывода? Ато у меня на некоторых портах стоят кондюки по 0.1мкФ и должно получаться точно как Вы написали.....
Николай Иванович Приходько
Цитата(gormih @ Oct 4 2008, 12:54) *
Проблема не программная, а чисто аппаратная. Действительно, у всех микроконтроллеров ATMEGA, особенно у тех, что без технологии picopower наблюдается порча значений в EEPROM при нестабильном напряжении питания. Проблема проявляет себя, когда при выключении питания некоторый промежуток времени значение напряженя питания на соответствующих выводах микроконтроллера лежит в окне 0.2 ... 2.2 В.

Т.е. порча имеет место быть даже если в программе вообще нет команд записи в EEPROM? 05.gif
Igor26
Цитата
то возможно в результате случайного джампа

ДеЖаВю.
Николай Иванович Приходько
Цитата(Integral @ Oct 4 2008, 13:05) *
Ато у меня на некоторых портах стоят кондюки по 0.1мкФ

Ну вот. И получили паразитноую запитку через выводы портов
gormih
Цитата(Николай Иванович Приходько @ Oct 4 2008, 13:07) *
Т.е. порча имеет место быть даже если в программе вообще нет команд записи в EEPROM? 05.gif

Именно. Это старый баг. Официально признаный Атмелом. В иксмеге он устранен полностью, а атмегах с пикопауэр влияние бага уменьшено... но не устранено полностью.
Integral
Цитата(gormih @ Oct 4 2008, 12:11) *
Именно. Это старый баг. Официально признаный Атмелом. В иксмеге он устранен полностью, а атмегах с пикопауэр влияние бага уменьшено... но не устранено полностью.


Этот баг очень при очень маловероятный....
Уйма времени издевался над питанием МК, если в програме эсть запись в еепром то только в тех ячейках иногда появляется значение 255. Создавал большой масив который в самой програме не используется. В результате сколько не клацал ни одного сбоя ячейки.

Поэтому проблема чисто програмная и очень с маленькой вероятностью апаратная. Или по крайней мере в моем случае этот баг не проявляется.
Qwertty
Цитата(gormih @ Oct 4 2008, 13:11) *
Именно. Это старый баг. Официально признаный Атмелом.

Официально признанные описываются в ерратах. У Мег я таких записей не встречал - что независимо от наличия/отсутствия супервизора может портиться еепром при плавном снижении/нарастании питания.
Ph. Anatoliy
У меня подобный глюк наблюдался при переходе с WinAVR 2006 на 2007. Вот последнй рабочий код

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/eeprom.h>

...
eeprom_busy_wait();
eeprom_write_byte(&write_addrr, tmp);
write_counter++;
...
...
eeprom_busy_wait();
tmp=eeprom_read_byte(&read_addr);
...
gormih
Цитата(Integral @ Oct 4 2008, 15:28) *
Этот баг очень при очень маловероятный....
Уйма времени издевался над питанием МК, если в програме эсть запись в еепром то только в тех ячейках иногда появляется значение 255. Создавал большой масив который в самой програме не используется. В результате сколько не клацал ни одного сбоя ячейки.

Поэтому проблема чисто програмная и очень с маленькой вероятностью апаратная. Или по крайней мере в моем случае этот баг не проявляется.

beer.gif удачи... что я еще могу сказать.



Цитата(Qwertty @ Oct 4 2008, 15:47) *
Официально признанные описываются в ерратах. У Мег я таких записей не встречал - что независимо от наличия/отсутствия супервизора может портиться еепром при плавном снижении/нарастании питания.

Это не является багом в обычном понимании этого слова, так как в Datasheet жестко оговариваются минимальное и максимальное значение напряжения питания, и если Вы выходите за их пределы - Атмел тут не при чем как бы.

А вообще официальный ответ тут

P.S: По моему опыту - в EEPROM лучше вообще ничего не хранить. Были случаи, когда прибор месяцами работал без сбоев, потом происходил сбой в EEPROM и звали разработчика ПО разбираться - в Сибирь, на объект smile.gif. При этом сама возможность записи значений в EEPROM была отключена в программе - ЕЕPROM записывалась один раз, при прошивке микроконтроллера на производстве. Прблему решили тем, что данные перенесли из EEPROM во FLASH.
Integral
У меня в еепром сохраняются пользовательские настройки системи(+статистика всякая). Будет очень не хорошо эсли они будут лагать.... Но как можно без еепрома сохранять эти настройки? 07.gif внешнюю микруху памяти подклячать тупо както....

Может Вы знаете как во время работы программы перезаписать значения во флеш памяти?
Сергей Борщ
Цитата(Integral @ Oct 4 2008, 21:50) *
Но как можно без еепрома сохранять эти настройки? 07.gif внешнюю микруху памяти подклячать тупо както....
Включите супервизор (BOD) соответствующим фузом и не морочьте себе голову. Если и это не поможет - показывайте разводку. При правильной разводке и с включенным супервизором EEPROM не слетает.
Цитата(Integral @ Oct 4 2008, 21:50) *
Может Вы знаете как во время работы программы перезаписать значения во флеш памяти?
Это описано в разделе Boot Loader Support даташита. На сайте Атмела есть несколько Application Notes посвященных этому вопросу.
Integral
В разводке нету что показывать..... кнопки+LCD.

Удивительно..... но вроде помогло 07.gif

Сергей Борщ благодарю.... теперь я спокойно могу идти спать smile.gif
singlskv
Цитата(Integral @ Oct 4 2008, 23:48) *
В разводке нету что показывать..... кнопки+LCD.
Вы так и не сказали, BOD у Вас включен ?
Если нет, то ошибки в EEPROM практически неизбежны.
Если у Вас не батарейное питание, BOD при работе с EEPROM дб
включен обязательно.
А если батарейное, там конечно все немного сложнее...
TihSasha
У меня подобная "разруха" в EEPROM была при разработках на ATtiny2313. Вылечилось добавлением в схему супервизора питания. С тех пор всегда, когда использую EEPROM, ставлю на RESET КР1171сп4.7. Больше подобного я не видел.
defunct
Цитата(gormih @ Oct 4 2008, 20:32) *
А вообще официальный ответ тут

ну и что вам непонятно из этого:

An EEPROM data corruption can be caused by two situations when the voltage
is too low. First, a regular write sequence to the EEPROM requires a minimum
voltage to operate correctly. Second, the CPU itself can execute
instructions incorrectly, if the supply voltage is too low.

Проблема связана с одним из двух - либо напряжение падает ниже критической отметки во время записи, либо CPU в момент снижения напряжения питания ниже критической отметки непреднамерено прыгает и выполняет инструкцую записи, это именно то о чем написал Integral. Проблем с самим eeprom'ом нет.

Цитата(singlskv @ Oct 4 2008, 23:04) *
Вы так и не сказали, BOD у Вас включен ?

Он же сказал - помогло. ;>
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.