Що може призвести до несподіваного скидання мікроконтролера?


26

Однією з особливо дратівливих різновидів помилок у контрольованій мікропроцесором системі є несподіване скидання мікропроцесора. Важливим інструментом налагодження подібної проблеми є перелік можливих причин. Що може призвести до несподіваного скидання мікроконтролера?


1
Деякі з відповідей тут можуть бути корисними: electronics.stackexchange.com/questions/30430/… Який мікроконтролер ви використовуєте?
Джон Л

Зазвичай я використовую dsPIC. Але я зараз не намагаюся налагодити щось особливе, просто складаю довідковий список потенційних проблем.
Стівен Коллінгз

2
це питання домашнього завдання?
old_timer

1
@dwelch Можливо, для когось десь, але не для мене чи когось із моїх учнів.
Стівен Коллінгз

1
@Vorac такий обов'язковий факт, що Atmel не може взяти на себе зобов’язання зберігати URL-адресу надійною.
Каз

Відповіді:


51

На чіпах PIC та dsPIC я помітив наступні причини несподіваного скидання.

Обладнання:

  • Скиньте штифтовий привід низько або плаваючий. Перевірте спочатку очевидні речі!
  • ESD-з'єднання в штифт скидання. Я бачив, як це відбувається, коли на одному й тому самому столі ввімкнеться абсолютно непов'язане обладнання. Переконайтесь, що на контактному штифті є достатня ємність, можливо, 1 фунт.
  • ESD з'єднання з іншими штифтами процесора. Зовнішні зонди, зокрема, можуть діяти як антени, парувати шум у мікросхемі та спричиняти непарні скиди. Я чув повідомлення про скидання кодів "недійсного коду".
  • Погане з'єднання / переривчастий міст. Можливо, втрачається або короткочасний силовий редуктор, або на процесорі, або десь ще на платі.
  • Збіг / шум силової рейки. Може бути викликано будь-якою кількістю зовнішніх проблем, включаючи пошкоджений регулятор або занурення в подачі вище. Переконайтесь, що шини живлення процесора стабільні. Може знадобитися дещо більше кришки десь, можливо, роз'єднайте кришку прямо на процесор.
  • Деякі мікроконтролери мають штифт Vcap, який не повинен бути підключений до VDD і повинен мати свій загальний конденсатор. Якщо неправильно підключити цей контакт, це може мати непередбачувані результати.
  • Повернення аналогового входу мінус певний ліміт викликає скидання, яке повідомляє в RCON як «коричневе». Те саме може стосуватися цифрових входів.
  • Дуже високий ДВ / дт в сусідньому перетворювачі потужності може спричинити скидання коричневого кольору. (Див. Це питання .) Я бачив це у двох випадках, і в одному я зміг відстежити це до ємнісного зв'язку. IGBT перемикав 100-200 ампер, і при відключенні деяких ланцюгів зворотного зв’язку було бачити кілька мікросекунд шуму, переходячи від 2 В до 8 В на процесорі 3,3 В. Збільшення кришки фільтра на цій рейці зворотного зв'язку змусило зупинити скидання. Можна було б уявити, що додавання dv / dt фільтра через транзистор могло мати подібний ефект.

Програмне забезпечення:

  • Сторожовий таймер. Переконайтеся, що таймер сторожового догляду очищається досить часто, особливо у галузях вашого коду, які можуть зайняти багато часу, як пише EEPROM. Перевірте це, відключивши сторожового собаку, щоб побачити, чи проблема усувається.
  • Ділимо на нуль. Якщо ви виконуєте в коді будь-яку операцію ділення, переконайтеся, що дільник ніколи не може дорівнювати нулю. Додайте перевірку меж перед поділом. Не забувайте, що це стосується і модульних операцій .
  • Переповнення стека. Занадто багато вкладених викликів функцій можуть призвести до втрати динамічною пам'яттю для стека, що може призвести до збоїв у незвичних точках виконання коду.
  • Стек під потоком. Якщо ви програмуєте в асемблері, ви можете випадково виконати більше RETURN, ніж ви виконали CALL.
  • Неіснуючий режим переривання. Якщо перерва ввімкнена, але не визначено процедуру переривання, процесор може скинутись.
  • Неіснуюча пастка. Схожий на процедуру переривання, але досить різний, я перераховую його окремо. Я бачив два окремі проекти, що використовують dsPIC 30F4013, які скидаються випадковим чином, а причину відслідковували до пастки, яку називали, але не визначали. Звичайно, тепер у вас виникає питання, чому в першу чергу викликається пастка, яка може бути будь-якою кількістю речей, включаючи силіконову помилку. Але визначення всіх оброблювачів пасток повинно бути, мабуть, хорошим початковим кроком у діагностиці незрозумілих скидів.
  • Відмова вказівника функції. Якщо вказівник функції не вказує на дійсне місце, перенаправлення вказівника та виклик функції, на яку вказує, може викликати скидання. Одна забавна причина цього полягала в тому, що я ініціалізував структуру з послідовними значеннями NULL (для вказівника функції) та -1 (для int). Кома була надрукована, тому вказівник функції фактично ініціалізувався на NULL-1. Тому не вважайте, що лише тому, що це CONST, воно повинно містити дійсне значення!
  • Недійсний / негативний індекс масиву. Переконайтеся, що ви перевіряєте межі всіх індексів масиву, як верхніх, так і нижнього, якщо це можливо.
  • Створення масиву даних у пам'яті програми, що перевищує найбільший розділ пам'яті програми. Це може навіть не призвести до помилки компіляції.
  • Передача адреси структури на вказівник на інший тип, перенаправлення цього вказівника та використання вказівника dereferenced як LVALUE в операторі може спричинити збій. Дивіться це питання . Імовірно, це стосується і інших невизначених форм поведінки.

На деяких dsPIC регістр RCON зберігає біти, що вказують на причину скидання. Це може бути дуже корисно при налагодженні.


1
@reset pin: плаваючий штифт для скидання відомий помилковими скидами. Завжди прив'язуйте його до Vcc через резистор.
jippie

4
Це неймовірно вичерпний список. Я вважаю, що в моєму досвіді роботи з АРВ, що більшість, якщо не всі однакові ситуації, спричинить несподівані результати або зміни.
HL-SDK

4
Дозвольте додати ще один для програмування мови Assembler - Незрівняний реєстр PUSH та POP зі стека.
Майкл Карась

2
Ще пару: під обладнання, скидання коричневого режиму. Відповідно до програмного забезпечення, інструкція щодо скидання програмного забезпечення. Обидва вони доступні на декількох мікроконтролерах.
tcrosley

2
Ще один список: мобільні телефони, розміщені біля кабелю, можуть викликати напрочуд значну кількість напруги на слабко провідних лініях. Якщо у вас є лінія скидання, що проходить через кабель (наприклад, одна плата може змусити скинути іншу), мобільний телефон біля кабелю може викликати скидання, якщо, наприклад, він отримує дзвінок.
supercat

7

Штир RESET повинен бути належним чином керований ланцюгом скидання, який контролює над / під напругою та створює досить довгий сигнал скидання. Зважаючи на це, мій досвід неконтрольованого скидання обладнання виходить:

  • Перехресне повідомлення від перемикання ліній на контактний / лінійний RESET (зробити їх короткими)
  • Зсуви / петля заземлення, викликані вмиканням / вимкненням зовнішнього сильного струму
  • Спід напруги не відфільтрований джерелом живлення і занадто короткий, щоб активувати правильний RESET
  • Перемикання зовнішніх навантажень мікроконтролером, що спричиняє вищезазначені проблеми (головним чином на індуктивних навантаженнях, таких як включення / вимкнення двигуна, реле або стара лампа (струм струму)
  • Спід напруги / струму на будь-якому із штифтів мікроконтролера (найгірше - це генератор) може викликати зворотний струм і може перемикати внутрішній регістр (такий же, як сплески напруги на лінії живлення). Загалом, під час взаємодії з певним виробничим середовищем потрібно дотримуватися обережності (детальніше див.: Http://www.ichaus.biz/wp1_mcu_interface ). Потрібно враховувати зміщення рівня на вводах вводу, вхідне фільтрування та виходи з м'яким перемиканням. Очищення ліній живлення є першочерговим завданням на апаратній стороні. Потім RESET та генератори шпильок, потім IO-лінії. -мм

1
Наземні зрушення мене просто покусали. У моєму випадку у мене була певна частина моєї загальної сітки, що перевозила ~ 100 ампер. Мікроконтролер посилався на одну сторону цього товстого сліду, але частина схеми, якою керував мікроконтролер, посилалася на інший кінець сліду. Сліду було лише 3 мОм, але на 100 Ам цього достатньо, щоб отримати різницю 300 мВ між мікро та периферійними пристроями, якими він керував. Перенаправлені периферійні пристрої є загальними для того самого кінця цього сліду, що і контролер, і все добре. У цих струмах немає такого поняття, як вузол.
Стівен Коллінгс

4

Ще одна можливість, яку я не бачив у цьому списку, - це пристрій, який підтримує ICSP. Якщо недостатньо підтягувань використовується на лініях, які спрацьовують в режимі послідовного програмування ланцюгів, іноді можливо ввести цей режим випадковим чином. Це призводить до скидання короткий інтервал пізніше, коли жодне оновлення програми не надсилається до призначених послідовних рядків приймача. Я підозрюю, що внутрішні сили таймера сторожового режиму будуть скинуті, якщо запускається ICSP і не надсилаються дані програмування. Це помилка, яку я допустив і витратив багато часу на пошук 16F876.


3

Переконайтесь, що ви використовуєте логічні мікросхеми CMOS або TTL у своїй схемі, що вони мають адекватні конденсатори для роз'єднання через Vdd та землю (зазвичай 0,1 мкФ). Я використовував CD4021 в дизайні, і коли він був у використанні, мабуть, це спричиняло деякий шип, який спричиняв перезапуск мікропроцесора. Тоді цикл повториться. Ось чому також корисно поставити очевидну послідовність тестування (наприклад, миготіння та вимикання світлодіода кілька разів) на початку коду, щоб ви знали, що мікропроцесор працює і виконує код.


2

Це одна з тих рідкісних речей, які можуть спливати:

У мене був проект, який передбачав мікроконтролер, і він спорадично відновлювався. Коротше кажучи, виявляється, якусь опцію потрібно було ввімкнути або вимкнути, інакше можливі скидання Я це з'ясував, лише прочитавши помилки, відмовившись від усього іншого.

Тепер я змушу читати errata, перш ніж я навіть вирішу використовувати чіп, щоб знати, в що я потрапляю, і якщо це щось, я можу керувати. На жаль, після закінчення навчання у мене не було нікого, хто б навчав мене про загальні практики, так що багато мого навчання в реальному світі пройшло через невдачі та розчарування.


Я навіть не усвідомлював, що це питання давнє і відповідь вже була надана. На жаль
efox29
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.