jesvs

Recuperar un Arduino Pro Micro

TLDR: Intenté flashear Klipper en un Arduino Pro Micro, falló. Recuperé flasheando el bootloader con otro Arduino usando ISP.

Arduinos

Mientras experimentaba con Klipper quise probar con el único micro que tenía a la mano que tuviera conector USB-C: un Arduino Pro Micro, porque ¿a quién le gusta echarse un clavado a las cajas marcadas como cables USB a buscar un cable USB micro? O peor, un USB mini.

Junto a un acelerómetro pretendía usar el Arduino como input shaper para la cama de una impresora 3D. La impresora imprime de maravilla, pero es de todos bien sabido que una impresora sirve para dos cosas: para ajustarla ad infinitum y para imprimir partes para mejorarla hasta que vuelva a imprimir tan bien como el día que la sacaste de la caja.

Por alguna razón que aún no tengo clara, no fue posible programar el Pro Micro con el comando recomendado para flashear el firmware.

make flash FLASH_DEVICE=/dev/serial/by-id/...

Mi sospecha es que no es suficiente la capacidad de memoria FLASH en el Pro Micro…

Todo esto lo estaba haciendo desde la impresora por ssh. Entonces, tuve la gran ideota de pasar el firmware a mi PC y subirlo manualmente usando avrdude. Conecté el pin RESET a GND y comencé a hacer el upload y… funcionó… hasta el 99%.

avrdude -v -c avr109 -p atmega32u4 -P /dev/serial/by-id/usb-Arduino_LLC_Arduino_Leonardo-if00 -b 57600 -D -U flash:w:klipper.elf.hex

El Pro Micro dejó de responder y la PC ya no lo reconocía sin importar cuantas veces lo reconectara. Don't panic.

El Arduino Pro Micro es como el hermano rebelde de la familia, porque no tiene un chip USB a Serial dedicado. En su lugar, confía en el microcontrolador ATMega32U4 para hacer el trabajo con un poco de magia de firmware. Aunque este truco simplifica el diseño de la placa, si el firmware decide irse de vacaciones o se pone terco con configuraciones incompatibles (como usar 8MHz en lugar de 16), prepárate para una fiesta sin USB. Y sí, en ese momento, tu Pro Micro no será ni siquiera un buen pisapapeles.

Encontré un método «muy sencillo» para recuperar el firmware, que en mi caso no me funcionó, pero nada pierdes intentándolo. Haz corto entre los pines RESET y GND dos veces seguidas, y si corres con suerte aparecerá por 8 segundos un dispositivo USB serial al cual podrás cargar un firmware y recuperar tu Arduino.

Si este método aburrido no te funciona, puedes intentar el método divertido:

Vas a necesitar:

  1. Un Arduino extra para usarlo como programador ISP.
  2. 4 cables para conectar el Arduino programador al Arduino Pro Micro.
  3. El Arduino IDE para programar el ISP y quemar el bootloader al Pro Micro.

Antes de hacer cualquier conexión abre el Arduino IDE y carga el sketch de ejemplo llamado ArduinoISP. Ya que tengas listo el Arduino con el sketch puedes conectar los dos Arduinos de la siguiente manera:

		ISP         Pro Micro

		MOSI ------ 16 MOSI
		MISO ------ 14 MISO
		SCK ------- 15 SCK
		D10 ------- RST

Personalmente usé un Arduino Nano como ISP, el pinout es este:

		D11 MOSI
		D12 MISO 
		D13 SCK

Deberás buscar el pinout para el Arduino que vayas a usar como ISP. Es importante que el Arduino ISP sea del mismo voltaje (5v / 3.3v) que tu Arduino Pro Micro.

En el Arduino IDE debes cambiar la placa al tipo de Arduino que vayas a recuperar, en mi caso era un Arduino Pro Micro, por lo que seleccioné la placa Arduino Leonardo.

Teniendo todo conectado ve al menú de Herramientas > Programador > Arduino as ISP.

Luego en el mismo menú, Herramientas > Grabar Bootloader.

Si todo va bien, tu Arduino ISP va a flashear los LEDs mientras graba el bootloader al Arduino Pro Micro. El proceso debe tomar aproximadamente un minuto. Te darás cuenta que tu Arduino Pro Micro volvió a la vida cuando sea detectado por tu sistema operativo.

Puedes encontrar más información sobre este método en la página oficial de Arduino.