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

 
 
> слетает память у Atmega16, слетает память у Atmega16
messenger
сообщение Sep 27 2013, 18:00
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 361
Регистрация: 23-03-07
Пользователь №: 26 457



Сталкнулся с проблемой у AtMega16.
Два устройств из партии 18 шт. первое где то через год, второе через 3 года перестали правильно работать.
Причина оказалась в том, что изменилось содержание памяти.
В ПО функции записии есть но они используются один раз при выпуске (калибровочные константы) и в процессе эксплуатации выполнить запись в
память нельзя - стоит проверка кодовым словом.
Одна константа стала близкой к 0, втора и вовсе не читается (из ПО).
Из за чего мог произойти сбой? Каие есть способы понять что случилось, если значения параметров хранящихся в памяти всех приборах разные?
ПО разрабатывалось в СodeVision.
Подскажите кто значет. Спаибо.
Go to the top of the page
 
+Quote Post
3 страниц V   1 2 3 >  
Start new topic
Ответов (1 - 34)
kovigor
сообщение Sep 27 2013, 19:00
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(messenger @ Sep 27 2013, 21:00) *
Из за чего мог произойти сбой?

С питанием что-то. Или иголочки в линии питания, или незадемпфирована первичка сетевого трансформатора на 50 Гц, питающего устройство. Еще вариант - висящие в воздухе и в программе оставленные "на произвол судьбы" неиспользуемые выводы JTAG или GPIO (их надо бы настроить на вывод лог. нуля) ...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 27 2013, 19:25
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(messenger @ Sep 27 2013, 22:00) *
Одна константа стала близкой к 0, втора и вовсе не читается (из ПО).

То есто ПО цело, а изменились константы, записанные при производстве?
Go to the top of the page
 
+Quote Post
messenger
сообщение Sep 27 2013, 20:53
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 361
Регистрация: 23-03-07
Пользователь №: 26 457



Цитата(aaarrr @ Sep 27 2013, 23:25) *
То есто ПО цело, а изменились константы, записанные при производстве?

так и есть, ПО рабочее
примечание: константы питались из ПО
питание 5V от USB
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 27 2013, 21:17
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(messenger @ Sep 27 2013, 22:00) *
Одна константа стала близкой к 0, втора и вовсе не читается (из ПО).

Можно пояснить, что значит "не читается"? И что случилось с остальными данными той же страницы?
Go to the top of the page
 
+Quote Post
kovigor
сообщение Sep 27 2013, 21:31
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(messenger @ Sep 27 2013, 23:53) *
питание 5V от USB

Схемку питания покажите ...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 27 2013, 21:35
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(kovigor @ Sep 28 2013, 01:31) *
Схемку питания покажите ...

Питание питанием, да откуда "иголочке" знать, где код, а где константы? Разве что в момент записи последних с питанием что-то было не так, что сказалось спустя время.
Go to the top of the page
 
+Quote Post
kovigor
сообщение Sep 27 2013, 21:51
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(aaarrr @ Sep 28 2013, 00:35) *
да откуда "иголочке" знать, где код, а где константы?

Согласен. Еще бы уточнить, где эти константы записаны - во Flash или в EEPROM. Впоследнем случае из-за ошибки в программе прибор может вместо одной записи константы эту самую запись зациклить, в результате EEPROM портится ...
Go to the top of the page
 
+Quote Post
messenger
сообщение Sep 28 2013, 06:42
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 361
Регистрация: 23-03-07
Пользователь №: 26 457



Цитата(kovigor @ Sep 28 2013, 01:51) *
Согласен. Еще бы уточнить, где эти константы записаны - во Flash или в EEPROM. Впоследнем случае из-за ошибки в программе прибор может вместо одной записи константы эту самую запись зациклить, в результате EEPROM портится ...

Записаны в EEPROM. Один раз при выпуске. Доступ к этой функции пользователю закрыт.
От чего это может произойти "из-за ошибки в программе прибор может вместо одной записи константы эту самую запись зациклить, в результате EEPROM портится"?

Питание прямо от USB. Паралельно 0,1 мкФ.

Сообщение отредактировал messenger - Sep 28 2013, 06:42
Go to the top of the page
 
+Quote Post
Santy
сообщение Sep 28 2013, 07:17
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 49
Регистрация: 30-10-07
Пользователь №: 31 879



Рекомендуется хранить константы во FLASH- памяти, если они не меняются во время работы программы.
Меры предосторожности при работе с EEPROM хорошо написаны например в книге А.В. Евстефеев "Микроконтроллеры AVR семейств Tiny и Mega фирмы Atmel" см. стр 41.

Сообщение отредактировал Santy - Sep 28 2013, 07:18
Go to the top of the page
 
+Quote Post
messenger
сообщение Sep 28 2013, 09:03
Сообщение #11


Местный
***

Группа: Участник
Сообщений: 361
Регистрация: 23-03-07
Пользователь №: 26 457



При включении прибор читает данные из EEPROM во Flash и работает в процессе только с Flash. В процессе работы прибора запись в EEPROM не проводится.

Книгу обязательно посмотрю.
Go to the top of the page
 
+Quote Post
WHALE
сообщение Sep 28 2013, 09:32
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



Цитата(messenger @ Sep 28 2013, 13:03) *
При включении прибор читает данные из EEPROM во Flash и работает в процессе только с Flash. В процессе работы прибора запись в EEPROM не проводится.


читает данные из EEPROM во Flash-это навеное очепятка,а вы имели в виду вместо Flash ОЗУ?


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
ArtemKAD
сообщение Sep 28 2013, 10:22
Сообщение #13


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

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



Цитата(messenger @ Sep 27 2013, 23:53) *
так и есть, ПО рабочее
примечание: константы питались из ПО

Вот с этого и надо было начинать...


Цитата
В процессе работы прибора запись в EEPROM не проводится.

А когда и чем производится? В программе есть хоть одна процедура записи в eeprom ?
Go to the top of the page
 
+Quote Post
zombi
сообщение Sep 28 2013, 10:25
Сообщение #14


Гуру
******

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



Цитата(messenger @ Sep 28 2013, 09:42) *
Записаны в EEPROM. Один раз при выпуске. Доступ к этой функции пользователю закрыт.

Каким образом закрыт? А может кто случайно (нарочно) открыл
Go to the top of the page
 
+Quote Post
ArtemKAD
сообщение Sep 28 2013, 10:25
Сообщение #15


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

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



Цитата
Доступ к этой функции пользователю закрыт.

Это как? Процедура в программе есть или ее нет? Как определяется "Один раз при выпуске."
Go to the top of the page
 
+Quote Post
Santy
сообщение Sep 28 2013, 10:52
Сообщение #16


Участник
*

Группа: Участник
Сообщений: 49
Регистрация: 30-10-07
Пользователь №: 31 879



Цитата(ArtemKAD @ Sep 28 2013, 13:25) *
Это как? Процедура в программе есть или ее нет? Как определяется "Один раз при выпуске."


Может быть подпрограмма для записи в EEPROM, которую можно вызвать только 1 раз.
Go to the top of the page
 
+Quote Post
ArtemKAD
сообщение Sep 28 2013, 12:06
Сообщение #17


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

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



Для того, что-бы "можно вызвать только 1 раз" нужен энергонезависимый признак того, что этот 1 раз уже был. Вопрос и состоит в том, что это за признак?
Go to the top of the page
 
+Quote Post
Santy
сообщение Sep 28 2013, 13:15
Сообщение #18


Участник
*

Группа: Участник
Сообщений: 49
Регистрация: 30-10-07
Пользователь №: 31 879



Цитата(ArtemKAD @ Sep 28 2013, 15:06) *
Для того, что-бы "можно вызвать только 1 раз" нужен энергонезависимый признак того, что этот 1 раз уже был. Вопрос и состоит в том, что это за признак?


Например, число читаемое из EEPROM.
Go to the top of the page
 
+Quote Post
kovigor
сообщение Sep 28 2013, 13:16
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(Santy @ Sep 28 2013, 13:52) *
Может быть подпрограмма для записи в EEPROM, которую можно вызвать только 1 раз.

Раз такая подпрограмма есть, значит ее можно вызвать. Сценарий: забыли включить (или намеренно не включили) супервизор. Тогда при снижении питания программа вполне может сбиться, и не исключено, что управление получит эта самая разрушительная подпрограмма. Тот же эффект можно получить, если в программе переполняется стек. Раз в год, как говорится, и палка стреляет sm.gif
Go to the top of the page
 
+Quote Post
messenger
сообщение Sep 28 2013, 13:16
Сообщение #20


Местный
***

Группа: Участник
Сообщений: 361
Регистрация: 23-03-07
Пользователь №: 26 457



В программе есть код записи данных в память:
команда на запись с ПК;
устройство получает данные с ПК;
проверяем "кодовое слово"
если оно совпало, перезаписывем полученные данные в память.
Думаете есть вероятность того, что при подаче вполне определенных команд появилоась помеха начинающаяся командой и заканчивающаяся кодовым словом? Наверно есть, но маленькая.


Go to the top of the page
 
+Quote Post
kovigor
сообщение Sep 28 2013, 13:32
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(messenger @ Sep 28 2013, 16:16) *
Думаете есть вероятность того, что при подаче вполне определенных команд появилоась помеха начинающаяся командой и заканчивающаяся кодовым словом?

Есть, безусловно. Если в программу заложена подобная "бомба замедленного действия", то она, как правило, взорвется, рано или поздно. CRC всей командной посылки и блока данных, включая кодовое слово, как я понял, не проверяется ?
Go to the top of the page
 
+Quote Post
krux
сообщение Sep 28 2013, 13:41
Сообщение #22


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

Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596



какой-нибудь M103С fuse?


--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post
ArtemKAD
сообщение Sep 28 2013, 15:53
Сообщение #23


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

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



Цитата
если оно совпало, перезаписывем полученные данные в память.
Думаете есть вероятность того, что при подаче вполне определенных команд появилоась помеха начинающаяся командой и заканчивающаяся кодовым словом? Наверно есть, но маленькая.

Достаточно отключенного BOR-а и вероятность начала программы после "если оно совпало" будет далека от нулевой.
Go to the top of the page
 
+Quote Post
messenger
сообщение Sep 28 2013, 20:42
Сообщение #24


Местный
***

Группа: Участник
Сообщений: 361
Регистрация: 23-03-07
Пользователь №: 26 457



Какая бомба? Обычная программа. Без фанатизма.

to ArtemKAD - подскажите, что такое BOR-а? если сброс по снижению питания, то он установлен на 4V.

Сообщение отредактировал messenger - Sep 28 2013, 20:45
Go to the top of the page
 
+Quote Post
kovigor
сообщение Sep 28 2013, 21:00
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(messenger @ Sep 28 2013, 23:42) *
Какая бомба? Обычная программа. Без фанатизма.

Вы про защиту команд и данных с помощью CRC так и не ответили. Есть она ? Если нет, то банальный "мусор", принимаемый при переключении разъемов или плохом контакте в них может дать самые неожиданные и загадочные эффекты ...
Go to the top of the page
 
+Quote Post
ArtemKAD
сообщение Sep 28 2013, 21:38
Сообщение #26


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

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



Brown-Out Reset
Go to the top of the page
 
+Quote Post
messenger
сообщение Sep 29 2013, 09:51
Сообщение #27


Местный
***

Группа: Участник
Сообщений: 361
Регистрация: 23-03-07
Пользователь №: 26 457



Цитата(kovigor @ Sep 29 2013, 01:00) *
Вы про защиту команд и данных с помощью CRC так и не ответили. Есть она ? Если нет, то банальный "мусор", принимаемый при переключении разъемов или плохом контакте в них может дать самые неожиданные и загадочные эффекты ...

такое кодирование не делаю
Go to the top of the page
 
+Quote Post
kovigor
сообщение Sep 29 2013, 12:04
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(messenger @ Sep 29 2013, 12:51) *
такое кодирование не делаю

Тогда все ясно ...
Go to the top of the page
 
+Quote Post
ARV
сообщение Sep 30 2013, 04:38
Сообщение #29


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

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



Цитата(kovigor @ Sep 29 2013, 16:04) *
Тогда все ясно ...

да ничего на самом деле не ясно. в практике с AT89S53 у меня был пренеприятный случай, когда в процессе эксплуатации с периодичностью примерно раз в 4-6 месяцев в EEPROM слетала 1 ячейка - строго определенная, и слетала всегда в строго определенное значение. Процедур записи в эту ячейку в коде не было вообще - EEPROM писалась 1 раз программатором, в коде только чтение.

никакие аппаратные меры не помогали. после долгих мытарств пришлось уйти на AVR и для страховки писать все настроечные константы во FLASH - помогло.

в случае топикстартера могу порекомендовать 2 варианта борьбы с бедой:


1. хранить в EEPROM 3 копии калибровочных констант, при старте программы считывать по мажоритарному принципу.

2. поступить так, как сделал я: калибровочные константы писать только программатором во FLASH, исключив из кода принципиальную возможность записи.



--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
Harbinger
сообщение Sep 30 2013, 05:39
Сообщение #30


старший лаборант
******

Группа: Свой
Сообщений: 2 702
Регистрация: 30-09-05
Из: ЮЗЖД
Пользователь №: 9 097



Писать калибровки во Flash без возможности изменения не всегда получится - они могут настраиваться в процессе регулировки изделия.
Поступал следующим образом. В EEPROM хранится несколько копий массива калибровочных параметров, защищённых CRC. При старте проверяются все копии. Если CRC в порядке, калибровки считываются в ОЗУ и переходим в штатный режим работы. В случае повреждения какой-либо копии массива она восстанавливается из неповреждённой. Если же совсем "всё пропало" - EEPROM переписывается из FLASH "среднепотолочными" значениями и выставляется признак, что устройство не настроено. Автоматически получается инициализация EEPROM при первом запуске.


--------------------
Китайская комплектация - европейское качество! ;)
Go to the top of the page
 
+Quote Post
Santy
сообщение Sep 30 2013, 06:50
Сообщение #31


Участник
*

Группа: Участник
Сообщений: 49
Регистрация: 30-10-07
Пользователь №: 31 879



Цитата(Harbinger @ Sep 30 2013, 07:39) *
Писать калибровки во Flash без возможности изменения не всегда получится - они могут настраиваться в процессе регулировки изделия.
Поступал следующим образом. В EEPROM хранится несколько копий массива калибровочных параметров, защищённых CRC. При старте проверяются все копии. Если CRC в порядке, калибровки считываются в ОЗУ и переходим в штатный режим работы. В случае повреждения какой-либо копии массива она восстанавливается из неповреждённой. Если же совсем "всё пропало" - EEPROM переписывается из FLASH "среднепотолочными" значениями и выставляется признак, что устройство не настроено. Автоматически получается инициализация EEPROM при первом запуске.

Как часто при этом появляется признак, что устройство не настроено?
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Sep 30 2013, 07:44
Сообщение #32


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(krux @ Sep 28 2013, 17:41) *
какой-нибудь M103С fuse?
Не, это из оперы mega128, а тут mega16...

Я храню 5 копий таких "сильно важных параметров" и, при старте, применяю к ним медианную фильтрацию.
Потом сравниваю результат со всеми пятью записанными и, по мере надобности, восстанавливаю битые байты.
Плюс такого метода: не нужно crc и надёжнее чем 3 копииsm.gif
Минус: 5 копий съедают больше памяти чем 2-3 копии, нужна процедура медианной фильтрации для каждого типа хранимых данных (у меня поэтому сделано всё однотипно).


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Harbinger
сообщение Sep 30 2013, 09:31
Сообщение #33


старший лаборант
******

Группа: Свой
Сообщений: 2 702
Регистрация: 30-09-05
Из: ЮЗЖД
Пользователь №: 9 097



Цитата(Santy @ Sep 30 2013, 09:50) *
Как часто при этом появляется признак, что устройство не настроено?
Ни разу не удалось отловить на пятизначных тиражах.
Но МК там вовсе не AVR были. В одном случае (давнем) - AT89S8252(3), резервирование 5-кратное, в другом - из серии LPC900 (NXP), в качестве EEPROM использовался последний сектор FLASH, резервирование 3-кратное.


--------------------
Китайская комплектация - европейское качество! ;)
Go to the top of the page
 
+Quote Post
ArtemKAD
сообщение Sep 30 2013, 09:34
Сообщение #34


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

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



Цитата
Автоматически получается инициализация EEPROM при первом запуске.

Делаю примерно аналогично. Причем по большей части по вот этой причине.
PS. Слетаний EEPROM у AVR-ок уже больше 10 лет не наблюдаю. Ни на одном устройстве из тех десятков тысяч которые были выпущены.
Go to the top of the page
 
+Quote Post
messenger
сообщение Oct 1 2013, 06:46
Сообщение #35


Местный
***

Группа: Участник
Сообщений: 361
Регистрация: 23-03-07
Пользователь №: 26 457



to ARV and Harbinger
Спасибо за дельные советы! Как это я сам не догадался)
посмотрел код) у меня память использована на 90%

Сообщение отредактировал messenger - Oct 1 2013, 20:22
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 22:36
Рейтинг@Mail.ru


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