
|
Introduction |
Les fusibles ont toujours existé dans la famille AVR ne serait ce que pour la protection contre le téléchargement de programme afin
d'empecher la duplication ou le désassemblage; bref de quoi verrouiller le programme de toute curiosité industrielle.
La classe ATMEGA c'est vue doté de nouveaux fusibles permettant de multiples réglages : source et vitesse d'horloge, détecteur de sous-tension (brown-out)... d'ou un total de 21 Fusibles :

Copie d'ecran des fusibles sur un ATMEGA32 avec le logiciel Pony Prog
Nous étudierons ici l'integralité des fusibles que possède l'AMEGA32 afin de mettre en service le programme correctement.
Avant de commencer la description de chaque fusible, il est important de revenir sur jargon utilisé par Atmel :
Un fusible programmé à pour valeur "0"
Un fusible non programmé à pour valeur "1" |
On peut donc retenir que la logique intellectuelle est inversée.

|
Les Fusibles |
Les valeurs par défauts seront indiquées par une couleur rouge
LES FUSIBLES DE PROTECTION
-
Bootlock2, Bootlock1 : Il s'agit d'une paire de fusibles destinés à contrôler les droits d'accès aux mémoires FLASH et EEPROM.
Bootlock2 |
Bootlock1 |
Type de protection |
1 |
1 |
Aucune restriction d'acces aux mémoires. |
1 |
0 |
Aucune programmation possible de la FLASH ou de l'EEPROM par programmation série et parallèle. La programmation des fusibles est désactivée |
0 |
0 |
Aucune programmation et vérification possible de la FLASH ou de l'EEPROM par programmation série et parallèle. La programmation des fusibles est désactivée |
-
Bootlock02, Bootlock01 : Il s'agit d'une paire de fusibles destinés à contrôler les droits d'accès de la section application (Zone de programme principale) par les instructions SPM (Store Program Memory) et LPM (Load Program Memory)
Bootlock02 |
Bootlock01 |
Type de protection |
1 |
1 |
Aucune restriction pour accéder à la section application à l'aide des instructions SPM ou LPM. |
1 |
0 |
L'instruction SPM ne peut pas écrire dans la section application. |
0 |
0 |
l'instruction SPM ne peut pas écrire dans la section application et LPM exécutée depuis le bootloader ne pas lire dans la section application. Si des vecteurs d'interruptions sont placés dans la section bootloader, les interruptions ne pourront pas êtres exécutées depuis la section application. |
0 |
1 |
L'instruction LPM exécutée depuis le bootloader de ne pas lire dans la section application et si des vecteurs d'interruptions sont placés dans la section bootloader, les interruptions ne pourront pas êtres exécutées depuis la section application. |
Bootlock12 |
Bootlock11 |
Type de protection |
1 |
1 |
Aucune restriction pour accéder à la section du bootloader à l'aide des instructions SPM ou LPM. |
1 |
0 |
L'instruction SPM ne peut pas écrire dans la section bootloader. |
0 |
0 |
l'instruction SPM ne peut pas écrire dans la section bootloader et LPM exécutée dans l'application de ne pas lire dans la section du bootloader.
Si des vecteurs d'interruptions sont placés dans la section applicationr, les interruptions ne pourront pas êtres exécutées depuis le bootloader. |
0 |
1 |
L'instruction LPM exécutée dans l'application de ne pas lire dans la section du bootloader.
Si des vecteurs d'interruptions sont placés dans la section applicationr, les interruptions ne pourront pas êtres exécutées depuis le bootloader. |

LES FUSIBLES "HAUT"
Fuse |
Description |
Valeur par defaut |
OCDEN |
Activation de OCD. Ce fusebit permet d'activé quelques fonctionnalités du systeme d'horloge pour fonctionner dans les modes sommeils. Ce fusible fonctionne généralement avec le JTAG. Je vous conseille ne pas changer sa valeur par défaut. |
1 - Désactivé |
JTAGEN |
Activation du JTAG.
Le JTAG est une interface de programmation et communication. Elle permet la programmation du microcontroleur tout comme la programmation ISP et le déboguage des applications en temps réel. Elle necessite cependant une interface electronique particulière. |
0 - JTAG activée |
SPIEN |
Activation du SPI pour la programmation et la lecture du programme.
Ne pas changer la valeur de ce fusible sous peine de ne plus pouvoir le programmer par la SPI |
0 - SPI activée |
CKOPT |
Options de l'oscillateur (voir mode horloge). |
1 |
EESAVE |
Préservation du contenu de l'EEprom lors de l'effacement du micro. |
1 - contenu non préservé |
BOOTSZ1 |
Sélection de la taille du secteur de Boot (voir tableau suivant). |
0 |
BOOTSZ0 |
Sélection de la taille du secteur de Boot (voir tableau suivant). |
0 |
BOOTRST |
Sélection du vecteur de Reset; soit au vecteur $0000 ou Bootloader.
Si un bootloader est écrit, faire démarrer le programme au secteur du Bootloader |
1 - vecteur $0000 |
Paramétrage des Fusibles BOOTSZ :
BOOTSZ1 |
BOOTSZ0 |
Taille du secteur de BOOT |
Section attribuée au programme |
Section attribuée au Bootloader |
1 |
1 |
256 words |
$0000 - $3EFF |
$3F00 - $3FFF |
1 |
0 |
512 words |
$0000 - $3DFF |
$3E00 - $3FFF |
0 |
1 |
1024 words |
$0000 - $3BFF |
$3C00 - $3FFF |
0 |
0 |
2048 words |
$0000 - $37FF |
$3800 - $3FFF |

LES FUSIBLES "BAS"
Fuse |
Description |
Valeur par defaut |
BODLEVEL |
Choix du niveau trigger du BOD. il s'agit tout simplement de la tension sous laquelle le trigger enclenche le BOD :
1 = 2,7 Volts ; 0 = 4 Volts |
1 - 2,7 Volts |
BODEN |
Activation du BOD ( Brown-Out Detector)
Le BOD est l'quivalent du chien de garde externe. Il surveille la tension d'alimentation. En cas de franchissement inférieure du point de consigne donné par BODLEVEL, le BOD met le microcontroleur hors service (RESET). Cela permet au démarrage d'eviter les corruptions mémoire, puis en fonctionnement, de corrompre le fonctionnement de périphériques reliés au microcontroleur (LCD, mémoire de masse ect...)
C'est une sécurité digne des applications industrielles. |
0 - BOD désactivé |
SUT1 |
Sélection du temps de démarrage |
1 |
SUT0 |
Sélection du temps de démarrage |
0 |
CKSEL3 |
Sélection de la source d'horloge |
0 |
CKSEL2 |
Sélection de la source d'horloge |
0 |
CKSEL1 |
Sélection de la source d'horloge |
0 |
CKSEL0 |
Sélection de la source d'horloge |
1 |
Les microcontrôleurs ATMEGA possèdent une multitude de mode oscillatoire. Ainsi, ils sont livrés par défaut sur une source d'horloge interne calibrée à 1 MHZ. Donc la première opération à faire sera de régler les Fusebits suivant les paramètres physique réel. Certain d'entre vous trouverons un peu "lourd" la configuration de ces fusibles, mais ne perdez pas de vue les différents avantages énumérés depuis le début de ce chapitres. Intéressons nous maintenant aux différents modes d'horloges. A noter que seuement les modes les plus utilisés seront décrits.

|
Le mode oscillateur RC interne calibré |
Ce mode permet de se servir de l'oscillateur interne de type RC à des vitesse pré-définies de 1,2,4,8 Mhz. Ces vitesses sont données pour une tension d'alimentation de 5V et 25°C. Les fusibles CKOPT doivent toujours êtres sélectionnés sur "non-programmé".
Le calibration de l'oscillateur ne serat pas abordé dans ce chapitre.
Sélection de la fréquence d'oscillation :
CKSEL3 |
CKSEL2 |
CKSEL1 |
CKSEL0 |
Fréquence (MHZ) |
| 0 |
0 |
0 |
1 |
1 |
| 0 |
0 |
1 |
0 |
2 |
| 0 |
0 |
1 |
1 |
4 |
| 0 |
1 |
0 |
0 |
8 |
Mode de démarrage :
SUT1 |
SUT0 |
Temps de démarrage après mode POWER-DOWN et POWER-SAVE |
Temps de démarrage apres RESET |
Mode |
0 |
0 |
6 CK |
- |
BOD Activé |
0 |
1 |
6 CK |
4.1 ms |
Fast Rising Power |
1 |
0 |
6 CK |
65 ms |
Slowly Rising Power |
1 |
1 |
RESERVE |

|
Le mode oscillateur Externe à Quartz |
Il s'agit certainement du mode le plus utilisé. Je tenais juste à préciser un point bien précis concernant l'utilisation du fusible CKOPT :
ce bit permet de selectionner 2 mode de fonctionnement différents; il agit sur l'amplificateur d'horloge : quand il est programmé, la sortie de l'oscillateur fonctionne en mode rail to rail, soit la capacité maximum. Ce mode est préféreable dans les environnements "bruyants" (entendez par là, perturbation electriques en tout genres) ou quand la sortie XTAL2 pilote une autre source d'horloge.
Si il n'est pas programmé, l'amplification est moindre, et ne permettra pas de pilotage externe d'une autre source d'horloge, en contre partie, le circuit d'oscillation consommera moins d'energie et à une fréquence de fonctionnement limitée.
Atmel préconnise de programmer ce fusible pour 16 Mhz de fonctionnement avec un resonnateur.
Sélection de la fréquence d'oscillation :
CKOPT |
CKSEL3 |
CKSEL2 |
CKSEL1 |
Plage de Fréquence (MHZ) |
Capacité d'oscillation recommendée |
1 |
1 |
0 |
1 |
0.4 -0.9 * |
- |
1 |
1 |
1 |
0 |
0.9 - 3.0 |
12 - 22 pf |
1 |
1 |
1 |
1 |
3.0 - 8.0 |
12 - 22 pf |
0 |
101,110,111 |
1.0 <= |
12 - 22 pf |
* Seulement avec résonnateur céramique.
Mode de démarrage :
CKSEL0 |
SUT1 |
SUT0 |
Temps de démarrage après mode POWER-DOWN et POWER-SAVE |
Temps de démarrage apres RESET |
Mode |
1 |
0 |
1 |
16K CK |
- |
BOD activé |
1 |
1 |
0 |
16K CK |
4.1 ms |
fast rising power |
1 |
1 |
1 |
16K CK |
65 ms |
slowly rising power |
Pour tout les autres modes, je vous renvois au datasheet correspondant. Avant de clore le chapitre, je souhaiterai vous sensibiliser sur la qualité du "parcours" que doivent emprunter les signaux d'horloge sur le circuit imprimé : les pistes devront êtres les plus courtes possibles, évitez les cassures d'angle de piste trop nombreuses, et enfin, arranger vous pour que les condensateurs soient toujours au plus près du quartz.
|