Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Чем внешний watchdog лучше встроенного в МК?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
r0pegig
Интересно мнение других. Сам пока не вижу большого смысла во внешнем, если есть внутренний.
Есть предположение, что по внешнему можно сбрасывать не только процессор, но и другие микросхемы на плате. Хотя опять же это можно делать программно, если ножки сброса подключить к МК.
Какие есть еще соображения?
scifi
У некоторых МК watchdog бывает глюкавый. Если не хочется выяснять, глюкавый он или нет, можно поставить внешний и не париться.
iosifk
Цитата(r0pegig @ Aug 20 2012, 18:02) *
Интересно мнение других. Сам пока не вижу большого смысла во внешнем, если есть внутренний.
Есть предположение, что по внешнему можно сбрасывать не только процессор, но и другие микросхемы на плате. Хотя опять же это можно делать программно, если ножки сброса подключить к МК.

У внешнего обычно нет кварца, а чем меньше деталей, тем надежнее.
andron86
Цитата(scifi @ Aug 20 2012, 16:13) *
У некоторых МК watchdog бывает глюкавый. Если не хочется выяснять, глюкавый он или нет, можно поставить внешний и не париться.

Помимо этого есть много всяких нужных фичей, епром, фрам, супервизор, продвинутая калибровка часов ...
jcxz
Имхо - самый главный плюс внешнего по сравнению с внутренним - это то что его невозможно отключить. Ведь внутренний обычно нужно сперва разрешить после сброса.
А у помех есть такое скотское свойство - ходить пачками. Т.е. - скажем если по первому импульсу из пачки помех у вас происходит пересброс проца, то если второй импульс пачки придёт раньше, чем вы успеете программно разрешить внутренний WD, то устройству обеспечен мёртвый зависон. Т.е. - оно не соответствует требованиям ГОСТ по помехоустойчивости.
Мы в своих устройствах ОБЯЗАТЕЛЬНО и ВСЕГДА ставим внешний WD. Причём обязательно такой, который нельзя программно отключить никакими комбинациями сигналов.

Имхо - внутренний имеет смысл использовать только для быстрого аппаратного сброса CPU, не более.
_Артём_
Цитата(andron86 @ Aug 20 2012, 17:42) *
Помимо этого есть много всяких нужных фичей, епром, фрам, супервизор, продвинутая калибровка часов ...

А почём это всё нынче?
jcxz
Фрам - вещь довольно дорогая, да и часы с погрешностью +-2ppm от всех факторов - тоже.
Но к сожалению они почему-то не уживаются в одном корпусе sad.gif
Tahoe
Цитата(r0pegig @ Aug 20 2012, 18:02) *
по внешнему можно сбрасывать не только процессор, но и другие микросхемы на плате

При желании, по внутреннему тоже. В большинстве современных МК, пин RESET организован как открытый сток и может работать на выход.

Кроме того, зачем искать приключения и тянуть какие-то внешние дорожки к пину RESET? Т.е., по сути, присоединять антенну для ловли помех ко входу RESET.
andron86
Цитата(_Артём_ @ Aug 20 2012, 17:51) *
А почём это всё нынче?

Да, некоторые вещи дорогие, но когда надо, вопрос о деньгах не стоит.
редактор
Нужно читать внимательно доку на МК. Есть WD которые разрешены сразу (по Silabs на этом форуме организовано тем 5 на моей памяти, когда симулятор работает а в железе нет, потому что не выключили WDT). Есть WD который надо именно разрешить, выключен по умолчанию.
Главный недостаток многих встроенных WDT - то что они тактируются от того-же источника что и ядро. (Исключение кажется PIC но не уверен).
Поэтому если внешний кварц заглючил (из-за помех) то и внутренний WDT не спасет. Нет тактов->нет счета->нет сброса->нет переключения на внутреннюю частоту. А по сбросу многие МК начинают работать именно от внутреннего источника тактирования.
AlexandrY
Цитата(r0pegig @ Aug 20 2012, 17:02) *
Интересно мнение других. Сам пока не вижу большого смысла во внешнем, если есть внутренний.
Есть предположение, что по внешнему можно сбрасывать не только процессор, но и другие микросхемы на плате. Хотя опять же это можно делать программно, если ножки сброса подключить к МК.


ИМХО, но времена когда микроконтроллерам нужен был внешний WDT уже прошли.
Нынче вместо WDT ставят отдельный внешний мелкий микроконтроллер если речь идет о системах на ARM9 и выше.
В лэптопах это очень часто можно увидеть. В надежных роутерах так делают.
В промышленных же дивайсах, например в софтстартерах для двигателей где применяют PIC-и, AVR-ы, Zilog-и и т.д. внешних WDT не встречал.
Для Cortex-M3,M4 внешний WDT тоже не нужен. И, кстати, для холодного сброса системы watchdog там не совсем годится. Для этого есть отдельные регистры в ядре.

На больших платах с DDRAM, модулями, разными типами Flash памяти в качестве внешнего WDT лучше применить микроконтроллер, тот же Cortex-M0 или M3 и чтобы не только сбрасывал, но и отключал питание от основной системы.
Бывают такие баги в больших чипах которые можно сбросить только отключением питания.
Учитывая, что errat-ы пополняются в течении нескольких лет от начала производства чипов, то иметь интеллектуальный внешний супервизор очень даже актуально.

vlad_new
Цитата
Бывают такие баги в больших чипах которые можно сбросить только отключением питания.

Обсалютно точно. Во первых надо разделить апельсины от софта. Откуда берется зависание?
1. От не запланированного хода выполнения кода программы.
2. От внешних факторов - грязное питание, и, в основном, от статических разрядов.
В первом случае внешняя собака не нужна.
Во втором случае, многие из ARMов не возможно сбросить по резету в 50% зависания. Поэтому если использовать внешнюю собаку, то обязательно нужен механизм дерганья питания.


kan35
Для STM32 точно не нужен внешний, так как ST даже сертифицировались для применения в консьюмерских приборах без внешнего, где внешний обязателен (стиралки микроволновки и проч.). Благодаря отдельному генератору WDT видимо.
_Артём_
Цитата(vlad_new @ Aug 21 2012, 15:11) *
многие из ARMов не возможно сбросить по резету в 50% зависания

Это о каких АРМах речь?
К СМ3, СМ0 тоже относится?
kan35
Цитата(_Артём_ @ Aug 21 2012, 17:29) *
Это о каких АРМах речь?
К СМ3, СМ0 тоже относится?

блок Reset не входит в состав ядра, поэтому такой вопрос не корректен. Лучше пусть скажет конкретные серии микроконтроллеров.
я считаю, что это не правда :-) - может быть какие то специфические экземпляры и страдают такой болезнью, но говорить о 50% никак нельзя так как точно не относится к мэнстримовым чипам популярных брендов.
_Pasha
Цитата(редактор @ Aug 21 2012, 10:31) *
Главный недостаток многих встроенных WDT - то что они тактируются от того-же источника что и ядро. (Исключение кажется PIC но не уверен).
Поэтому если внешний кварц заглючил (из-за помех) то и внутренний WDT не спасет. Нет тактов->нет счета->нет сброса->нет переключения на внутреннюю частоту. А по сбросу многие МК начинают работать именно от внутреннего источника тактирования.

Нету такого! От кварца никто "сабаку" не тактирует. Берут внутренний RC генератор, как самый надежный источник клока.
scifi
Цитата(_Pasha @ Aug 21 2012, 21:00) *
Берут внутренний RC генератор, как самый надежный источник клока.

Ага, если он есть. Ознакомьтесь со всем зоопарком микроконтроллеров. Имя им - легион :-)
_Артём_
Цитата(_Pasha @ Aug 21 2012, 20:00) *
От кварца никто "сабаку" не тактирует.

Тактируют, тактируют.
Например от часового кварца (но это не обязательно единственный источник).

Цитата(_Pasha @ Aug 21 2012, 20:00) *
Берут внутренний RC генератор, как самый надежный источник клока.

Надёжный, но точность ± лапоть.
vlad_new
Цитата(_Артём_ @ Aug 21 2012, 17:29) *
Это о каких АРМах речь?
К СМ3, СМ0 тоже относится?

Вот к ним, в первую очередь и относится.
_Артём_
Цитата(vlad_new @ Aug 22 2012, 01:25) *
Вот к ним, в первую очередь и относится.

"имя сестра, имя..."
в смысле производитель-тип- и тп и тп...
vlad_new
Цитата(kan35 @ Aug 21 2012, 19:57) *
блок Reset не входит в состав ядра, поэтому такой вопрос не корректен. Лучше пусть скажет конкретные серии микроконтроллеров.
я считаю, что это не правда :-) - может быть какие то специфические экземпляры и страдают такой болезнью, но говорить о 50% никак нельзя так как точно не относится к мэнстримовым чипам популярных брендов.

Я имел ввиду в 50% при сбоеях резет не помагает ( лапка не чует ничего ), а не весь парк чипов. Есно к PIC это не относится. Но поскольку мы в теме АРМов, то они и имелись ввиду. Cortex0,3,4. Касается ли это 8,9 ядер - не знаю. Но поскольку механизм ядра разделен от переферии, то думаю, что и там будет то же самое.

_Артём_
Цитата(vlad_new @ Aug 22 2012, 01:33) *
Я имел ввиду в 50% при сбоеях резет не помагает ( лапка не чует ничего )

Понятно, что вы имели в виду.
Но неясно, что за сбои такие, что ресет отключается.
И к каким конкретно моделям это относится, то есть не CortexMx, а например lpc11xx или EFM32G

Цитата(vlad_new @ Aug 22 2012, 01:33) *
Есно к PIC это не относится.

B к АВР не относится, также как и ко многим другим.

Цитата(vlad_new @ Aug 22 2012, 01:33) *
Cortex0,3,4. Касается ли это 8,9 ядер - не знаю. Но поскольку механизм ядра разделен от переферии, то думаю, что и там будет то же самое.

Если блок управления сбросом отделён от ядра, а это часто так и есть, то нельзя сказать "CortexMx не реагирует на ресет в таких-то условиях", а можно так - " у модели xxx reset unit не сбрасывает ядро в таких-то условиях".
jcxz
Цитата(AlexandrY @ Aug 21 2012, 14:07) *
ИМХО, но времена когда микроконтроллерам нужен был внешний WDT уже прошли.
Нынче вместо WDT ставят отдельный внешний мелкий микроконтроллер если речь идет о системах на ARM9 и выше.
В лэптопах это очень часто можно увидеть. В надежных роутерах так делают.
Наверно мы с вами живём в разные времена wink.gif
Во-первых: а если этот ваш мелкий зависнет, что делать? wink.gif
Можно сделать и так, но поставив внешний WD на этого мелкого.
Во-вторых: не весь парк электроники состоит из лэптопов и жирных роутеров. Есть ещё более мелкая электроника, где цена каждого чипа и их кол-во имеет значение. И такой электроники думаю существенно больше чем жирной.
А также ещё учтите что, так как становится на один программируемый компонент больше, то при этом увеличивается стоимость и сроки разработки, кол-во багов, сложности если необходимо удалённое обновление ПО и т.п.

Цитата(AlexandrY @ Aug 21 2012, 14:07) *
Для Cortex-M3,M4 внешний WDT тоже не нужен.
Обоснуйте.

Цитата(AlexandrY @ Aug 21 2012, 14:07) *
И, кстати, для холодного сброса системы watchdog там не совсем годится. Для этого есть отдельные регистры в ядре.
Если есть. Никто не спорит.
Цитата(AlexandrY @ Aug 21 2012, 14:07) *
Учитывая, что errat-ы пополняются в течении нескольких лет от начала производства чипов, то иметь интеллектуальный внешний супервизор очень даже актуально.
Только не забывайте - чем более интеллектуальный, тем более подвержен зависонам. Как вы его отвешивать будете? sm.gif

Цитата(kan35 @ Aug 21 2012, 19:18) *
Для STM32 точно не нужен внешний, так как ST даже сертифицировались для применения в консьюмерских приборах без внешнего, где внешний обязателен (стиралки микроволновки и проч.). Благодаря отдельному генератору WDT видимо.
Сколько Вам ST платит? wink.gif
В этих ST, о которых Вы говорите, WD по умолчанию после сброса в каком состоянии? Включен?
Вот именно что в "консьюмерских". Там где всегда рядом есть юзер. На него и возлагаются обязанности собаки wink.gif
А если ваш девайс находится в труднодоступном месте (или вообще недоступном - не дай бог - на Марсе wink.gif ), кто его пересбросит?
Цитата(AlexandrY @ Aug 21 2012, 14:07) *
В промышленных же дивайсах, например в софтстартерах для двигателей где применяют PIC-и, AVR-ы, Zilog-и и т.д. внешних WDT не встречал.
А сейчас вообще трудно встретить компетентных разработчиков. Мало осталось. Поэтому у нас спутники и падают.
ut1wpr
Цитата(_Артём_ @ Aug 21 2012, 20:15) *
Надёжный, но точность ± лапоть.

Ты тактом собаки будешь 1PPS GPS поверять? Она там нужна, эта точность? Нафига там метрология? Что произойдет, если собака дернет ядро на сброс не через пол-лаптя, а через пол-лаптя +- 1/100 лаптя? sm.gif

Forger
Цитата(jcxz @ Aug 22 2012, 06:09) *
А сейчас вообще трудно встретить компетентных разработчиков. Мало осталось. Поэтому у нас спутники и падают.


Нет, не поэтому спутники падают.
По крайней мере, это не основная причина (по секрету, работаю в военке и кое-что об этом мне известно...).

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

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

А если бы вы тока знали, насколько дибильные схемные решения используются в спутниках: "барадатая" схемотехника, куча ненужных проводов, жгутов, разъемов,
от которых можно было бы легко избавиться, если бы все было иначе в общем структуре нашей военной электроники...
А схемные решения получаются дебильными вовсе не потому, что разрабы дибилы (хотя и такое бывает), а из-за того, что, например,
список разрешенных комплектующих, созданный чуть ли не 80..90-е годы прошлого века, практически нереально чем-то пополнить или заменить.
В итоге, проще делать на том, что разрешено... В итоге получается такая барада, которая вообще удивительно, что она работает sm.gif






kan35
Цитата(vlad_new @ Aug 22 2012, 02:33) *
Я имел ввиду в 50% при сбоеях резет не помагает ( лапка не чует ничего ), а не весь парк чипов. Есно к PIC это не относится. Но поскольку мы в теме АРМов, то они и имелись ввиду. Cortex0,3,4. Касается ли это 8,9 ядер - не знаю. Но поскольку механизм ядра разделен от переферии, то думаю, что и там будет то же самое.

Есть ли подтверждения ваших умоаключений какими нибудь производителями или если вы грешите на ядро, ARMом? Несколько лет работаю с STM32, ранее работал с ARM7 и разными 8 битниками и чтобы в каких то случаях внешний ресет не работал - не встречалось ни разу и ни от кого не слышал.
_Артём_
Цитата(ut1wpr @ Aug 22 2012, 08:11) *
Она там нужна, эта точность?

Но есть же такая возможность (тактировать WDT от кварца), наверное потому что кому-то это надо.
Tahoe
Цитата(kan35 @ Aug 22 2012, 11:25) *
Есть ли подтверждения ваших умоаключений какими нибудь производителями или если вы грешите на ядро, ARMом? Несколько лет работаю с STM32, ранее работал с ARM7 и разными 8 битниками и чтобы в каких то случаях внешний ресет не работал - не встречалось ни разу и ни от кого не слышал.

У меня есть версия. Это пошло от криворуких программеров, которые не инициализируют грамотно периферию, а полагаются на POR. Соотв., после того, как сработал WD, часть периферии не инициализирована полностью, отсюда и мифы о "недосбросе". sm.gif
_Артём_
Цитата(Tahoe @ Aug 22 2012, 17:43) *
Соотв., после того, как сработал WD, часть периферии не инициализирована полностью, отсюда и мифы о "недосбросе". sm.gif

Да, но сброс от WDT не должен разве приводить периферию в исходное состояние?
Forger
Цитата(Tahoe @ Aug 22 2012, 18:43) *
У меня есть версия. Это пошло от криворуких программеров, которые не инициализируют грамотно периферию, а полагаются на POR. Соотв., после того, как сработал WD, часть периферии не инициализирована полностью, отсюда и мифы о "недосбросе". sm.gif

Во-во! Полностью подтверждаю!
Не раз чехлил своих программеров за подобную лень sm.gif

Цитата(_Артём_ @ Aug 22 2012, 18:48) *
Да, но сброс от WDT не должен разве приводить периферию в исходное состояние?

Как оказывается, что не обязан, тут нужно смотреть даташит и еррату обязательно.
Поскольку такие баги особенно в новых чипах - хоть и редкость, но бывают.
DmitryM
Цитата(_Артём_ @ Aug 22 2012, 18:48) *
Да, но сброс от WDT не должен разве приводить периферию в исходное состояние?

Не обязан, по WDT можно сохранять предсмертный дамп или просто уйти на "полный" reset.
_Артём_
Цитата(DmitryM @ Aug 22 2012, 22:04) *
Не обязан, по WDT можно сохранять предсмертный дамп

А где его определять тогда? В WDT_Handler-е (если есть) или Reset_Handler-е?

Цитата(DmitryM @ Aug 22 2012, 22:04) *
просто уйти на "полный" reset.


Типа так:
Код
if (watch_dog_reset_was)
     NVIC_SystemReset();

?
Это то хоть полный сброс?
Tahoe
Цитата(_Артём_ @ Aug 22 2012, 18:48) *
Да, но сброс от WDT не должен разве приводить периферию в исходное состояние?

А кто ж его заставит? Да и надо ли?

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

Цитата(_Артём_ @ Aug 23 2012, 00:23) *
А где его определять тогда? В WDT_Handler-е (если есть) или Reset_Handler-е?

Ясно дело, в WDT_Handler.
dinam
Цитата(kan35 @ Aug 22 2012, 14:25) *
Есть ли подтверждения ваших умоаключений какими нибудь производителями или если вы грешите на ядро, ARMом? Несколько лет работаю с STM32, ранее работал с ARM7 и разными 8 битниками и чтобы в каких то случаях внешний ресет не работал - не встречалось ни разу и ни от кого не слышал.
Хоть и не ARM, но могу в качестве примера привести самый популярный мк с USB 2.0 - CY7C68013A. Если сбрасывать с отключением питания, то работает замечательно, что естественно для USB устройств. Если питание не отключать, то иногда на сброс не реагирует. Спасает только отключение питания.
Слесарь
Цитата(jcxz @ Aug 20 2012, 18:45) *
если по первому импульсу из пачки помех у вас происходит пересброс проца, то если второй импульс пачки придёт раньше, чем вы успеете программно разрешить внутренний WD, то устройству обеспечен мёртвый зависон.

Хорошо что это не требуется делать в PIC.

Я обычно сначала эксплуатирую устройство без WDT и если в течении месяца другого не происходит зависаний, можно смело запускать только внутренний WDT.
jcxz
Цитата(Forger @ Aug 22 2012, 21:20) *
Во-во! Полностью подтверждаю!
Не раз чехлил своих программеров за подобную лень sm.gif
Бывает периферия (внутренняя), которую невозможно сбросить НИКАК иначе как по внешнему ресету или ресету от внутреннего сторожевика.
Сам сталкивался с таким. Пример: FIFO-буфер DMA-канала в TI CC5502. Если остановить DMA в момент, когда чтение источника произошло, а запись в приёмник - ещё нет (т.е. - FIFO DMA содержит данные), то сбросить этот FIFO нет никакой возможности (в DMA-контроллере нет битов сброса, а enable каналов не влияет на fifo). Сбросить можно только через reset. Если не сбросить FIFO - думаю понятно что будет.
С тех пор как столкнулся с этим, всегда выполняю перезапуск firmware аппаратным сбросом (через WD или соотв. биты если есть).

Цитата(dinam @ Aug 23 2012, 09:50) *
Хоть и не ARM, но могу в качестве примера привести самый популярный мк с USB 2.0 - CY7C68013A. Если сбрасывать с отключением питания, то работает замечательно, что естественно для USB устройств. Если питание не отключать, то иногда на сброс не реагирует. Спасает только отключение питания.
Работал с CY7C68013A, вроде не замечал проблем. А может у вас не на сброс не реагировал, а по сбросу прошивку с внешней I2C-EEPROM не считывал или криво считывал и соответственно запускал прошивку не с EEPROM, а свою внутреннюю?

Цитата(Слесарь @ Aug 23 2012, 10:01) *
Хорошо что это не требуется делать в PIC.
Я обычно сначала эксплуатирую устройство без WDT и если в течении месяца другого не происходит зависаний, можно смело запускать только внутренний WDT.
Вы наверно не пользовались испытательными генераторами импульсных помех sm.gif
Когда-то помню испытывал устройство (в котором был только внутренний сторожевик) генератором ИГЭ15.2 - подавал пачки эл-статических разрядов. Примерно на каждой 10 пачке устройство висло. Хотя разрешение внутреннего сторожевика было в самом начале main(). Видно второй импульс пачки приходил когда управление находилось ещё внутри bootROM процессора (ещё не проверено состояние бут-пинов и не передано управление рабочему ПО), либо управление было в startup-коде си-программы.
dinam
Цитата(jcxz @ Aug 23 2012, 12:11) *
Работал с CY7C68013A, вроде не замечал проблем. А может у вас не на сброс не реагировал, а по сбросу прошивку с внешней I2C-EEPROM не считывал или криво считывал и соответственно запускал прошивку не с EEPROM, а свою внутреннюю?
Сбросом отдельно дергаете, не отключая питания?
Честно говоря я так и не понял в чем засада. И почему он тогда не считывал из внешней EEPROM или криво?
Слесарь
Цитата(jcxz @ Aug 23 2012, 08:23) *
разрешение внутреннего сторожевика было в самом начале main().

Полный девайс ресет по сигналу WDT вызывает сброс счетчика WDT, как и команда CLRWDT.
jcxz
Цитата(dinam @ Aug 23 2012, 11:28) *
Сбросом отдельно дергаете, не отключая питания?
Честно говоря я так и не понял в чем засада. И почему он тогда не считывал из внешней EEPROM или криво?
Я уже не помню дергал-ли отдельно сбросом. Помню что была проблема с чтением EEPROM сразу после ресета или включения питания. Но контроллер при этом перезапускался и работал как если бы EEPROM не было.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.