|
|
  |
EEPROM ATtiny2313, потеря данных через некоторое время |
|
|
|
May 20 2011, 09:39
|

Участник

Группа: Участник
Сообщений: 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 - результат тот же.
|
|
|
|
|
May 20 2011, 10:19
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
Забавно, этой проблеме то лет в обед, я думал, tiny2313 уже от нее избавились - а вот нет, похоже... На 90S2313 это стабильно воспроизводилось, когда напряжение питания при выключении плавно снижалось (большая емкость висела). BOD у них не было, супервизор у меня не стоял, и вот такая зараза. Обошли, как и было сказано, записью в адрес EEPROM неиспользуемой ячейки (00).
|
|
|
|
|
May 20 2011, 11:22
|
Группа: Новичок
Сообщений: 6
Регистрация: 11-11-10
Из: Украина
Пользователь №: 60 803

|
В других моделях аналогичная ситуация (mega16, mega88). Как уже было сказано выше, решалась включением супервизора.
|
|
|
|
|
May 20 2011, 11:45
|

Участник

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

|
Цитата(zombi @ May 20 2011, 13:06)  Т.е. у Вас и внутренний BOD отключён и внешний отсутствует?! Наверно удивительно?? Но как уже говорил со встроенной EEPROM дело иметь не приходилось. Все устройства, которые ранее приходилось проектировать - выполняли несложные задачи, имеют бесперебойное питания и выключаются раз в месяц для профилактики. Потому BOD был до фонаря.
|
|
|
|
|
May 21 2011, 22:31
|

Гуру
     
Группа: Модератор 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.
|
|
|
|
|
May 23 2011, 10:45
|

Участник

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

|
Цитата Конечно удивительно! А сброс как вы на него подаете? Он-то нужен независимо от того, работаете вы с EEPROM или нет. Элементарно - аппаратно через RESET........................ Проц 100% стартовал после окончания всех переходных процессов при включении питания. В момент записи в EEPROM были исключены провалы по питанию или сброс... после записи данные проверялись - это и вызывало недопонимание. Не включеный BOD - согласен, мог натворить делов именно при выключении питания. Теперь уверен в одном - не буду в дальнейшем надеяться на внутреннюю EEPROM.
|
|
|
|
|
May 24 2011, 09:43
|

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

|
Цитата(andrey videoplus @ May 23 2011, 13:45)  Теперь уверен в одном - не буду в дальнейшем надеяться на внутреннюю EEPROM. ЭЭЭх, внутреннюю EEPROM не использовать, Внутренний вотчдог не юзать, так скоро дойдём до того, что будем использовать микроконтроллеры, как процессоры - ядро на МК, а вся периферия внешняя (ПЗУ, ОЗУ, Порты В/В, ЦАП, АЦП и т.п.)
--------------------
Жизнь сложна и не предсказуема, незачем её усложнять.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|