Respostas:
Alguns produtos devem atender aos requisitos de segurança, determinados pelo fabricante ou para atender aos padrões internacionais de segurança, como IEC 60730-1, ou o UL1998 mais antigo, ainda em uso nos EUA. A funcionalidade de watchdog interno em qualquer microcontrolador pode ou não ser adequada para ser usada. Um WDT externo pode ser usado em combinação com o WDT interno em alguns casos.
Certos microcontroladores, como a série Hercules da TI, levam muito a sério as aplicações críticas do sistema de segurança e são mais propensas a atender a requisitos rigorosos; no entanto, podem não ser apropriadas para aplicações sensíveis aos custos.
Normalmente, o WDT é uma das várias maneiras de reduzir a probabilidade de uma falha causar danos catastróficos à propriedade ou ferimentos à vida. Outras coisas, como proteção de memória para detectar acesso inesperado à memória do MCU ou busca de programas a partir da memória não utilizada, geralmente são usadas em conjunto com um WDT.
Exemplos de produtos baratos que desempenham funções críticas de segurança são subsistemas automotivos, controladores de portas de garagem e controladores de ignição a gás (gás natural ou propano) usados em fornos, secadores e aquecedores de água. É claro que muitos produtos médicos e aeroespaciais também são críticos para a segurança, mas pode haver espaço suficiente para redundância e outras abordagens. Em alguns casos, pode não haver um estado seguro facilmente alcançável - por exemplo, em uma aeronave.
Idealmente, o timer do watchdog é muito simples, independente do MCU (por exemplo, ele deve ter sua própria fonte de relógio e talvez um monitor de relógio), não pode ser definido (por software) por um tempo maior do que causaria danos por qualquer erro de software, e tornará o sistema em um estado seguro se não for "acariciado" a tempo, com um tempo limite ou em uma janela, para que redefinições muito frequentes possam ser detectadas. Por exemplo, um WDT em um aplicativo de controle térmico pode ser definido para alguns segundos, porque nenhum dano é possível se o microcontrolador travar por esse período de tempo.
O WDT é mais útil como parte de uma abordagem em nível de sistema para confiabilidade e segurança.
Um watchdog timer pode proteger contra erros de hardware no pedaço de buggy de ... corte microcontroladores de ponta. Um que usamos recentemente, de uma marca famosa, possuía pinos de E / S que ocasionalmente perdiam suas interrupções, às vezes não inicializavam corretamente e onde o cão de guarda integrado às vezes falhava em redefinir o sistema em um estado conhecido.
Isso não apareceu até começarmos com os testes de confiabilidade de longa data, e era mais fácil adicionar um cão de guarda externo do que trocar o microcontrolador.
Se você tiver mais de um IC na placa de circuito impresso, também poderá precisar de um IC de reinicialização externo ou de um monitor de tensão para que tudo seja inicializado de maneira confiável. Muitos deles também podem servir como um cão de guarda.
É difícil argumentar que o relógio interno do cão de guarda interno é realmente independente de todos os outros relógios e está sempre funcionando como deveria.
Portanto, para a certificação, geralmente é muito mais fácil colocar um cão de guarda externo na placa e dizer: olha, existe o nosso cão de guarda, ele deve ser acionado pelo MCU nesse intervalo, que é menor do que o tempo de falha, portanto nosso dispositivo está seguro como o definimos.
Para abordar alguns dos comentários:
"e sempre funcionando como deveria" - Bom argumento. Pode ser mais difícil provar que o seu software inicializa corretamente o cão de guarda interno sob todas as circunstâncias do que apenas empregar um chip de cão de guarda e consultar a folha de dados.
Isso geralmente é comprovado por um teste de inserção de falha, que você apresenta a um organismo de certificação. Então, você mostra o código onde sua inicialização ocorre e onde o acionamento do watchdog acontece. Eles geralmente solicitam que você modifique o código de forma que o acionamento do watchdog seja interrompido após um certo tempo e verifique se o controlador foi redefinido corretamente.
Ou para provar que seu código não contém um bug que desabilita acidentalmente o cão de guarda interno.
Pelo menos em alguns controladores, o watchdog é chamado de independente e tem sua própria fonte de clock e não pode ser desativado por meios de software, apenas uma redefinição do controlador desativará o watchdog. Pelo menos em teoria - é fácil mostrar que você não pode pará-lo por software, mas é difícil provar que o relógio é verdadeiramente independente e não para sob EMI.
Ou para provar que seu código não corre solto, redefinindo continuamente o cão de guarda externo o mais rápido possível. Problema resolvido. ;-)
Nesse caso, você usa um watchdog de janela que deve ser acionado em determinados intervalos e, se não o fizer (acioná-lo com muita frequência ou menos), redefinirá o circuito. O STM32 com o qual estou trabalhando possui um watchdog de janela interno, mas ele é executado a partir do PCLK1, que é derivado do clock principal, portanto, não acho que seja tão útil quanto um watchdog externo com sua própria fonte de clock.
Ou que algum gênio não coloca a rotina de serviço de vigilância dentro de um ISR de timer, para que o código principal possa falhar, mas a interrupção continua disparando e atendendo perfeitamente ao cão de guarda ...
Isso certamente é verdade, mas espero que uma revisão coloque esse gênio de volta em sua cadeira - mas ei, quando eu comecei, essa foi minha primeira ideia também: D. Durante os processos de certificação em que participei, eles sempre deram uma olhada na parte de vigilância do software.
Os cães de guarda incorporados aos microcontroladores têm propriedades particulares que significam que eles próprios podem falhar de maneiras que um cão de guarda externo diferente pode não ter.
Por exemplo, um design comum é usar um cronômetro de vigilância executando um oscilador RC de baixa potência. Esse oscilador pode falhar. Um cão de guarda externo baseado na descarga do capacitor em vez de um oscilador ainda pode reiniciar o microcontrolador em muitos casos.
Outro motivo é que o cão de guarda externo pode ser mais robusto. Um microcontrolador pode operar apenas de forma confiável em uma certa faixa de tensão, e ser um dispositivo complexo pode estar sujeito a travamento de uma maneira que torna seu próprio cão de guarda interno ineficaz. Um cão de guarda externo pode ter uma faixa de fornecimento aceitável mais ampla e menos propenso a problemas quando sujeito a ruído elétrico.
Watchdogs externos também oferecem uma faixa muito maior de valores de tempo limite. Um microcontrolador que uso com freqüência, o XMEGA, tem um tempo limite máximo de cerca de 7 segundos. Para um produto, adicionei um watchdog externo adicional com tempo limite de 2 horas. Isso me permitiu acordar o microcontrolador uma vez por hora e não a cada poucos segundos, reduzindo o consumo de energia em um dispositivo alimentado por bateria.
Cães de guarda externos às vezes têm várias funções, como um temporizador e um monitor de tensão / controle de redefinição. Novamente, eles também podem ter uma potência menor do que o sistema embutido de um microcontrolador.
Uma outra vantagem interessante de um cão de guarda externo é que ele pode ser usado para redefinir outros dispositivos além do microcontrolador. Por exemplo, ele pode controlar o pino de habilitação de um regulador de tensão, desligando um circuito inteiro para redefinir vários dispositivos ao mesmo tempo. Usando uma lógica simples, o sinal de redefinição do watchdog de várias fontes pode ser combinado, permitindo que o watchdog exija que vários dispositivos o redefinam continuamente.
Um cão de guarda não é realmente diferente nesse aspecto de qualquer outro periférico interno encontrado em um MCU. Os MCUs vêm com temporizadores, RTCs, ADCs, EEPROM e redefinir controladores, mas todas essas funções também existem como ICs separados. Se os blocos internos disponíveis não atenderem aos seus requisitos, você deverá usar os externos. Ou você pode tentar encontrar um MCU com todos os blocos certos, que podem não existir ou ser muito caros ou difíceis de transportar seu código.
Um watchdog é um timer e ativa sua saída quando o IC perde um pulso de entrada por um período.
É um componente básico e pode ser usado para qualquer aplicação.
Portanto, eles podem ser usados em qualquer aplicativo, por exemplo, alterar o roteamento de dados no modo à prova de falhas . Quando o relógio do microcontrolador falha, não podemos desativar algumas saídas críticas.
Um watchdog externo não está relacionado ao domínio complexo do clock do microcontrolador, e alguns deles têm seu tempo de carga RC analógico ou clock interno.
Os circuitos digitais na radiação podem acionar as saídas quando a carga atinge seus flip-flops. Mas alguns circuitos analógicos são mais seguros porque integram carga em um capacitor e é seguro quando o integramos.