Arduino as ICSP - Programmeur pour microcontrĂŽleurs atmel

ICSP?

ICSP (In-Circuit Serial Programming) ou encore ISP est le nom donnĂ© Ă  l’interface de programmation des microcontroleurs pouvant ĂȘtre reprogrammĂ© in situ. C’est le cas des AVR de chez Atmels, dont figure la trĂšs cĂ©lĂšbre famille des AtmĂ©ga (Atmega328P pour la carte arduino uno), mais aussi les petits ATtiny, qui n’ont que peux Ă  envier aux atmĂ©ga, puisque pouvant surpasser la cadence des seconds (20Mhz pour l’attiny84 et l’attiny85).

Si vous disposez d’une carte arduino, vous ne programmez pas votre microcontroleur grace Ă  l’ICSP, mais via le bootloader arduino qui a chaque dĂ©marrage (appuis sur reset si vous prĂ©fĂ©rez, ou mise sous tension) attend quelques instant une Ă©ventuelle communication sur les pins 0 et 1 (RX et TX) avant de finalement lancer votre programme (aussi appelĂ© sketch). Vous l’aurez comprit, la programmation d’une arduino se fait en effectuant un reset et en transmettant les donnĂ©es sous la forme d’une liaison sĂ©rie asynchrone.

L’inconvĂ©nient de cette mĂ©thode, est qu’un microcontroleur “brute de fonderie” ne permet pas une telle chose (C’est le cas quand vous achetez directement des PIC, PICAXE ou ATMegas au constructeur) et qu’il faut donc charger le bootloader arduino.

Une autre raison, plus pragmatique, est que le bootloader arduino mange tout de mĂȘme plus d’une page mĂ©moire, et que pour certaines applications – une aventure qui ne m’est pour le moment pas arrivĂ© – il peut ĂȘtre utile de gagner quelques prĂ©cieux octets.

La programmation atmel se fait via une interface SPI pour Serial Peripherical Interface (c’est à ce moment que l’ordre des lettres d’un acronyme devien crucial pour ne pas se retrouver confus).

Arduino as ISP

Par chance, des gens bien veillant se sont sacrifiĂ© pour implĂ©menter un programmateur ISP Ă  travers la carte arduino. ConcrĂštement, l’utilisation du sketch Arduino As ISP (disponible dans la rubrique ‘exemples’ de l’IDE arduino) permet de transformer la carte arduino en un programmateur ISP, dialoguant avec le PC d’une façon standard – compenez que les utilitaires pour avr comme avrdude arrivent a communiquer avec l’arduino – et pouvant pogrammez un microcontroleur atmel
 si vous avez de la chance.

Retenez qu’un programmateur ISP d’atmels doit avoir le contrĂŽle sur 4 pins du composant : Le pin reset, car le protocole de programmation demande de pouvoir faire des choses bizarres avec ce dernier, et les 3 pins SPI (MISO, MOSI et SCLK. On n’utilise pas le SS). Le cablage de votre arduino avec un atmega est dĂ©crit :

Voici donc le schĂ©ma d’un montage avec votre arduino comportant le sketh Arduino As ISP, pour programmer un atmega328p (Si vous voulez programmer un autre atmel, il suffit de rechercher les port MOSI, MISO, SCLK et reset, puis de cabler comme sur l’atmega328p).

Montage arduino

Sachez que, pour ma part, j’ai du modifier le sketch d’Arduino As ISP, en changeant le baud-rate de la liaison sĂ©rie (avec le PC) Ă  9600 (par dĂ©faut 12900), pour que tout se passe bien. (La pemiere ligne de setup() :   Serial.begin(19200); )

Hologe?

Si la rĂ©sistance de pull-up sur le reset n’est pas obligatoire, pour un microcontroleur sortie de l’usine, il se peut que vous aillez besoin d’une horloge externe. L’horloge externe ou interne se configure via les fuses (fusibles), des registres spĂ©ciaux que le peut modifier
 via ICSP – donc, une fois que vous aurez rĂ©ussi Ă  faire fonctionner tout ce beau monde, ce qui ne nous aide pas.

Pour ma part, j’ai Ă©tĂ© obligĂ© d’ajouter une horloge externe pour avoir une rĂ©ponse du microcontroleur lorsqu’on lui demande d’épeler son nom (signature du composant). Un simple crystal 16MHz avec deux condensateurs 22pF – non, ça ne marche pas avec 22nF, ce n’est pas faute d’avoir essayé  – feras l’affaire. Il est fort probable qu’un crystal Ă  8MHz convienne aussi – avec les mĂȘmes condensateurs.

Let’s GO!

Votre sketch est sur votre arduino, votre circuit est opérationnel, vous avez vérifier chaque cùble, chaque branchement, et relut le schéma 8 fois? Bien, alors revérifiez encore une fois1.

Installez la suite AVRtools (WinAVR pour windows, votre gestionnaire de packets sous linux, et pour les autres, à vous de vous débrouiller :D ). Ne pas hésiter à consulter la documentation de AVRtools.

Lancez avrdude, avec une commande de cette forme :

avrdude -p atmega328p -c avrisp -P com4 -b 9600

OĂč vous remplacez atmega328p par votre microcontroleur, et com4 par votre port. Pensez aussi a entrer le baud-rate (-b) figurant dans le code du sketch Arduino As ISP. Si tout vas bien (Vous devez obtenir une rĂ©ponse de votre microcontroleur, et les noms attendu et reçu doivent correspondre), vous pouvez alors envoyer un sketch avec :

avrdude -p atmega328p -c avrisp -P com4 -b 9600 -U flash:w:sketch.hex

Pour plus de détailles sur avrdude, référez vous à la documentation, ou bien au site de LadyAda.

Sur ce, amusez vous bien :)

Nb : Pour calculer les fuses, j’utilise FuseCalc.

  1. Si vous ne conaissez pas la saga MP3 reflet d’acide, vous pouvez rechercher la fameuse citation “huit, ça suffit”.