Saltar al contenido
Kira

Firmware · Hardware · Ingeniería inversa

Revivir un Arduino Mega usando un ESP32 como programador

Un ESP32 hace de programador ISP para restaurar los dos chips de un Arduino Mega 2560 alterado con HoodLoader2, sin comprar un programador.

Año
2026
Estado
Funcionando
Rol
Firmware y electrónica
Repositorio
Repositorio en preparación

01 · Problema

Un Arduino Mega 2560 con HoodLoader2 / ArduDucky ya no se programaba desde el IDE. El firmware alterado estaba en los dos chips: el ATmega2560 principal y el ATmega16U2, el que hace de puente USB.

02 · Enfoque

Escribí un programador ISP dual para un ESP32 Heltec: entra en modo programación, verifica la firma de cada chip, borra, escribe los fuses originales, graba el bootloader stk500v2 o el firmware DFU + USB-Serial, verifica byte a byte y escribe los lock bits. Un divisor (1 kΩ / 2.2 kΩ) baja MISO de 5 V a 3.44 V.

03 · Resultado

El Mega quedó como de fábrica y se programa otra vez desde Arduino IDE y PlatformIO. El proceso es guiado desde el monitor serie: se mueven los mismos 5 cables del header ICSP1 al ICSP2 y listo.

04 · Stack

  • ESP32 (Heltec WiFi Kit 32)
  • C++ / Arduino
  • PlatformIO
  • ISP / SPI
  • ATmega2560
  • ATmega16U2
  • Python

Por qué hay que restaurar dos chips

Chip Dónde está Qué hace Qué se graba
ATmega2560 Al centro de la placa Ejecuta tu programa Bootloader stk500v2 (7454 bytes)
ATmega16U2 Junto al conector USB Puente USB ↔ serie Firmware DFU + USB-Serial (15 668 bytes)

HoodLoader2 modifica ambos. Si solo se restaura el principal, el IDE sigue sin reconocer la placa: el chip del USB es el que habla con la PC.

Conexión

ESP32 GPIO 5 ──────────────► RESET (ICSP pin 5)
ESP32 GPIO 18 ──────────────► SCK (ICSP pin 3)
ESP32 GPIO 23 ──────────────► MOSI (ICSP pin 4)
ESP32 GPIO 19 ◄── divisor ─── MISO (ICSP pin 1)
ESP32 GND ──────────────► GND (ICSP pin 6)
MISO (5 V) ──[1 kΩ]──┬── GPIO 19 → 5 V × 2.2 / 3.2 = 3.44 V
└─[2.2 kΩ]── GND

Las señales que salen del ESP32 (3.3 V) las reconoce el Mega como nivel alto; solo MISO necesita bajar. El Mega se alimenta por su propio USB, nunca desde los 3.3 V del ESP32.

Fuses de referencia

Chip Low High Extended Lock
ATmega2560 0xFF 0xD8 0xFD 0x0F
ATmega16U2 0xEF 0xD9 0xF4 0x0F

El firmware incluye el bootloader y el firmware del 16U2 como arreglos en C, generados con un pequeño script de Python a partir de los .hex oficiales.