Étape 3: Lecture et écriture des fusibles
Dans un précédent instructable, j’ai démontré comment vous pouvez lire et mettre vos fusibles à l’aide de votre programmateur et avrdude. Ici, je vais vous montrer comment faire pour relire vos fusibles en cours d’exécution pour voir comment votre MCU a effectivement mis eux. Notez que ce n’est pas le paramètre de compilation que vous obtenez des définitions en < avr/io*.h > mais les fusibles réelles que le MCU leur lit au moment de l’exécution.
De la Table 27-9, dans la fiche technique du ATmega328P (databook, mieux comme ça) les bits de l’octet bas fusible sont comme suit :
Une chose intéressante à noter est qu’avec fusibles, 0 signifie programmé et un 1 signifie que ce bit particulier est non programmé. Un peu contre-intuitif, mais une fois que vous le connaissez vous le savez.
- CKDIV8 définit votre horloge CPU à diviser par 8. La ATmega328P vient de l’usine programmée pour utiliser son oscillateur interne à 8MHz avec CKDIV8 programmé (c’est à dire la valeur 0) qui vous donne un final F_CPU ou CPU fréquence de 1MHz. Sur l’Arduino, cela est changé puisqu’ils sont configurés pour utiliser un oscillateur externe à 16MHz.
- CKOUT la programmation va afficher votre horloge CPU sur PB0, qui est la broche numérique 8 sur Arduinos.
- SUT [1..0] indique l’heure de démarrage de votre AVR.
- CKSEL [3..0] définit la source de l’horloge, tels que l’oscillateur RC interne, oscillateur externe.
Lorsque vous lisez vos fusibles, il sera retourné pour vous au format hexadécimal. C’est le format dont vous avez besoin si vous voulez écrire les fusibles via avrdude. Sur mon arduino, voici ce que j’obtiens quand j’ai lu l’octet inférieur de fusible :
Ainsi, tous les bits sont définis sur 1. J’ai fait la même procédure sur un clone de l’Arduino et obtenu la même valeur. Vérification d’un de mes systèmes autonomes d’AVR, je me suis 0xDA qui est la valeur que j’avais mis quelques temps dos lors de la configuration de la puce.
La même procédure est utilisée pour vérifier l’octet haut de fusible, étendu octet de fusible, et fusibles de verrouillage. L’étalonnage et la signature fusible octets ont été désactivés dans le code par une directive de préprocesseur #if 0, que vous pouvez modifier si vous vous sentez décousu.