Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: EEPROM ATtiny2313
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
andrey videoplus
Хорошего времени суток.
Прошу совета, подсказки и т.д. знающих людей.
Было серийно выпускаемое устройство еще на AT89C2051 которое запоминало данные во внешней флеш-памяти АТ24С256. Все было хорошо пока не решили перейти на проц по новее ATtiny2313. И часть данных решил сохранять во встроенной EEPROM.
Имеется опыт работы с ATmega, но как-то не приходилось использовать их внутренние EEPROM. Ничего не предвещало беды, но устройства начали глючить. Через некоторое время проблема была найдена - по какой-то причине данные в EEPROM сбивались. Причем - могло проработать и 2 неделе, а потом глюкнуть. А могло и сразу. Проблему решил просто - все данные опять храню во внешней флешке. Проблемы нет, но хочется понять!!!
Вот образец:
;----------- резервирование EEPROM
.ESEG
.ORG $0
zad: .byte 1
master: .byte 8

А это сами программы:
;--------------- запись байта ----------------
;адрес ячейки для записи/чтения находится work.
;результат в buf
eeprom_write:
cli
sbic EECR,EEWE ;-- ждать флаг готовности
rjmp eeprom_write
out EEAR,work ;-- установить байт адреса
out EEDR,buf ;-- копировать данные для записи
sbi EECR,EEMWE ;--
sbi EECR,EEWE ;-- начать запись
sei
ret
;--------------- чтение ----------------
eeprom_read:
cli
sbic EECR,EEWE ;-- ?ac?aoaiey ia ?oaiea
rjmp eeprom_read
out EEAR,work ;-- onoaiiaea ieaaoaai cia?aiey aa?ana
;clr buf
sbi EECR,EERE ;-- onoaiiaea i?eciaea ?oaiey
in buf,EEDR ;-- eiie?oai ?acoeuoao
sei
ret

во время выполнения этих процедур пропадание питания не наблюдалось, прерываний, которые могли бы вносить "коррективы" в адрес или менять байт информации - нет. Грешу только на питание - от 12В через 7805. Но ведь с внешней памятью работает нормально............ Думал наводка на кварц или его цепи - переключил на внутренний RC - результат тот же.
Sergey_Aleksandrovi4
Дважды наступал на грабли с порчей EEPROM. Дважды грешил на аппаратные баги. В обоих случаях забывал вкдючить BOD (встроенный супервизор). Он у Вас используется?
UPD Ещё как вариант, после кажодй операции с EEPROM (запись или чтение) записывать в регистр адреса EEAR число, чтобы регистр указывал на неиспользуемую ячейку памяти. Если что и случиться, то только с ней. Ни разу таким способом не требовалось пользоваться, т.к. , повторюсь, при включенном BOD проблем с EEPROM ни разу не возникало.
rx3apf
Забавно, этой проблеме то лет в обед, я думал, tiny2313 уже от нее избавились - а вот нет, похоже... На 90S2313 это стабильно воспроизводилось, когда напряжение питания при выключении плавно снижалось (большая емкость висела). BOD у них не было, супервизор у меня не стоял, и вот такая зараза. Обошли, как и было сказано, записью в адрес EEPROM неиспользуемой ячейки (00).
andrey videoplus
Блин, а себе все пальцы искусал. Думаю что за...... >:(
BOD всегда отключал, никогда не использовал - видно зря!!! Ничего, будет наука, спасибо.
А такое только в tiny проявляется или в других моделях тоже встречалось?
zombi
Цитата(andrey videoplus @ May 20 2011, 13:41) *
BOD всегда отключал, никогда не использовал - видно зря!!! Ничего, будет наука, спасибо.

Т.е. у Вас и внутренний BOD отключён и внешний отсутствует?!
azziz
В других моделях аналогичная ситуация (mega16, mega88). Как уже было сказано выше, решалась включением супервизора.
andrey videoplus
Цитата(zombi @ May 20 2011, 13:06) *
Т.е. у Вас и внутренний BOD отключён и внешний отсутствует?!


Наверно удивительно?? Но как уже говорил со встроенной EEPROM дело иметь не приходилось. Все устройства, которые ранее приходилось проектировать - выполняли несложные задачи, имеют бесперебойное питания и выключаются раз в месяц для профилактики. Потому BOD был до фонаря.
777777
Цитата(andrey videoplus @ May 20 2011, 15:45) *
Цитата
Т.е. у Вас и внутренний BOD отключён и внешний отсутствует?!
Наверно удивительно??

Конечно удивительно! А сброс как вы на него подаете? Он-то нужен независимо от того, работаете вы с EEPROM или нет.
ArtemKAD
Цитата
Наверно удивительно?? Но как уже говорил со встроенной EEPROM дело иметь не приходилось. Все устройства, которые ранее приходилось проектировать - выполняли несложные задачи, имеют бесперебойное питания и выключаются раз в месяц для профилактики. Потому BOD был до фонаря.

BOD никогда не до фонаря. Он может только иногда мешать для крайне мало потребляющих устройств. В остальных случаях это крайне полезная фича позволяющая устройству предсказуемо работать при снижении напряжения. Для EEPROM он обязателен т.к. надо гарантировать, что энергии на запись после команды таки хватит. До этого вам повезло т.к. внешняя EEPROM ниже нижней границы питания (2,7В для 24С) просто не работала.
Xenia
Цитата(rx3apf @ May 20 2011, 14:19) *
Забавно, этой проблеме то лет в обед, я думал, tiny2313 уже от нее избавились - а вот нет, похоже... На 90S2313 это стабильно воспроизводилось, когда напряжение питания при выключении плавно снижалось (большая емкость висела).

У меня на AT90S2313 слетала, а конкретно обнулялась. Причина неизвестна. Списать на BOD не могу, т.к. в EEPROM прошивался серийный номер устройства (в момент прошивки), но само устройство НИКОГДА в свой EEPROM ничего не писало - не было такой функции в программе. Т.е. здесь EEPROM использовался для задания фабричного номера устройства, тогда как сама программа прошивалась на все устройства одна и та же, и локировалась от чтения.

Через некоторое время (хотя и нечасто) пользователи жаловались, что устройство переставало работать в связке с компьютером - срабатывала "лицензионная" защита (серийный номер устройства распознавался программой компьютера). При проверке выяснилось, что устройство каждый раз забывало свой номер полностью или частично, искажая отдельные цифры номера. Т.е. содержимое EEPROM портилось.

Помучившись так какое-то время, я перенесла серийный номер в прошивку (ПЗУ), а EEPROM перестала использовать. После этого всё стало хорошо, только прошивку приходится модифицировать для каждого устройства, исправляя в бинарном коде место, где находится номер.

С тех пор я не верю в надежность EEPROM и больше ее не использую, несмотря на то, что уже давно перешли на ATtiny2313.
ILYAUL
Как Вам уже намекнул 777777 сброс как у вас устроен. Т.е. RESET контролера. Если нормально , то BOD не нужен
andrey videoplus
Цитата
Конечно удивительно! А сброс как вы на него подаете? Он-то нужен независимо от того, работаете вы с EEPROM или нет.


Элементарно - аппаратно через RESET........................

Проц 100% стартовал после окончания всех переходных процессов при включении питания. В момент записи в EEPROM были исключены провалы по питанию или сброс... после записи данные проверялись - это и вызывало недопонимание. Не включеный BOD - согласен, мог натворить делов именно при выключении питания.
Теперь уверен в одном - не буду в дальнейшем надеяться на внутреннюю EEPROM.
Diko
Цитата(andrey videoplus @ May 23 2011, 13:45) *
Теперь уверен в одном - не буду в дальнейшем надеяться на внутреннюю EEPROM.


ЭЭЭх, внутреннюю EEPROM не использовать, Внутренний вотчдог не юзать, так скоро дойдём до того, что будем использовать микроконтроллеры, как процессоры - ядро на МК, а вся периферия внешняя (ПЗУ, ОЗУ, Порты В/В, ЦАП, АЦП и т.п.)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.