|
Дивайс на mega162., Сбои в работе. Нужен совет. |
|
|
|
Jul 23 2010, 06:01
|
Участник

Группа: Свой
Сообщений: 58
Регистрация: 1-08-05
Пользователь №: 7 242

|
Доброе время суток, уважаемые коллеги.
Есть девайс на меге162+ОЗУ 32кБ. Плата двухслойная. Длина линий шины адреса/данных - 40-50 мм. Разводка неплохая, с обеих сторон свободное место залито полигонами. Тактируется кварцем 16 МГц. Питание 5В подается через тонкий 7 см шлейфик вместе с SPI интерфейсом от головного устройства. Питание на головном устройстве сделано на MC33063.
Проблема такая: иногда на некоторых редких объектах происходит зависание меги162. Также иногда на ней же портятся данные во внутренней ЕЕПРОМ и памяти программ. Встроенные BOD и WDT задействованы. Внешних нет.
Я думаю, что память программ может портиться из за того, что программа перепрыгивает непостижимым образом в область загрузчика, где есть ф-ции работы с SPM. Однако ж там перед программирование проверяются CRC и т.п. Но не смотря на это данные портятся. Иногда даже загрузчик портит сам себя. Грешу на не очень удачную разводку линий тактирования от кварца: длина проводников 2-3 см, с переходом на нижний слой и обратно, кондеры расположены рядом с кварцем - довольно далеко от проца.
Из решений пока только приходит работа от внутреннего RC-генератора... Дело осложняется тем, что в условиях лаборатории этих проблем выявить не удалось.. как только не гоняли. Испытания в лаборатории импульсных помех тоже результата не дали. Поэтому действовать приходится практически наугад.
Может, кто то выскажет свои соображения, пути решения?
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 18)
|
Jul 23 2010, 06:41
|

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

|
Цитата(eastwind @ Jul 23 2010, 10:01)  Может, кто то выскажет свои соображения, пути решения? Теоретически эту проблему никто вам не решит. Нужна "отладочная печать" - махание ножками в ключевых местах программы и наблюдение за ними осциллографом. При зависании можно оценить где выполнялась программа, а затем постепенно суживать место поиска. Это может происходить не только при аппаратном сбое, но и например при выходе из main, при возникновении прерывания, которое в программе не обрабатывается. Правда, я не совсем понимаю, как может зависать программа если в ней работает WDT.
Сообщение отредактировал 777777 - Jul 23 2010, 06:41
|
|
|
|
|
Jul 23 2010, 07:45
|
Участник

Группа: Свой
Сообщений: 58
Регистрация: 1-08-05
Пользователь №: 7 242

|
Цитата(777777 @ Jul 23 2010, 12:41)  При зависании можно оценить где выполнялась программа, а затем постепенно суживать место поиска. Это может происходить не только при аппаратном сбое, но и например при выходе из main, при возникновении прерывания, которое в программе не обрабатывается. Правда, я не совсем понимаю, как может зависать программа если в ней работает WDT. Нет необрабатываемых прерываний. Программа рабочая. На многих объектах модули стоят месяцами и проблем нет. Ошибки на "проблемных" объектах возникают совершенно хаотично и систематизировать их не получается. Поэтому и начал думать в сторону питания/тактирования. Цитата(Палыч @ Jul 23 2010, 13:21)  Возможно - проблемы с питанием. Встречалась ситуация когда при включении питания устройства слетала прошивка. Оказалось, что источник питания при своём включении давал короткий но приличный по амплитуде импульс повышенного напряжения. Flash этого очень не любит - при напряжении питания выше 6,2V (по памяти, может быть - 6,3) прошивка и EEPROM слетают начисто (стираются), если импульс короткий или меньшей амплитуды - стираются отдельные куски или даже биты... Как решали проблему?
|
|
|
|
|
Jul 23 2010, 08:34
|
Местный
  
Группа: Свой
Сообщений: 230
Регистрация: 7-04-08
Из: Украина, Запорожье
Пользователь №: 36 541

|
Цитата(eastwind @ Jul 23 2010, 10:45)  Нет необрабатываемых прерываний. Программа рабочая. На многих объектах модули стоят месяцами и проблем нет. Ошибки на "проблемных" объектах возникают совершенно хаотично и систематизировать их не получается. Поэтому и начал думать в сторону питания/тактирования.
Как решали проблему? Как дела с фильтрующими кондерами по питанию ? Какое напряжения питания ? как вариант сменить бутлоадер или вообще от него отказаться.
|
|
|
|
|
Jul 23 2010, 09:43
|
Участник

Группа: Свой
Сообщений: 58
Регистрация: 1-08-05
Пользователь №: 7 242

|
Цитата(777777 @ Jul 23 2010, 14:27)  Я имел в виду, что не используемые прерывания могли оказаться каким-то образом разрешенными. Я понял, что вы хотели сказать. Я и имел ввиду, что разрешенных необрабатываемых прерываний нет. Цитата(Клим @ Jul 23 2010, 14:34)  Как дела с фильтрующими кондерами по питанию ? Какое напряжения питания ? как вариант сменить бутлоадер или вообще от него отказаться. Фильрующие кондеры стоят на всех трех ногах контроллера. Очень близко к выводам. Напряжение питания указал в первом посте. 5В. Пробовали отказаться от бутлоадера. Проблема перетирания флэши пропала, но все остальные симптомы остались: ЕЕПРОМ портится, проц виснет, улетает непонятно куда.
|
|
|
|
|
Jul 23 2010, 18:49
|
Частый гость
 
Группа: Участник
Сообщений: 96
Регистрация: 27-06-08
Из: Москва
Пользователь №: 38 581

|
Попробуйте поставить внешний супервизор, отключив встроенный, генератор при этом оставить как есть. Если писали на ассемблере и включен WDT создайте в самом конце программы что то типа: Код nop nop ;конец не используемой области error: nop jmp error
Сообщение отредактировал rtfcnf - Jul 23 2010, 18:58
|
|
|
|
|
Jul 24 2010, 14:32
|
Участник

Группа: Свой
Сообщений: 58
Регистрация: 1-08-05
Пользователь №: 7 242

|
Цитата(zombi @ Jul 23 2010, 21:51)  А есть электролитик по питанию? сразу после "тонкий 7 см шлейфик" ? нет, после шлейфа стоит тантал. электролита нет. Цитата(andrewkrot @ Jul 23 2010, 22:55)  А чем занимается Ваша плата? На ней нет реле или иных реактивных элементов? нету ничего такого
|
|
|
|
|
Jul 24 2010, 20:31
|

Частый гость
 
Группа: Свой
Сообщений: 179
Регистрация: 1-10-07
Из: НЧ
Пользователь №: 30 966

|
Цитата(eastwind @ Jul 23 2010, 13:43)  ...ЕЕПРОМ портится, проц виснет, улетает непонятно куда. У коллеги слетала ЕЕПРОМ (первые несколько адресов) когда он начинал "счелкать" питанием платы (даж сделал девайс для этого  ) - решилось все включением внутреннего BODa..ну и кондеры "побольше", вроде, поставил... Простите, пропустил про уже включенный BOD
|
|
|
|
|
Jul 25 2010, 15:21
|
Частый гость
 
Группа: Участник
Сообщений: 108
Регистрация: 6-02-09
Из: Новочеркасск
Пользователь №: 44 469

|
Цитата(eastwind @ Jul 24 2010, 18:32)  нет, после шлейфа стоит тантал. электролита нет. Тантал тоже электролит. Аки и любой другой полярный конденсатор.
|
|
|
|
|
Jul 30 2010, 01:37
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Очень сомневаюсь, что дело в МК и тем более тактировании или разводке...
Программа в MK наверняка использует ICALL / IJMP, данные для которых берутся из внешней памяти, а внешняя память неподконтрольна BOD'у, отсюда и выполнение случайного кода...
Риторический вопрос: Сохраняет ли достоверность и работоспособность внешняя память и защелка во всем диапазоне напряжений от Vbod и до номинального VCC?
Советы: 1. Поместить стек и по возможности все критические структуры данных, содержащие адреса callback'ов, во внутреннюю память МК. 2. Поставить порог Vbod самый большой из возможных (4.3V). 3. Экранировать плату на объекте (использовать металлические корпуса). 4. Для защиты секции бутлоадера использовать соответвующую комбинацию BLB LOCK битов, которая просто непозволит туда писать. (это работает 100%). 5. Для защиты eeprom пользовать его исключительно как storage device, применить дублирование и CRC при записи, и восстановление битой копии при чтении.
PS: Из своей практики, имел дело с серийным устройством m162 +32kb с совершенно дебильной разводкой, так вот с примененными выше советами - из пары сотен таких девайсов (а работают они на подстанциях 10-36КВ), ни один не слетел за последние 5 лет. Бутлоадер в них есть, если BOD отключить флеш слетает моментально - достаточно пару раз выключить и включить.
|
|
|
|
|
Aug 1 2010, 07:47
|
Участник

Группа: Свой
Сообщений: 58
Регистрация: 1-08-05
Пользователь №: 7 242

|
1. Поставил на проблемном объекте внешние супервизоры на 4,6В, отключил встроенный. 2. Поставил на разъем питания стабилитрон на 5.1 В. 3. Увеличил емкости конденсаторов на плате. 4. Данные в ЕЕПРОМ сделал с резервированием. 5. RSTACK и CSTACK и так были расположены во внутренней памяти контроллера.
Ждем... Обязательно сообщу результат на форуме. Большое спасибо всем, кто участвует в обсуждении.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|