Необходимость внешнего сторожевого таймера

19

Зачем нужен внешний сторожевой таймер для микроконтроллера?

Большинство микроконтроллеров имеют встроенный сторожевой таймер. Однако в некоторых цепях используется внешний сторожевой таймер (например, PIC16F1824).

Photon001
источник

Ответы:

10

Некоторые продукты должны соответствовать требованиям безопасности, установленным производителем, или международным стандартам безопасности, таким как IEC 60730-1, или более ранней версии UL1998, которая все еще используется в США. Функциональность внутреннего сторожевого таймера в любом данном микроконтроллере может быть или не быть адекватной для использования. В некоторых случаях внешний WDT может использоваться в сочетании с внутренним WDT.

Некоторые микроконтроллеры, такие как серия TI Hercules, очень серьезно относятся к системам, критичным для безопасности, и с большей вероятностью отвечают строгим требованиям, однако они могут не подходить для чувствительных к стоимости приложений.

Как правило, WDT является одним из нескольких способов уменьшить вероятность отказа, вызывающего катастрофический ущерб имуществу или ущерб жизни. Другие вещи, такие как защита памяти для обнаружения неожиданного доступа к памяти MCU или выборки программ из неиспользуемой памяти, обычно используются вместе с WDT.

Примерами недорогих продуктов, которые выполняют критически важные для безопасности функции, являются автомобильные подсистемы, контроллеры гаражных ворот и контроллеры зажигания газа (природного газа или пропана), используемые в печах, сушилках и водонагревателях. Конечно, многие медицинские и аэрокосмические продукты также критически важны для безопасности, но может быть достаточно места для резервирования и других подходов. В некоторых случаях может не быть легкодоступного безопасного состояния, например, в самолете.

В идеале сторожевой таймер является очень простым, независимым от MCU (например, у него должен быть свой собственный источник синхронизации и, возможно, монитор часов), его нельзя установить (программным обеспечением) на более длительное время, чем могло бы повредить любая программная ошибка, и переведет систему в безопасное состояние, если она не будет «привязана» вовремя, либо по тайм-ауту, либо по-оконному, так что слишком частые сбросы могут быть обнаружены. Например, WDT в приложении термоконтроля может быть установлен на несколько секунд, потому что повреждение невозможно, если микроконтроллер блокируется на этот промежуток времени.

WDT наиболее полезен как часть системного подхода к надежности и безопасности.

Спехро Пефхани
источник
33

Сторожевой таймер может защитить от аппаратных ошибок в глючном ... ультрасовременном микроконтроллере. У одного, который мы недавно использовали, от известного бренда, были контакты ввода / вывода, которые иногда пропускали свои прерывания, иногда не запускались правильно, и когда интегрированный сторожевой таймер иногда не сбрасывал систему в известном исправном состоянии.

Это не проявилось, пока мы не начали длительное тестирование надежности, и было проще добавить внешний сторожевой таймер, чем менять микроконтроллер.

Если у вас на плате более одной микросхемы, вам также может понадобиться внешняя микросхема сброса или монитор напряжения, чтобы все было надежно загружаться. Многие из них могут также служить сторожевым псом.

труба
источник
9
«Интегрированный сторожевой таймер иногда не мог сбросить систему в известном исправном состоянии» - это функционально эквивалентно «нет внутреннего сторожевого таймера».
Дмитрий Григорьев
32

Трудно утверждать, что внутренние часы внутреннего сторожевого таймера на самом деле не зависят от всех других часов и всегда работают так, как должны.

Поэтому для сертификации, как правило, гораздо проще разместить внешний сторожевой таймер на плате и сказать: посмотрите, есть наш сторожевой таймер, он должен быть запущен MCU в этот интервал, который короче, чем время до отказа, поэтому наше устройство безопасно. как мы это определили.


Чтобы ответить на некоторые комментарии:

«и всегда бегать так, как надо» - хорошая мысль. Может оказаться сложнее доказать, что ваше программное обеспечение правильно инициализирует внутренний сторожевой таймер при любых обстоятельствах, чем просто использовать сторожевой чип и обратиться к его таблице.

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

Или доказать, что ваш код не содержит ошибку, которая случайно отключает внутренний сторожевой таймер.

По крайней мере, на некоторых контроллерах сторожевой таймер называется независимым и имеет собственный источник синхронизации и не может быть отключен программными средствами, только сброс контроллера отключит сторожевой таймер. По крайней мере, теоретически - легко показать, что вы не можете остановить это с помощью программного обеспечения, но трудно доказать, что часы действительно независимы и не остановятся при EMI.

Или доказать, что ваш код не работает постоянно, сбрасывая внешний сторожевой таймер так быстро, как только может. Проблема решена. ;-)

В этом случае вы используете сторожевой таймер, который должен срабатывать через определенные промежутки времени, и если вы этого не сделаете (активируйте его слишком часто или слишком мало), то сбросите схему. У STM32, с которым я работаю, есть встроенный сторожевой таймер окна, но он запускается из PCLK1, который получен из основных часов, поэтому я не думаю, что он так же полезен, как внешний сторожевой таймер с собственным источником синхронизации.

Или, что какой-то гений не помещает подпрограмму службы сторожевого таймера в ISR таймера, поэтому основной код может потерпеть крах, но прерывание продолжает срабатывать и отлично обслуживает сторожевой таймер ...

Это, конечно, правда, но, надеюсь, обзор вернет этого гения обратно на стул - но, эй, когда я начинал, это была и моя первая идея: D. Во время процессов сертификации, в которых я принимал участие, они всегда смотрели на сторожевую часть программного обеспечения.

Арсенал
источник
4
«и всегда бегать так, как надо» - хорошая мысль. Может оказаться сложнее доказать, что ваше программное обеспечение правильно инициализирует внутренний сторожевой таймер при любых обстоятельствах, чем просто использовать сторожевой чип и обратиться к его таблице.
JimmyB
4
@JimmyB Или доказать, что в вашем коде нет ошибки, которая случайно отключает внутренний сторожевой таймер.
TripeHound
2
@TripeHound Или чтобы доказать, что ваш код не работает постоянно, сбрасывая внешний сторожевой таймер так быстро, как только возможно. Проблема решена. ;-)
JimmyB
2
Или что какой-то гений не помещает подпрограмму службы сторожевого таймера в ISR таймера, поэтому основной код может аварийно завершиться, но прерывание продолжает работать и отлично обслуживает сторожевой таймер ...
John U
@JohnU, это не похоже на то, с чем может помочь внешняя микросхема.
ilkkachu
12

Встроенные в микроконтроллеры сторожевые устройства обладают особыми свойствами, которые означают, что они сами могут выходить из строя так, как не могут другие внешние сторожевые устройства.

Например, общая конструкция заключается в использовании сторожевого таймера, работающего от маломощного RC-генератора. Этот генератор может выйти из строя. Внешний сторожевой таймер, основанный на разряде конденсатора, а не на генераторе, может во многих случаях сбрасывать микроконтроллер.

Другая причина в том, что внешний сторожевой таймер может быть более надежным. Микроконтроллер может надежно работать только в определенном диапазоне напряжений, а сложное устройство может быть заблокировано таким образом, что его собственный внутренний сторожевой таймер неэффективен. Внешний сторожевой таймер может иметь более широкий допустимый диапазон питания и быть менее подверженным проблемам при воздействии электрических помех.

Внешние сторожевые таймеры часто предлагают гораздо более широкий диапазон значений времени ожидания. Микроконтроллер, который я часто использую, XMEGA, имеет максимальное время ожидания около 7 секунд. Для одного продукта я добавил дополнительный внешний сторожевой таймер с временем ожидания 2 часа. Это позволило мне разбудить микроконтроллер один раз в час, а не раз в несколько секунд, что позволило снизить энергопотребление устройства с питанием от батареи.

Внешние сторожевые таймеры иногда имеют несколько функций, таких как таймер и контроль напряжения / управление сбросом. Опять же, они могут быть ниже, чем встроенная система микроконтроллера.

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

пользователь
источник
Основываясь на моем опыте внешних wdog, я бы сказал, что они гораздо менее надежны, чем внутренние, просто потому, что другая внешняя цепь - это еще одна вещь, которая может сломаться. Пайка, EMI, ESD и тд. Если вам удастся замкнуть вход часов на что-то, то внешний wdog будет эффективно отключен. Так что я действительно не покупаю аспект повышенной безопасности. Если у вас есть оба одновременно, тогда, конечно, вы немного увеличите безопасность.
Лундин
@Lundin большинство из них используют внутренний RC генератор или конденсатор разряда, а не внешние часы. На самом деле я не могу думать о какой-либо другой руке, которая использует внешние часы. Также сбои не являются аддитивными, если у вас есть внешний и внутренний сторожевой таймер, а один сбой, очевидно, все же лучше, чем один.
пользователь
3

Некоторые сертификаты, такие как UL , могут требовать защиты от двух точек отказа. Внешний сторожевой таймер будет считаться защитой от первой точки отказа, микроконтроллера.

da66en
источник
2

В этом отношении сторожевой таймер ничем не отличается от любой другой встроенной периферии, которую вы найдете в MCU. Микроконтроллеры поставляются с таймерами, RTC, АЦП, ЭСППЗУ и контроллерами сброса, однако все эти функции также существуют как отдельные микросхемы. Если доступные встроенные блоки не соответствуют вашим требованиям, вам придется использовать внешние. Или вы можете попытаться найти MCU со всеми правильными блоками, которые могут не существовать или быть слишком дорогими или трудными для переноса вашего кода.

Дмитрий Григорьев
источник
1

Сторожевой таймер является таймером и активирует свой выход, когда микросхема теряет входной импульс в течение определенного периода.

Это строительный блок и может быть использован для любого применения.

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

Внешний сторожевой таймер не связан со сложной тактовой областью микроконтроллера, и некоторые из них имеют аналоговую синхронизацию заряда RC или внутренние часы.

Цифровые схемы в излучении могут активировать выходы, когда заряд достигает их триггеров. Но некоторые аналоговые схемы безопаснее, потому что они объединяют заряд в конденсаторе, и это безопасно, когда мы интегрируем его.

М КС
источник