====== Boatloader MiniCore======
[[https://store.arduino.cc/arduino-uno-rev3|L'arduino UNO]] est une carte microcontrôleur de développement rapide, destinée avant tout à ceux qui aimeraient faire connaissance et sans soudure, avec le monde de la programmation appliquée à l'électronique et à la robotique.\\
Dans la puce de la carte Arduino, il y a un petit programme qui va aider le transfert de notre propre programme dans la mémoire de la puce de la carte. Ce programme est le bootloader, c'est à dire ce qui démarre en premier à la mise sous tension de la carte. Ce bootloader fait environ 1500 octets, ce qui réduit la taille possible de notre programme que nous allons créer. Ce bootloader, il en existe plusieurs versions, dont une qui s'appelle [[https://github.com/Optiboot/optiboot|OptiBoot]], et cette version là fait environ 500 octets, c'est à dire qu'il prend le tiers de place par rapport à la version d'origine.\\
Pour programmer ce bootloader on peut aller sur la page de optiboot, et je vous donne en exemple comment le programmer sur un ATMEGA328p. Il faut d'abord trouver la version qui convient en fichier hex, qui est un fichier descriptif compris par les programmateurs, ce fichier est pour mon cas //optiboot_flash_atmega328p_UART0_115200_16000000L_B5.hex//
$cat optiboot_flash_atmega328p_UART0_115200_16000000L_B5.hex
:107E000001C0B7C0112484B790E89093610010922C
:107E10006100882361F0982F9A70923041F081FFC1
:107E200002C097EF94BF282E80E0C6D0E9C085E05D
:107E30008093810082E08093C00088E18093C1003C
:107E400080E18093C40086E08093C2008EE0B4D0CD
:107E5000259A84E020E33CEF91E030938500209365
:107E6000840096BBB09BFECF1D9AA8954091C000A0
:107E700047FD02C0815089F793D0813479F490D0C6
:107E8000182FA0D0123811F480E004C088E0113817
:107E900009F083E07ED080E17CD0EECF823419F40B
:107EA00084E198D0F8CF853411F485E0FACF853598
:107EB00041F476D0C82F74D0D82FCC0FDD1F82D0DC
:107EC000EACF863519F484E085D0DECF843691F58B
:107ED00067D066D0F82E64D0D82E00E011E05801AB
:107EE0008FEFA81AB80A5CD0F80180838501FA10D8
:107EF000F6CF68D0F5E4DF1201C0FFCF50E040E0DC
:107F000063E0CE0136D08E01E0E0F1E06F0182E067
:107F1000C80ED11C4081518161E0C8012AD00E5F9A
:107F20001F4FF601FC10F2CF50E040E065E0CE01BB
:107F300020D0B1CF843771F433D032D0F82E30D086
:107F400041D08E01F80185918F0123D0FA94F11070
:107F5000F9CFA1CF853739F435D08EE11AD085E934
:107F600018D08FE097CF813509F0A9CF88E024D0D1
:107F7000A6CFFC010A0167BFE895112407B600FCF3
:107F8000FDCF667029F0452B19F481E187BFE89594
:107F900008959091C00095FFFCCF8093C60008958E
:107FA0008091C00087FFFCCF8091C00084FD01C09C
:107FB000A8958091C6000895E0E6F0E098E19083EE
:107FC00080830895EDDF803219F088E0F5DFFFCF80
:107FD00084E1DFCFCF93C82FE3DFC150E9F7CF9122
:027FE000F1CFDF
:027FFE00000879
:0400000300007E007B
:00000001FF
avec les fusibles suivants
HFUSE=0xDE
LFUSE=0xFF
EFUSE=0xFD
les fusibles associés au fichier hex est pour une utilisation avec l'uart0 à 115200 bauds de l'atmega328p à une fréquence externe de 16MHz qui peut être faite par l'adjonction d'un résonateur céramique ou d'un quartz pour plus de précision, ce qui est le cas de l'arduino UNO.\\
Pour effectuer cette programmation, j'utilise un programmateur STK500 en programmation parallèle, via l'interface USB0, et j'ai rassemblé toutes les commandes nécessaires dans un fichier script //flash.sh//
#!/bin/sh
# définiton des variables
portcom=/dev/ttyUSB0
chip=m328p
flashrom=optiboot_flash_atmega328p_UART0_115200_16000000L_B5.hex
HFUSE=0xDE
LFUSE=0xFF
EFUSE=0xFD
# effacement du chip
avrdude -c stk500pp -p $chip -e -P $portcom
# écriture de la flashrom
avrdude -c stk500pp -p $chip -U lfuse:r:-:h -U flash:w:$flashrom -P $portcom
# écriture des fuses
avrdude -c stk500pp -p $chip -U lfuse:w:$LFUSE:m -U hfuse:w:$HFUSE:m -U efuse:w:$EFUSE:m -P $portcom
Une fois programmé, je remets l'atmega sur l'arduino uno, j'installe la librairie MiniCore dans l'IDE Arduino, et je peux utiliser l'atmega avec les paramètres suivants
outils
type de carte/MiniCore/ATmega328
clock/External 16MHz
variant/328p
Bootloader/Yes (UART0)
port/ttyACM0
programmateur/AVRISP(MiniCore)