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 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)