реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> EEPROM ATtiny2313, потеря данных через некоторое время
andrey videoplus
сообщение May 20 2011, 09:39
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 55
Регистрация: 24-06-10
Из: Киев
Пользователь №: 58 123



Хорошего времени суток.
Прошу совета, подсказки и т.д. знающих людей.
Было серийно выпускаемое устройство еще на 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 - результат тот же.
Go to the top of the page
 
+Quote Post
Sergey_Aleksandr...
сообщение May 20 2011, 10:04
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 168
Регистрация: 8-10-08
Из: РФ Смоленск
Пользователь №: 40 764



Дважды наступал на грабли с порчей EEPROM. Дважды грешил на аппаратные баги. В обоих случаях забывал вкдючить BOD (встроенный супервизор). Он у Вас используется?
UPD Ещё как вариант, после кажодй операции с EEPROM (запись или чтение) записывать в регистр адреса EEAR число, чтобы регистр указывал на неиспользуемую ячейку памяти. Если что и случиться, то только с ней. Ни разу таким способом не требовалось пользоваться, т.к. , повторюсь, при включенном BOD проблем с EEPROM ни разу не возникало.

Сообщение отредактировал Sergey_Aleksandrovi4 - May 20 2011, 10:08
Go to the top of the page
 
+Quote Post
rx3apf
сообщение May 20 2011, 10:19
Сообщение #3


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Забавно, этой проблеме то лет в обед, я думал, tiny2313 уже от нее избавились - а вот нет, похоже... На 90S2313 это стабильно воспроизводилось, когда напряжение питания при выключении плавно снижалось (большая емкость висела). BOD у них не было, супервизор у меня не стоял, и вот такая зараза. Обошли, как и было сказано, записью в адрес EEPROM неиспользуемой ячейки (00).
Go to the top of the page
 
+Quote Post
andrey videoplus
сообщение May 20 2011, 10:41
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 55
Регистрация: 24-06-10
Из: Киев
Пользователь №: 58 123



Блин, а себе все пальцы искусал. Думаю что за...... >:(
BOD всегда отключал, никогда не использовал - видно зря!!! Ничего, будет наука, спасибо.
А такое только в tiny проявляется или в других моделях тоже встречалось?
Go to the top of the page
 
+Quote Post
zombi
сообщение May 20 2011, 11:06
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(andrey videoplus @ May 20 2011, 13:41) *
BOD всегда отключал, никогда не использовал - видно зря!!! Ничего, будет наука, спасибо.

Т.е. у Вас и внутренний BOD отключён и внешний отсутствует?!
Go to the top of the page
 
+Quote Post
azziz
сообщение May 20 2011, 11:22
Сообщение #6





Группа: Новичок
Сообщений: 6
Регистрация: 11-11-10
Из: Украина
Пользователь №: 60 803



В других моделях аналогичная ситуация (mega16, mega88). Как уже было сказано выше, решалась включением супервизора.
Go to the top of the page
 
+Quote Post
andrey videoplus
сообщение May 20 2011, 11:45
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 55
Регистрация: 24-06-10
Из: Киев
Пользователь №: 58 123



Цитата(zombi @ May 20 2011, 13:06) *
Т.е. у Вас и внутренний BOD отключён и внешний отсутствует?!


Наверно удивительно?? Но как уже говорил со встроенной EEPROM дело иметь не приходилось. Все устройства, которые ранее приходилось проектировать - выполняли несложные задачи, имеют бесперебойное питания и выключаются раз в месяц для профилактики. Потому BOD был до фонаря.
Go to the top of the page
 
+Quote Post
777777
сообщение May 21 2011, 15:31
Сообщение #8


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(andrey videoplus @ May 20 2011, 15:45) *
Цитата
Т.е. у Вас и внутренний BOD отключён и внешний отсутствует?!
Наверно удивительно??

Конечно удивительно! А сброс как вы на него подаете? Он-то нужен независимо от того, работаете вы с EEPROM или нет.
Go to the top of the page
 
+Quote Post
ArtemKAD
сообщение May 21 2011, 21:57
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 508
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364



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

BOD никогда не до фонаря. Он может только иногда мешать для крайне мало потребляющих устройств. В остальных случаях это крайне полезная фича позволяющая устройству предсказуемо работать при снижении напряжения. Для EEPROM он обязателен т.к. надо гарантировать, что энергии на запись после команды таки хватит. До этого вам повезло т.к. внешняя EEPROM ниже нижней границы питания (2,7В для 24С) просто не работала.
Go to the top of the page
 
+Quote Post
Xenia
сообщение May 21 2011, 22:31
Сообщение #10


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(rx3apf @ May 20 2011, 14:19) *
Забавно, этой проблеме то лет в обед, я думал, tiny2313 уже от нее избавились - а вот нет, похоже... На 90S2313 это стабильно воспроизводилось, когда напряжение питания при выключении плавно снижалось (большая емкость висела).

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

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

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

С тех пор я не верю в надежность EEPROM и больше ее не использую, несмотря на то, что уже давно перешли на ATtiny2313.
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение May 22 2011, 06:03
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Как Вам уже намекнул 777777 сброс как у вас устроен. Т.е. RESET контролера. Если нормально , то BOD не нужен


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
andrey videoplus
сообщение May 23 2011, 10:45
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 55
Регистрация: 24-06-10
Из: Киев
Пользователь №: 58 123



Цитата
Конечно удивительно! А сброс как вы на него подаете? Он-то нужен независимо от того, работаете вы с EEPROM или нет.


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

Проц 100% стартовал после окончания всех переходных процессов при включении питания. В момент записи в EEPROM были исключены провалы по питанию или сброс... после записи данные проверялись - это и вызывало недопонимание. Не включеный BOD - согласен, мог натворить делов именно при выключении питания.
Теперь уверен в одном - не буду в дальнейшем надеяться на внутреннюю EEPROM.
Go to the top of the page
 
+Quote Post
Diko
сообщение May 24 2011, 09:43
Сообщение #13


Частый гость
**

Группа: Свой
Сообщений: 114
Регистрация: 14-08-07
Из: Харьков, Украина
Пользователь №: 29 773



Цитата(andrey videoplus @ May 23 2011, 13:45) *
Теперь уверен в одном - не буду в дальнейшем надеяться на внутреннюю EEPROM.


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


--------------------
Жизнь сложна и не предсказуема, незачем её усложнять.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 06:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.01473 секунд с 7
ELECTRONIX ©2004-2016