Незалежна сторожова собака (IWDG) або Оконна сторожова собака (WWDG)?


15

Я все ще шукаю відповідь на це питання:

Чому, хоча MCU-модулі stm32 мають ідеальну сторожову собаку (я маю на увазі сторожову сторону Window (WWDG)), існує простий сторожовий (незалежний сторожовий (IWDG))?

Я знайшов цю сторінку , яка сказала:

ST Microelectronics має лінійку пристроїв Cortex-M3. M3 став надзвичайно популярним для вбудованих пристроїв нижчого класу, і STM32F ST є представником цих частин (хоча WDT є надбудовою ST і не обов'язково відображає реалізацію інших постачальників). STM32F має два різних механізми захисту. "Незалежна сторожова собака" - це гарненький дизайн ванілі, який мало для цього, крім простоти використання. Але їх віконний сторожовий дог пропонує більш надійний захист. Коли закінчується таймер зворотного відліку, створюється скидання, яке може бути перешкоджене перезавантаженням таймера. Нічого особливого там немає. Але якщо перезавантаження відбудеться занадто швидко, система також скинеться. У цьому випадку "надто швидко" визначається значенням програми в регістр управління.

Ще одна цікава функція: вона може генерувати переривання безпосередньо перед скиданням. Напишіть трохи коду, щоб перервати переривання, і ви можете вжити певних дій, наприклад, щоб привести систему в безпечний стан або зробити знімок даних для цілей налагодження. ST пропонує використовувати ISR для перезавантаження сторожової собаки - тобто, забийте собаку, щоб не відбулося скидання. Не приймайте їх порад. Якщо програма виходить з ладу, обробники переривань можуть дуже добре продовжувати працювати нормально. І використання ISR для перезавантаження WDT визнає недійсною всю причину сторожового вікна.

і це :

У новій серії процесорів STM32F4 Cortex ™ -M4 STMicroelectronics є дві незалежні сторожові собаки. Один працює від власного внутрішнього генератора RC. Це означає, що в процесорі можуть впасти всілякі речі, і WDT все ще запуститься. Існує також "віконна сторожова собака" (WWDT), яка вимагає від коду галочки її часто, але не занадто часто. Це дуже ефективний спосіб страхування збійного коду, який випадковим чином записується в механізм захисту, що не викликає тик WDT, і WWDT може генерувати переривання незадовго до того, як буде встановлено скидання.

ОК, давайте подивимось у посібнику :

STM32F10xxx мають дві вбудовані периферійні пристрої, які пропонують поєднання високого рівня безпеки, точності та гнучкості використання. Обидві периферійні пристрої сторожової служби (Незалежні та Вікна) служать для виявлення та усунення несправностей через відмову програмного забезпечення та для запуску скидання системи або переривання (лише для сторожового вікна), коли лічильник досягає заданого значення очікування. Незалежна сторожова собака (IWDG) працює за допомогою власного спеціалізованого низькошвидкісного годинника (LSI) і, таким чином, залишається активною, навіть якщо основний годинник виходить з ладу. Годинник віконних вікон (WWDG) призначений для годинника APB1 і має настроюваний часовий вікно, яке може бути запрограмовано для виявлення ненормально пізньої або ранньої поведінки програми. IWDG найкраще підходить для програм, які вимагають запуску сторожового собаки як абсолютно незалежний процес поза основним додатком, але мають менші обмеження точності синхронізації. WWDG найкраще підходить для програм, які вимагають від сторожової реагування в точному діапазоні часу.

Віконний сторожовий вікно використовується для виявлення виникнення програмної несправності, яка зазвичай генерується зовнішніми перешкодами або непередбачуваними логічними умовами, через що прикладна програма відмовляється від своєї нормальної послідовності. Схема сторожової служби генерує скидання MCU після закінчення запрограмованого періоду часу, якщо програма не оновлює вміст нижнього обліку до того, як біт T6 не очиститься. Скидання MCU також генерується, якщо 7-бітне значення спаду (в регістрі керування) оновлено до того, як низхідний чисельник досяг значення віконного регістра. Це означає, що лічильник повинен бути оновлений в обмеженому вікні.

Як бачите, жоден з них не сказав, що чому є два сторожові. якщо я запитаю, в чому полягають відмінності між обома сторожовими собаками, ви порахуєте всі функції, які ви можете побачити у вищесказаному, і якщо ви хочете порівняти обидва, очевидно, переможець буде сторожовим вікном Window (WWDG)! то чому є два сторожові собаки?

Хочу знати, що коли я повинен використовувати IWDG та коли WWDG?

і чи є якісь причини, які говорять нам? Чому вони називають другий годинник за такою назвою -> "Віконна сторожова собака"?

Відповіді:


23

Регулярні таймери слідкуйте за деякий час, перш ніж вони вичерпаються. Якщо у вас 100 WDT, ви можете скинути його кожні 99,9 мс або кожні 10 с, і це ніколи не вичерпується.

У таймерів сторожових вікон є часове вікно, протягом якого вони повинні бути скинуті. Якщо ви скинете його занадто рано чи занадто пізно (з попереднього скидання), це призведе до скидання процесора.

Мета, якщо це не очевидно, - допомогти переконатися, що код, який скидає WDT, - це призначений код, який працює за призначенням. Якийсь непередбачений стан, який генерує високочастотні скидання WDT, не завадить скинути систему.

Запуск WDT з системного годинника може стати проблемою - якщо годинник виходить з ладу і якщо немає незалежної схеми монітора годинника, можуть трапитися погані речі. Незалежний годинник для WDT означає, що якщо річ з якихось причин почала працювати зі швидкістю 1/10, WDT буде скинуто (але вікно WDT не буде).

Використовуйте обидва, якщо можете.

Як зазначається на сторінці, скидання WDT за допомогою ISR, як правило, погано дзюджу (але може бути прийнятним, якщо ISR підтверджує, що скидання програмного забезпечення функціонує перед скиданням таймера).


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

1
Якщо незалежний годинник WDT змушує MCU переходити у стан скидання (і цей стан є безпечним), то, можливо, аварійність може бути запобіжена. Короткий кристал MCU спричинив серйозну аварію в перші дні (BART, IIRC).
Spehro Pefhany

1
@Roh: Насправді я бачив, як системний годинник не повертається після переходу в сплячий режим цього самого процесора (ну, STM32 F0, що є M0). Виявляється, коли ви робите певні речі в певний час, годинник PLL може не запуститися, і вся справа працює на 1/6 швидкості.
Натон

@Nathon Дякую цікаво. я зовсім ненавиджу серії M0. Здається, що у кожної серії STM є проблеми.
Рох

7

Текст, який ви вставили у запитання, дає відповіді, які вам потрібні.

  1. Ви використовуєте IWDG тоді, коли вам потрібен простий сторожовий пес або коли вам потрібна абсолютно незалежна сторожова собака - IWDG має свій власний годинник, WWDG отримує свій годинник з одного з годинників шини - якщо він виходить з ладу або програмне забезпечення відключає його, то сторожовий гіне.
  2. Ви використовуєте WWDG, коли вам потрібна сторожова собака, яку можна скинути лише протягом певного періоду часу (вікно.) Якщо ваше програмне забезпечення надто пізно скидає WWDG, то WWDG відключить скидання процесора. Якщо ваше програмне забезпечення надто скидає WWDG, то це також спричинить скидання процесора.

Його називають "віконним сторожовим собакою" з тієї простої причини, що лише скидання сторожового собаки протягом визначеного періоду часу (вікно можливостей) запобіжить перезавантаженню вашого процесора.

Обидва роблять подібну роботу, але роблять їх по-різному. Яке вам потрібно, залежить від вимог, яким ви повинні відповідати.


будь ласка, прочитайте мій коментар Spehro Pefhany.
Рох

1
Таймер, який використовує WWDG, програмується - ви можете змінити його швидкість за допомогою свого програмного забезпечення. Якщо ваше програмне забезпечення вийде з-під контролю і змінить швидкість APB1, то часове вікно буде неправильним, і сторожовий собака буде постійно скидати ваш процесор - ваш сторожовий кікер ніколи (або лише за збігом обставин) не буде бити сторожового собаку в потрібний час. Ваша програма також може повністю вимкнути годинник APB1 або таймер WWDG, і в цьому випадку вона ніколи не скине ваш процесор.
JRE

5

Існує ще одна причина використання віконної сторожової собаки, замість цього або як додаток до незалежної сторожової собаки. WWDG має переривання, яке ви можете підключити. Це означає, що, якщо код потрапив у цикл чи фугу, ви можете встановити точку перелому в ISR WWDG і працювати назад, щоб дізнатися, що прошивка робила, коли собака гавкав.

Ви не можете цього зробити з IWDG. Як випливає з назви, це не залежить від процесора. Замість того, щоб піднімати переривання, він просто стверджує і скасовує / RESET - що не дає вам багато підказок щодо того, чому він гавкав. Я настійно пропоную встановити WWDG в межах ваших нормальних робочих параметрів, плюс IWDG на набагато більш тривалий період, можливо, максимум 2 * WWDG. Створіть функцію піт-собаки, яка б'є обох. Таким чином, IWDG гавкає лише тоді, коли WWDG закривається, як остаточне резервне копіювання.


1

Моє взяти на це:

Використовуйте обидва одночасно, оскільки вони шукають різні невдалі умови:

В таймер Independent Watchdog (IWDG) повинен бути скинутий постійно перед ним раз поза. На практиці ви можете просто додати код скидання скрізь, де у вас є дійсний програмний стан, або один раз у основний цикл, якщо у вас є головний цикл, який повинен виконуватися часто без великих затримок. Таким чином, якщо ваш дзвінок про скидання таймера (це іноді називається "петтінг", "галочка" або просто "скидання" "сторожової собаки") не відбувається вчасно, це означає, що ваш код або A) випадково застряг десь ви не передбачили --- якесь непередбачене нескінченне стан типу циклу, або B) навмисно застряг десь, коли ви примусово застосовуєтесь черезassert()виклик функції із вбудованим нескінченним циклом, до якого потрібно переходити, коли важлива умова не відповідає дійсності. Отже, тепер, коли ваша умова ствердження помилкова, ваш код навмисно застряє в нескінченному циклі, і сторожовий собака скидає мікроконтролер, щоб повернути його до дійсного стану. Зауважте також, що "незалежна сторожова собака (IWDG) працює за допомогою власних виділених низькошвидкісних годинників (LSI) і, таким чином, залишається активною, навіть якщо основний годинник виходить з ладу" (див. Посібник з посібника ST RM0008, p493 ).

Мені здається, проте, що таймер Window Watchdog (WWDG) призначений для пошуку не для описаних вище випадків (де ваш код або ненавмисно, або навмисно [через зразок] десь "застряг"), а конкретніше для випадку, коли А) ваш код НЕ виконує щось, що слід . Іншими словами, він має помилку, яка призводить до того, що його основний цикл чи інший підрозділ коду буде виконано занадто швидко (або бути повністю пропущеним), тому ви перезавантажуєте сторожову собаку занадто рано, поза її вікном, і mcu отримує скидання. Або, Б)інша умова, яку він може помітити, - це невдала настройка таймера. Можливо, ви скидаєте його через фіксований інтервал, але ваш таймер, який використовується для створення цього інтервалу, або отримує його конфігурації, випадково змінені там, де він не повинен мати, або ви неправильно налаштовуєте його в першу чергу, тоді інтервал часу буде вимкнено, ваш фіксований Скидання інтервалу часу скидає WWDG за його вікном (або занадто рано, або занадто пізно), і mcu отримує скидання, щоб повідомити вас та / або виправити умову.

Це мій погляд на це. Думки або відгуки вітаються.


0

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

Жоден з них не є кулезахисним, якщо ваш код може вводитись в автоматично підтримуваний цикл. Напр. Якщо ви плануєте "подавати" на основі IRQ, пов’язаних з таймером, це може бути вкрай поганою практикою, оскільки ваш код може застрягнути в деяких до / в потоці пошти, в той час як переривання все ще можуть подавати ваш WWDT у правильній послідовності.

Насправді ви можете використовувати переривання для живлення WWDT, якщо зможете знизити пріоритет IRQ під нормальним кодом виконання, як це можна зробити на MIPS (Microchip).

Якщо ваш код життєзабезпечувальний, критичний і т. Д., Просто відкиньте їх і використовуйте зовнішню WDT (бажано на основі питань та питань).

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