Accueil du site > Documentation > Les micro-contrôleurs sans ta mère  > Péter correctement les plombs

(JPG)

La théorie

Les micro-contrôleurs ATMEL sont configurables par le biais de fuse bits et de lock bits.

Il s’agit d’informations non volatiles, qu’il est possible de configurer via l’ISP entre autres, et qui définissent un certain nombre de propriétés, comme par exemple :

  • la configuration de l’horloge, entre l’utilisation de l’oscillateur interne, d’un quartz externe, d’une horloge externe,...
  • la manière dont il démarre
  • la possibilité de provoquer le reset on non via la pin /RESET
  • et bien d’autres trucs encore
Comme d’hab, pour en savoir plus, et surtout éviter de faire les frais d’explications approximatives ou fausses que des énergumènes comme moi pourraient vous donner, il convient d’appliquer ici encore l’adage numéro 1 de la profession :

“Le datasheet ta Bible sera, et à tes questions, réponse il apportera”

Là où ça coince un peu sur le sujet des fuse bits et consorts, c’est que dans le doc, ATMEL utilise une convention qui peut troubler au début. Un fuse bit est en effet dit programmé quand il a la valeur 0. Cela est dit de la manière suivante en page 24 du datasheet :

For all fuses “1” means unprogrammed while “0” means programmed.

Bon, on aurait pu penser le contraire, mais c’est comme cela.

Le problème est que, si vous utilisez PonyProg par exemple pour les programmer, il représente par des cases à cocher la valeur binaire du bit en mémoire. Si vous faites le raisonnement :

-  "1" je coche la case,
-  "0" je la décoche,

et bien vous aurez gagné un ATMEL sauvage, qui souvent ne sera plus utilisable. Car vous l’aurez programmé à l’envers, et en tout cas pas du tout comme vous le souhaitiez. Il existe des techniques pour ramener à la raison de tels mutants, mais c’est tricky, car la plupart du temps, la liaison ISP ne sera plus disponible. Le temps étant de l’argent, si cela devait vous arriver, il est beaucoup plus rentable (y compris pour les nerfs) d’aller dire un petit bonjour à votre fournisseur attitré de composants, vu le prix moyen d’un ATmega de base.

Conclusion, pour traduire la programmation des fuse bits en coche de case PonyProg, inversez les 1 et les 0 des tableaux de la doc.

La pratique

Pour vous aider à y voir plus clair, voici le paramétrage affiché par PonyProg des fuse bits d’un ATmega163 (ils sont affichés dans le deuxième cadre, le premier étant les lock bits).

Comme vous pouvez le constater, l’auteur de PonyProg a pensé à nous rappeler l’interprétation des case à cocher vis à vis de la valeur binaire des bits telle que définie dans le datasheet.

Si on effectue la même lecture des fuse bits avec avrdude, cela donne ce qui suit :

On constate bien que les valeurs 0x07 et 0xca, soit en binaire 00000111 et 11001010, correspondent à ce que nous attendions, sachant que les cases grisées représentent des bits non utilisés valant toujours 0.

Au passage : Pour les réfractaires de la ligne de commande, et si (comme moi maintenant) vous ne pouvez plus utiliser PonyProg car votre nouvelle machine n’a plus de port parallèle, et que par conséquent votre bon vieux programmer à 2 sous n’est plus utilisable, il existe une interface graphique pour avrdude qui s’appelle avrdude-gui. Elle a de plus l’avantage de montrer la ligne de commande équivalent, ce qui, vu l’indigence de la documentation d’avrdude n’est pas du luxe.

Le mot de la fin

Pour tout savoir sur les fuse bits de l’ATmega8, rendez-vous page 220 du datasheet.


Répondre à cet article