Table des matières

Bootloaders pour ATmega8 / ATmega328p

Pour le projet LedHill, on a eu besoin de graver 30 bootloaders sur des ATmega8. On n'a pas de programmateur et on le fait donc avec des Arduinos. Comme toujours, il nous a fallu 2h de debug avant de graver le premier :) (mais cette fois, ça a été rentable avec 30 bootloaders gravés d'un coup !).

Du coup, voici une petite compil' des liens qui marchent et des trucs importants à vérifier pour ne pas perdre deux heures (les messages d'erreur du soft Arduino étant tellement explicites… et il y a 10 méthodes différentes, chacune aboutissant à une erreur différente sur le net).

Tout d'abord, un bon lien qui marche bien : ArduinoToBreadboard dans la doc Arduino. Les montages sont clairs et ont été testé par moi-même ces derniers jours :).

Gravure de bootloader

On grave le bootloader à l'aide d'un autre ATmega qu'on utilise comme programmateur et qui communique avec l'ATmega à graver en SPI. Le montage à faire est le suivant :

Il faut envoyer le sketch ArduinoISP (trouvables dans les exemples) sur l'Arduino Uno, puis bien choisir « Arduino as ISP » dans le choix des programmateurs et graver la séquence d'initialisation, en choisissant comme type de carte « Arduino NG or older W/ ATmega8 ».

Envoi de programmes

On envoie ensuite directement le programme sur l'ATmega grâce au câble FTDI. IL faut choisir « Arduino NG or older W/ ATmega8 » comme type de carte.

Notes diverses

Modification des fuse bits avec Arduino

Il peut être utile de modifier les fuse bits, tout en gravant la séquence d'initialisation avec Arduino, pour plus de simplicité. En particulier, si vous prévoyez d'utiliser l'ATmega en l'alimentant en 3.3V, la valeur par défaut du brown out (2.7V) peut être un peu juste (le brown out étant une sécurité qui redémarre l'ATmega si la tension passe en-dessous d'une valeur limite).

Pour ce faire, le plus simple est d'aller rajouter des entrées dans un fichier boards.txt personnalisé, par exemple ~/sketchbook/hardware/breadboard/boards.txt.

Exemple de lignes à ajouter :

##############################################################
# Arduino Uno with custom fuse bits to disable brown out detection

uno_no_bo.name=Arduino Uno without brown out 
uno_no_bo.upload.protocol=arduino
uno_no_bo.upload.maximum_size=32256
uno_no_bo.upload.speed=115200
uno_no_bo.bootloader.low_fuses=0xff
uno_no_bo.bootloader.high_fuses=0xde
uno_no_bo.bootloader.extended_fuses=0x07
uno_no_bo.bootloader.path=optiboot
uno_no_bo.bootloader.file=optiboot_atmega328.hex
uno_no_bo.bootloader.unlock_bits=0x3F
uno_no_bo.bootloader.lock_bits=0x0F
uno_no_bo.build.mcu=atmega328p
uno_no_bo.build.f_cpu=16000000L
uno_no_bo.build.core=arduino
uno_no_bo.build.variant=standard


##############################################################
# ATmega328p on a breadboard with 8 MHz internal clock

atmega328bb.name=ATmega328 on a breadboard (8 MHz internal clock)

atmega328bb.upload.protocol=stk500
atmega328bb.upload.maximum_size=30720
atmega328bb.upload.speed=57600

atmega328bb.bootloader.low_fuses=0xE2
atmega328bb.bootloader.high_fuses=0xDA
atmega328bb.bootloader.extended_fuses=0x05
atmega328bb.bootloader.path=arduino:atmega
atmega328bb.bootloader.file=ATmegaBOOT_168_atmega328_pro_8MHz.hex
atmega328bb.bootloader.unlock_bits=0x3F
atmega328bb.bootloader.lock_bits=0x0F

atmega328bb.build.mcu=atmega328p
atmega328bb.build.f_cpu=8000000L
atmega328bb.build.core=arduino:arduino
atmega328bb.build.variant=arduino:standard

Il faut aussi faire attention à ce que les bootloaders soient disponibles dans le même dossier (par exemple en créant un lien symbolique de ~/sketchbook/hardware/breadboards/bootloaders vers /usr/share/arduino/hardware/arduino/bootloaders/.

Les nouvelles cartes, ajoutées de cette manière, apparaîtront alors dans la liste des cartes utilisables dans Arduino.

Cependant, à l'envoi du sketch, il vaut mieux utiliser le profil Arduino Uno normal, la compilation échoue avec l'autre profil (certainement à cause d'un mauvais chemin d'include), et le changement des fuses bits ne change pas le code binaire des sketchs.