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Ω]── GNDLas 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.