Le Watchdog

Transcription

Le Watchdog
Le Watchdog (Chien de garde)
1 Présentation :
Le chien de garde (WDT) est un périphérique de sécurité qui provoque un Reset du µC en cas
de « plantage » du programme.
Les causes de plantage sont de 2 ordres.
1.1 Causes matérielles (électriques) :
Ex : un parasite radio peut véhiculer assez d’énergie pour modifier le niveau logique d’une
piste de circuit imprimé reliée au µC. Celui-ci lira alors une donnée ou une adresse
incohérente, pour lesquelles son programme n’a pas été prévu.
1.2 Causes logicielles :
Ex : une application fournit au µC des informations que le programmeur n’a pas pris en
compte dans la conception de son programme (comme un clavier sur lequel plusieurs touches
sont pressées simultanément, alors que le code et le fonctionnement normal de l’appli ne
prévoient que l’appui sur une seule touche à la fois).
Dans les 2 cas, le compteur de programme pourra sauter à une adresse de la mémoire de
programme non écrite, certains codes aléatoires présents pourront correspondre à des boucles
sans fin à l’intérieur de cette zone mémoire.
2 Fonctionnement :
Le WDT de l’ATmega 16 est un compteur 16 bits qui provoque un Reset lorsqu’il atteint sa
valeur max (0xFFFF).
Lors de l’exécution normale du programme, il doit donc être régulièrement remis à ‘0’ avant
d’atteindre cette valeur. Si le programme se plante, le WDT n’est pas remis à zéro et le
programme redémarre après que le µC soit passé par un Reset.
Le départ en Reset du au WDT est une anomalie qui doit être considérée comme une bouée de
sauvetage pour votre application dont le fonctionnement risque le plus souvent d’être perturbé
par ce Reset intempestif.
Remarque :
Le registre de comptage du WDT n’est pas accessible, à l’inverse d’autres watchdog de µC.
On ne pourra donc pas s’en servir comme d’un timer auxiliaire.
3 Description :
3.1 Registre : WDTCR (valeur initiale 00)
7
-
6
-
5
-
4
WDTOE
3
WDE
2
WDP2
1
WDP1
0
WDP0
WDP2, WDP1, WDP0 : réglage de la durée selon tableau ci-dessous
1
WDE : Watchdog enable. Mis à ‘1’ pour mise en fonction du chien de garde.
Pour prévenir une mise hors fonction accidentelle du watchdog, l’écriture d’un ‘0’ pour sa
mise hors fonction n’est possible que si le bit WDTOE est à ‘1’.
WDTOE : Watchdog turn-off enable. Lorsque ce bit est mis à ‘1’, il y reste durant 4 cycles
d’horloge pendant lesquels il est possible de remettre à zéro le bit WDE.
3.2 Tableau des temps de cycle du watchdog
Remarque : Le WDT posséde sa propre base de temps, indépendante du quartz du composant.
Cette BdT est fonction de Vcc.
(Vcc 5V → fWDT 1MHz)
WDP2 WDP1 WDP0
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
Temps de cycle
(ms)
16.3
32.5
65
130
260
520
1040
2080
3.3 Schéma équivalent :
WDT
oscillator
H
Registre de comptage
16 bits
RaZ
WDR
instruction
WDP0
WDP1
WDP2
WDE
&
MCU Reset
Watchdog de l'ATmega 16
4 Mise en œuvre :
Procéder par approches successives, à partir de la durée maxi du WDT. Prendre un coefficient
de sécurité pour le réglage définitif.
2
Ne pas recharger le WDT à l’intérieur d’une IT périodique car celle-ci pourrait être servie
malgré que le µC soit planté.
La programmation en C nécessite de définir une macro pour l’utilisation de l’instruction
WDR (Reset Watchdog) ; à ajouter dans iom16v.h :
#define
NONOS
asm("WDR")
Exemple de code pour mise hors fonction du Watchdog :
void WDT_Off (void)
{
WDTCR |= (1<<WDTOE);
WDTCR &=~(1<<WDE);
}
3