🛠 Graver Optiboot par ICSP : +1,5 Ko de flash et upload accéléré
Objectifs
Le bootloader d'usine de la Pro Mini (ATmegaBOOT, protocole STK500 v1 à 57600 bauds) réserve 2 Ko de flash : le croquis est limité à 30 720 octets. Optiboot ne fait que 512 octets — « only 512 bytes, freeing 1.5k of extra code space compared to older bootloaders » — démarre immédiatement après la mise sous tension (fastboot) et accepte des débits supérieurs ; il est explicitement compatible avec la ligne Pro. On grave ce bootloader par ICSP (les broches SPI 10-13 + RESET acceptent un programmateur ISP) et on récupère 32 256 octets de flash, comme sur une Uno.
Matériel
- 1 × Arduino Pro Mini (ATmega328P ; sauvegardez d'abord les fusibles lus : avrdude -v les affiche)
- 1 × programmateur ISP : autre carte Arduino avec le sketch ArduinoISP, ou USBasp
- 6 × câbles : MOSI→11, MISO→12, SCK→13, RESET→RESET, VCC, GND (alimenter la Pro Mini, par ex. via son régulateur depuis 5 V sur RAW ou directement VCC)
- IDE Arduino avec le core arduino:avr, ou avrdude en ligne de commande
- >
Code complet
1. Cote MAITRE : televerser le sketch File > Examples > 11.ArduinoISP
> ArduinoISP, puis Tools > Programmer > « Arduino as ISP ».
2. Graver le bootloader via l'IDE (carte « Arduino Pro or Pro Mini »
+ CPU 5V/16MHz) : Tools > Burn Bootloader. L'IDE écrit le
firmware, les fusibles et la signature en une passe.
3. Alternative avrdude manuelle (hex Optiboot télécharge) :
avrdude -c arduino -P COMx -b 19200 -p m328p -U lock:w:0x3F:m
puis écriture de optiboot_atmega328.hex en flash, puis lock 0x0F.
(fusibles cristal 16 MHz : lfuse 0xFF, hfuse 0xDE ; l'efuse encode
la taille du bootloader — laissez l'IDE la choisir)
4. Verifier : avrdude -c arduino -P COMx -b 19200 -p m328p -v
l'efuse lu doit correspondre a un bootloader de 512 o (Optiboot)
et non 2 Ko (ATmegaBOOT).
Vérification attendue
Après gravure, un téléversement série classique refonctionne via le connecteur 6 broches (le profil IDE Pro Mini reste à 57600, d'une vitesse qu'Optiboot accepte aussi). La taille maximale de croquis passe de 30 720 à 32 256 octets : un sketch qui refusait de tenir compile désormais. À la mise sous tension sur pile, le sketch démarre sans le délai du vieil ATmegaBOOT (fastboot).
Erreurs fréquentes
- Graver avec le mauvais jeu de fusibles : un mauvais niveau BOD ou une horloge interne au lieu du quartz externe brique la liaison série et provoque des boot loops ; ne graver que ce que l'IDE ou la fiche boards.txt prévoit pour pro16MHzatmega328.
- Oublier de déverrouiller le lock (0x3F avant gravure, 0x0F après) : avrdude refuse d'écrire le flash, « chip is locked ».
- Confondre les deux menus de l'IDE : « Burn Bootloader » utilise le programmateur déjà configuré ; le sketch ArduinoISP doit d'abord être téléversé sur la carte maître.
- Croiser MOSI/MISO entre maître et cible comme pour un branchement série : en ISP on câble broche à broche, jamais en miroir — sinon « device not responding ».
- Croire le profil 3,3 V/8 MHz interchangeable : le modèle 8 MHz a son propre hex Optiboot (pro_8MHz) et ses fusibles ; le set ATmega168 3,3 V d'origine sélectionne même l'oscillateur RC interne (low_fuses=0xc6).
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.inoArduinobouton-poussoir.inoArduinopwm-fade.inoArduinocapteur-lumiere-ldr.inoArduinoservo-balayage.inoArduinoruban-neopixel.inoArduino