Buenas,
En este proyecto vamos a intentar recuperar el programa de inicio bootloader defectuoso de un arduino nano
El bootloader funciona a modo de "sistema operativo" al ser el primer programa que que ha sido escrito previamente en el microcontrolador de la placa y que nos permite cargar código sin necesidad de hardware adicional.
Para ello necesitaremos utilizar otro microcontrolador arduino que funciona bien para que funcione como ISP y permita reprogramar el arduino que funciona mal
El bootloader del microcontrolador de un Arduino se programa de fábrica mediante ISP, a través de su header ICSP
Síntomas
Pinout y diagrama de conexión
En este proyecto haremos uso de otro arduino nano, para lo cual necesitamos saber la correspondencia de pines
![]() |
Pinout cortesía de https://forum.arduino.cc/index.php?topic=620640.0 |
Con esta información podremos intentar recuperar el bootloader siguiendo el siguiente esquema de conexión de los 6 pines que se encuentran en la región física del bootloader del arduino que funciona mal a 6 pines del arduino que funciona bien.
![]() |
Diagrama de Header ICSP Nano a Nano para ISP |
Pero que es Arduino ISP
"The Arduino ISP is an In-System-Programmer that is used to program AVR microcontrollers. You can use the Arduino ISP to upload sketches directly on the AVR-based Arduino boards without the need of the bootloader"
La ISP o Programación en Sistema o Programación Serie en Circuito (ISCP In serial Circuit Programmig) permite que un microcontrolador sea reprogramado mientras está instalado en un sistema a través de un protocolo serie, a diferencia de aquellos sistemas que necesitan ser programados antes de instalarse dentro del sistema.
Haciendo uso de esta habilidad de nuestro microcontrolador hermano que funciona bien y siguiendo el esquema indicado en el apartado anterior procederemos a intentar restaurar el bootloader
Pasos para quemar el bootloader
Error signature
Si tenemos errores a la hora de quemar el bootloader, esto se deberá a que no se reconoce la placa, que el cableado está mal o que no hemos elegido la placa correcta a la hora de cargar los sketchs. Algunas placas clónica se cargan con el ATMega328P (Old bootloader)
En el primer caso deberemos tocar con cuidado en dos ficheros de configuración para retocar o añadir las característica de la placa clónica que no funciona y volver a probar.
Las rutas de los ficheros de configuración se muestran a continuación:
avrdude: Expected signature for ATmega328P is 1E 95 0F
Double check chip, or use -F to override this check.
C:\Program Files (x86)\Arduino\hardware\arduino\avr\boards.txt
C:\Program Files (x86)\Arduino\hardware\tools\avr\etc\
#------------------------------------------------------------# ATmega328
#------------------------------------------------------------
part
id = "m328";
desc = "ATmega328";
has_debugwire = yes;
flash_instr = 0xB6, 0x01, 0x11;
eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00,
0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF,
0x99, 0xF9, 0xBB, 0xAF;
stk500_devcode = 0x86;
# avr910_devcode = 0x;
signature = 0x1e 0x95 0x14;
The last entry of the signature (line 9038) must be changed from 0x0F to 0x14
O crear una nueva entrada para el tipo de placa
#------------------------------------------------------------
# ATmega328-AU-ND
#------------------------------------------------------------
part
id = "m328au";
desc = "ATMEGA328-AU-ND";
has_debugwire = yes;
flash_instr = 0xB6, 0x01, 0x11;
eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00,
0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF,
0x99, 0xF9, 0xBB, 0xAF;
stk500_devcode = 0x86;
# avr910_devcode = 0x;
signature = 0x1e 0x95 0xff;
Es importante disponer del driver adecuado para placas chinas en: http://www.wch.cn/download/CH341SER_ZIP.html
Referencias
- https://forum.arduino.cc/index.php?topic=620640.0
- https://www.youtube.com/watch?v=9HAnr___gkI
- https://en.wikipedia.org/wiki/In-system_programming
- https://fabacademy.org/archives/2013/students/anderson.douglas/atmega328.html
- https://forum.arduino.cc/index.php?topic=505382.0
- https://www.instructables.com/2-Arduino-the-ATMEGA328-As-a-Stand-alone-Easy-Chea/
- https://forum.arduino.cc/index.php/topic,68889.0.html
- https://forum.arduino.cc/index.php/topic,68889.0.html