
Questa guida dettagliata è rivolta a maker, professionisti e appassionati che possiedono una scheda Arduino UNO rev3 (o Genuino) che presenta problemi critici di comunicazione USB/seriale. Nel nostro scenario specifico, a causa di un’errata programmazione eseguita tramite i terminali ICSP, il computer non era più in grado di riconoscere la scheda, rendendo impossibile la classica programmazione tramite il cavo USB.
Quando una scheda Arduino si trova in questo stato (comunemente definito “brick”), le cause possono essere molteplici. Per andare a colpo sicuro e rigenerare completamente le funzionalità logiche della board, la procedura migliore consiste nell’agire su due fronti distinti:
- Ripristinare il firmware del microcontrollore ATmega16u2: il chip secondario che si occupa esclusivamente della conversione USB/Seriale, permettendo al computer di dialogare con la scheda.
- Ripristinare il bootloader del microcontrollore ATmega328P: il chip principale di Arduino, responsabile dell’esecuzione del vostro codice (sketch).
Requisiti Hardware e Software
Per portare a termine entrambe le operazioni è indispensabile l’utilizzo di un programmatore ISP esterno. Nella nostra guida utilizzeremo un economico e comune USBtinyISP (o TinyUSB ISP), ma la procedura è identica anche con altri programmatori come l’USBasp o un secondo Arduino configurato come “ArduinoISP”.
Software necessari:
- Arduino IDE (Ultima Release): Necessario per attingere ai file di sistema e per la scrittura guidata del bootloader. Download Arduino IDE
- AVRfuses (per macOS): Una comoda interfaccia grafica per AVRDUDE utile a programmare i fusibili e i file HEX su Mac. Download AVRfuses
- AVRDUDESS o Atmel FLIP (per Windows): Alternative per gli utenti Windows (maggiori dettagli a fine articolo).
Fase 1: Ripristino del Firmware dell’ATmega16u2 (USB-Seriale)
La prima operazione consiste nel ridare la “voce” ad Arduino, riprogrammando il chip di interfaccia USB. Per farlo dobbiamo individuare il connettore ICSP specifico per l’ATmega16u2, situato in alto a sinistra sulla board, vicino alla porta USB e al pulsante di Reset.
Realizziamo il collegamento fisico seguendo lo schema: PC → Programmatore Esterno → Porta ICSP ATmega16u2.

A questo punto apriamo il software AVRfuses su macOS. Dobbiamo caricare il file dei firmware originale, denominato Arduino-usbserial-atmega16u2-Uno-Rev3.hex.
Questo file è già presente all’interno del pacchetto dell’Arduino IDE. Di seguito i percorsi per trovarlo a seconda del sistema operativo:
- Su macOS (all’interno del pacchetto applicazione):
/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/firmwares/atmegaxxu2/arduino-usbserial - Su Windows (installazione classica):
C:\Program Files (x86)\Arduino\hardware\arduino\avr\firmwares\atmegaxxu2\arduino-usbserial - Repository Ufficiale GitHub (se preferisci scaricarlo direttamente):
ArduinoCore-avr GitHub Repository

Configurato il programmatore su AVRfuses e caricato il file .hex corretto, premiamo il pulsante Program. Il software provvederà a cancellare la vecchia memoria corrotta e a scrivere il firmware ufficiale. Al termine della procedura, il chip ATmega16u2 sarà ripristinato.
Fase 2: Ripristino del Bootloader dell’ATmega328P
Adesso che l’interfaccia USB è tornata a funzionare, dobbiamo ripristinare il “cervello” di Arduino, ovvero il microcontrollore principale ATmega328P. Per farlo, dobbiamo spostare i cavi del nostro programmatore esterno sul secondo connettore ICSP della scheda (quello posizionato sul lato corto a destra, vicino al chip principale).
Spostiamo quindi il connettore del programmatore sui terminali ICSP dell’ATmega328P:

Per questa seconda fase non abbiamo bisogno di software esterni: utilizzeremo direttamente l’Arduino IDE. Apriamo l’IDE e configuriamo correttamente i parametri di programmazione dal menu Strumenti (Tools):
- Scheda (Board): Selezioniamo Arduino Uno.
- Programmatore (Programmer): Selezioniamo il modello in nostro possesso (es. USBtinyISP).
- Porta (Port): Selezioniamo la porta logica a cui è connesso il programmatore.

Una volta verificate tutte le impostazioni, andiamo sempre nel menu Strumenti e clicchiamo sull’ultima voce: Scrivi il bootloader (Burn Bootloader).

Quest’ultima operazione è molto delicata e potrebbe richiedere circa 60-100 secondi. Durante questo lasso di tempo vedrete i LED del programmatore lampeggiare rapidamente.
Conclusioni e Note per Utenti Windows
Al termine del processo di scrittura del bootloader, l’IDE vi mostrerà il messaggio di conferma “Scrittura bootloader completata”. Scollegate il programmatore esterno e connettete la scheda Arduino UNO direttamente al PC tramite un normale cavo USB: la scheda verrà immediatamente riconosciuta e sarà nuovamente pronta a caricare gli sketch come se fosse nuova!
Cosa cambia se si utilizza Microsoft Windows?
Le medesime operazioni, svolte nello stesso identico ordine, sono perfettamente attuabili anche da sistemi operativi Windows. In questo caso, per la Fase 1 (programmazione dell’ATmega16u2), al posto di AVRfuses raccomandiamo due alternative:
- AVRDUDESS: Un’interfaccia grafica per Windows eccellente, leggera e compatibile con il programmatore USBtinyISP.
- Atmel FLIP: Se non possedete un programmatore ISP per la Fase 1, potete mandare l’ATmega16u2 in modalità DFU (Device Firmware Update) cortocircuitando brevemente due pin del rispettivo ICSP e caricare il firmware tramite USB usando il software ufficiale Microchip/Atmel FLIP, scaricabile dal sito Microchip.




