Risposte:
Alcuni prodotti devono soddisfare i requisiti di sicurezza, determinati dal produttore o conformi agli standard di sicurezza internazionali come IEC 60730-1, o il precedente UL1998 che è ancora in uso negli Stati Uniti. La funzionalità di controllo interno di un determinato microcontrollore può o meno essere adeguata per essere utilizzata. In alcuni casi è possibile utilizzare un WDT esterno in combinazione con il WDT interno.
Alcuni microcontrollori come la serie Hercules di TI prendono molto sul serio le applicazioni di sistema critiche per la sicurezza e hanno maggiori probabilità di soddisfare requisiti rigorosi, tuttavia potrebbero non essere appropriate per applicazioni sensibili ai costi.
In genere il WDT è uno dei numerosi modi per ridurre la probabilità di un guasto che causa danni catastrofici alla proprietà o lesioni alla vita. Altre cose come la protezione della memoria per rilevare l'accesso imprevisto alla memoria MCU o i recuperi di programma dalla memoria non utilizzata sono di solito utilizzati insieme a un WDT.
Esempi di prodotti economici che svolgono funzioni critiche per la sicurezza sono i sottosistemi automobilistici, i controller per porte da garage e i controller di accensione a gas (gas naturale o propano) utilizzati in forni, essiccatori e scaldabagni. Naturalmente molti prodotti medici e aerospaziali sono anche critici per la sicurezza, ma potrebbe esserci spazio sufficiente per ridondanza e altri approcci. In alcuni casi, potrebbe non esserci uno stato sicuro facilmente raggiungibile, ad esempio in un aereo.
Idealmente, il timer del watchdog è molto semplice, indipendente dall'MCU (ad esempio, dovrebbe avere una propria sorgente di clock e forse un monitor di clock), non può essere impostato (dal software) su un tempo più lungo di quello che causerebbe danni da qualsiasi errore del software, e renderà il sistema in uno stato sicuro se non viene "accarezzato" in tempo, con un timeout o in modo tale che possano essere rilevati ripristini troppo frequenti. Ad esempio, un WDT in un'applicazione di controllo termico potrebbe essere impostato su alcuni secondi perché non è possibile alcun danno se il microcontrollore si blocca per quel periodo di tempo.
Il WDT è molto utile come parte di un approccio a livello di sistema a affidabilità e sicurezza.
Un timer watchdog può proteggersi da bug hardware nel ... microcontrollori all'avanguardia. Uno che abbiamo usato di recente, di un marchio famoso, aveva pin I / O che a volte mancavano i loro interrupt, a volte non si avviavano correttamente e dove il watchdog integrato a volte non riusciva a ripristinare il sistema in uno stato noto.
Ciò non si è verificato fino a quando non abbiamo iniziato con test di affidabilità a lungo, ed è stato più facile aggiungere un cane da guardia esterno che cambiare il microcontrollore.
Se sul PCB è presente più di un IC, potrebbe essere necessario anche un IC di ripristino esterno o un monitor di tensione per avviare tutto in modo affidabile. Molti di questi possono anche fungere da cane da guardia.
È difficile sostenere che l'orologio interno del cane da guardia interno sia effettivamente indipendente da tutti gli altri orologi e che funzioni sempre come dovrebbe.
Quindi per la certificazione è di solito molto più facile posizionare un watchdog esterno sulla scheda e dire: guarda c'è il nostro watchdog, deve essere attivato dall'MCU a quell'intervallo, che è più breve del nostro tempo di guasto, quindi il nostro dispositivo è sicuro come l'abbiamo definito.
Per rispondere ad alcuni dei commenti:
"e sempre correndo come dovrebbe" - Buon punto. Potrebbe essere più difficile provare che il software inizializza correttamente il watchdog interno in tutte le circostanze piuttosto che impiegare un chip watchdog e fare riferimento al relativo foglio dati.
Questo di solito è dimostrato da un test di inserimento degli errori, presentato a un ente di certificazione. Quindi mostri loro il codice in cui avviene l'inizializzazione e dove si verifica l'attivazione del watchdog. Di solito ti chiedono di modificare il codice in modo tale che l'attivazione del watchdog venga interrotta dopo che è trascorso un certo tempo e controlla se il controller è ripristinato correttamente.
O per dimostrare che il tuo codice non contiene un bug che disabilita accidentalmente il watchdog interno.
Almeno su alcuni controller il watchdog è chiamato indipendente e ha una propria sorgente di clock e non può essere disabilitato tramite software, solo un reset del controller disabiliterà il watchdog. Almeno in teoria - è facile dimostrare che non è possibile fermarlo dal software, ma è difficile dimostrare che l'orologio è veramente indipendente e non si fermerà sotto l'IME.
O per dimostrare che il tuo codice non funziona in modo selvaggio reimpostando continuamente il watchdog esterno il più velocemente possibile. Problema risolto. ;-)
In tal caso si utilizza un watchdog della finestra che deve essere attivato a determinati intervalli e se non si riesce a farlo (attivarlo troppo spesso o troppo meno) ripristinerà il circuito. L'STM32 con cui sto lavorando ha un watchdog interno della finestra, ma gira da PCLK1 che deriva dall'orologio principale, quindi non penso che sia utile come un watchdog esterno con una propria sorgente di clock.
O che un po 'di genio non inserisce la routine di servizio del watchdog all'interno di un ISR timer, quindi il codice principale può bloccarsi ma l'interrupt continua a sparare e riparare perfettamente il watchdog ...
Questo è certamente vero, ma speriamo che una recensione riporti quel genio sulla sua sedia - ma hey quando ho iniziato, quella era anche la mia prima idea: D. Durante i processi di certificazione a cui ho partecipato, hanno sempre dato un'occhiata alla parte del software di controllo.
I watchdog integrati nei microcontrollori hanno proprietà particolari che significano che essi stessi possono fallire in modi che un diverso watchdog esterno potrebbe non avere.
Ad esempio, un design comune consiste nell'utilizzare un timer watchdog che parte da un oscillatore RC a bassa potenza. Quell'oscillatore può fallire. Un watchdog esterno basato sulla scarica di condensatori anziché su un oscillatore potrebbe comunque ripristinare il microcontrollore in molti casi.
Un altro motivo è che il cane da guardia esterno può essere più robusto. Un microcontrollore potrebbe funzionare in modo affidabile solo entro un determinato intervallo di tensione e, essendo un dispositivo complesso, potrebbe essere bloccato in modo da rendere inefficace il proprio watchdog interno. Un cane da guardia esterno può avere un intervallo di approvvigionamento più ampio accettabile ed essere meno soggetto a problemi quando è soggetto a rumore elettrico.
I cani da guardia esterni spesso offrono anche una gamma molto più ampia di valori di timeout. Un microcontrollore che utilizzo spesso, l'XMEGA, ha un timeout massimo di circa 7 secondi. Per un prodotto ho aggiunto un watchdog esterno aggiuntivo con timeout di 2 ore. Ciò mi ha permesso di riattivare il microcontrollore una volta ogni ora anziché una volta ogni pochi secondi, riducendo il consumo di energia in un dispositivo alimentato a batteria.
I watchdog esterni a volte hanno più funzioni, come un timer e un controllo di monitoraggio / reset della tensione. Anche in questo caso, questi possono avere una potenza inferiore rispetto al sistema integrato di un microcontrollore.
Un altro vantaggio interessante di un cane da guardia esterno è che può essere utilizzato per ripristinare dispositivi diversi dal microcontrollore. Ad esempio, potrebbe controllare il pin di abilitazione di un regolatore di tensione, disattivando un intero circuito per ripristinare più dispositivi contemporaneamente. Utilizzando una semplice logica, è possibile combinare il segnale di ripristino del watchdog da più fonti, consentendo al watchdog di richiedere che diversi dispositivi lo ripristinino continuamente.
Un watchdog non è davvero diverso in questo senso da qualsiasi altra periferica integrata che trovi in un MCU. Gli MCU sono dotati di timer, RTC, ADC, EEPROM e controller di ripristino, ma tutte queste funzioni esistono anche come circuiti integrati separati. Se i blocchi integrati disponibili non soddisfano i tuoi requisiti, devi utilizzare quelli esterni. Oppure puoi provare a trovare un MCU con tutti i blocchi giusti, che potrebbero non esistere o essere troppo costosi o difficili da trasferire nel tuo codice.
Un watchdog è un timer e attiva la sua uscita quando l'IC ha perso un impulso di ingresso per un periodo.
È un blocco e può essere utilizzato per qualsiasi applicazione.
Pertanto, possono essere utilizzati in qualsiasi applicazione, ad esempio in cui modificare il routing dei dati modalità fail-safe . Quando l'orologio del microcontrollore fallisce, non possiamo disabilitare alcune uscite critiche.
Un cane da guardia esterno non è correlato al complesso dominio dell'orologio del microcontrollore e alcuni di essi hanno il loro tempo di carica RC analogico o clock interno.
I circuiti digitali in radiazione possono attivare le uscite quando la carica colpisce i loro infradito. Ma alcuni circuiti analogici sono più sicuri perché integrano la carica in un condensatore ed è sicuro quando lo integriamo.