Arduino bootloader e ISP

luca 23/03/2018 0

Dopo lo sviluppo di uno sketch con l’IDE di Arduino, possiamo compilarlo e caricarlo sulla scheda Arduino collegata al nostro PC con un click sul pulsante upload:

isp-002

Il programma viene memorizzato nella memoria flash del microcontrollore (per una scheda Arduino Uno questo è l’ATmega328p).

E’ possibile caricare il nostro programma sul microcontrollore senza necessità di un programmatore esterno grazie alla esecuzione, sul microcontrollore stesso, di un piccolo programma chiamato bootloader.

Il bootloader è un programma, già caricato su ogni microcontrollore delle schede Arduino, che viene eseguito ad ogni reset. La prima operazione compiuta dal bootloader è verificare se via seriale/USB arriva la richiesta di caricare un nuovo programma. In tal caso è il bootloader che dialoga con l’IDE di Arduino, riceve il nuovo programma e lo memorizza nella memoria flash:

isp-001

Il bootloader attualmente utilizzato sulle schede Arduino Uno si chiama optiboot.

Se acquistiamo un chip ATmega328p e vogliamo utilizzarlo con l’IDE di Arduino per eseguire i nostri sketch, dobbiamo per prima cosa caricare sul chip il bootloader. La programmazione di un chip avviene normalmente tramite un programmatore dedicato. I chip ATmega supportano una modalità di programmazione detta In System Programming (ISP), pensata per programmare il chip direttamente sulla scheda che lo ospita.

Tale modalità richiede il collegamento di 6 pins del chip con il programmatore:

  • 5V e massa
  • reset
  • MISO, MOSI e SCK

Ogni scheda Arduino Uno ad esempio ha un apposito connettore che consente di riprogrammare il chip ATmega328p senza toglierlo:

isp-003

In rete si trovano diversi programmatori per chip ATmega (es questo di Adafruit); molto interessante è però la possibilità di utilizzare un Arduino come programmatore, grazie al lavoro di Randall Bohn.

Per prima cosa dobbiamo caricare su Arduino lo sketch ArduinoISP, che troviamo tra gli esempi disponibili nell’IDE:

isp-004

quindi dobbiamo predisporre – ad esempio su una breadboard – un circuito minimale che comprende il chip da programmare, un quarzo da 16MHz e due condensatori da 22pF:

isp-013

colleghiamo tramite jumpers il nostro Arduino Uno al chip ATMega328p da programmare. I collegamenti da effettuare sono:

  • 5V -> pin 7 e 20
  • Massa -> pin 8, 22 e i due condensatori
  • pin 10 di Arduino o RESET del connettore ICSP -> pin 1
  • pin 11 di Arduino o MOSI del connettore ICSP -> pin 17
  • pin 12 di Arduino o MISO del connettore ICSP -> pin 18
  • pin 13 di Arduino o CLK del connettore ICSP -> pin 19

isp-014 isp-015

Indichiamo all’IDE che vogliamo utilizzare Arduino come programmatore:

isp-005

quindi programmiamo il bootloader:

isp-006

dopo qualche istante, l’IDE dovrebbe indicare che la programmazione è andata a buon fine:

isp-011

Shield

In vendita su diversi store online si trova uno shield per Arduino che semplifica la programmazione dei chip ATmega, chiamato AVR ISP Shield e prodotto da “OPEN-SMART”:

isp-012

Questo shield ospita uno zoccolo ZIF (Zero Insertion Force) in cui va inserito il chip da programmare, alcuni connettori per collegarlo a schede esterne e un buzzer che segnala con due beep l’avvenuta programmazione.

Ho trovato su Internet un archivio contenente la documentazione relativa a questo shield e lo sketch da utilizzare. E’ comunque possibile utilizzare anche lo sketch fornito con l’IDE, semplicemente non verrà attivato il buzzer al termine della programmazione.

Se avete la necessità di programmare diversi chip ATmega328p (ad esempio se state realizzando vostre schede Arduino-compatibili) l’uso di questo shield rende l’operazione sicuramente più veloce!

 

Leave A Response »

Questo sito usa i cookie per poterti offrire una migliore esperienza di navigazione maggiori informazioni

Questo sito utilizza i cookie per fonire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o clicchi su "Accetta" permetti al loro utilizzo.

Chiudi