Pro Micro not resetting (LED stays lit when RST+GND are shorted)

I have a Pro Micro that isn't resetting when I short RST and GND. What steps can I take to troubleshoot the issue?

Based on some comments I see online, the LEDs are supposed to turn off when the pins are shorted, but I don't see this happening. I've verified with a multimeter that the pins are shorted when I press the button. The ground header pins are also all connected to each other, so it seems that the headers are properly soldered on. The Arduino IDE is also unable to see the board on Windows or Linux.

Thanks in advance


Edit: Turns out the LED isn't supposed to turn off when resetting. I was looking in the wrong place due to this assumption. I got it working by using a different cable.

Try two short taps on the reset / ground button when the IDE starts to load the code.

Things I've tried for uploading a sketch:

  • Press button before uploading
  • Double press button before uploading
  • Press and hold before plugging in to computer, then releasing after it's plugged in
  • Single and double press right after pressing the upload button

None of these have worked. The IDE gives me this error:

Connecting to programmer: .avrdude: butterfly_recv(): programmer is not responding

avrdude: butterfly_recv(): programmer is not responding
avrdude: butterfly_recv(): programmer is not responding
avrdude: butterfly_recv(): programmer is not responding
avrdude: butterfly_recv(): programmer is not responding
avrdude: butterfly_recv(): programmer is not responding
Found programmer: Id = "�"; type = �
    Software Version = i.; Hardware Version = .O
avrdude: butterfly_recv(): programmer is not responding
avrdude: butterfly_recv(): programmer is not responding
avrdude: error: buffered memory access not supported. Maybe it isn't
a butterfly/AVR109 but a AVR910 device?
avrdude: initialization failed, rc=-1
         Double check connections and try again, or use -F to override
         this check.

avrdude: butterfly_recv(): programmer is not responding
avrdude: error: programmer did not respond to command: leave prog mode
avrdude: butterfly_recv(): programmer is not responding
avrdude: error: programmer did not respond to command: exit bootloader
Failed uploading: uploading error: exit status 1

Selected board: Arduino Micro

Looks like the same on my system.
Did you get any help?
Have you found out what the problem is?
I am working with an Arduino Micro too.
Thanks for any help.

OP is not working with an Arduino Micro :smiley:

Arduino Micro or SparkFun Pro Micro? Clone or original?
Did it ever work before?

What happens when you double tap the reset button? For the Arduino Micro, the L-LED should be pulsating after a double tap; the Pro Micro does not have a L-LED.

Which operating system? In Windows you can monitor the behaviour of a double tap reset in Windows device manager. While the L-LED is pulsating, you should have an entry under the ports section in Windows device manager.

If you have a pulsating L-LED after double tap reset but nothing happening in Windows device manager, check the cable; you might be using a charge-only cable (you need what is often called a sync cable (e.g. for cell phones)).

If you don't have a pulsating L-LED after a double tap reset, your board does not have a bootloader or is damaged.

Hello Sterretje
Thanks for your reply.

  • It is an original Arduino Micro
  • Its pulsating after a double tap (later starts flickering)
  • My IDE runs on a 2018 Intel based Mac Pro and I have installed a Satechi Port Extension to provide USB 2.0 Ports
  • When I select one of the offered ports, either /dev/cu.BLTH or /dev/cu.Blootooth-Incommeing-Port and then from tools menu: "board info" I get a response from the micro as: BN: Arduino Micro, VID: 0x2341, PID: 0x0037. So the Micro seems to work?

What should be the next step to finally bring it up?

Thanks for any help, Chris

This is the Micro, so your computer can see the bootloader :+1: (second line below)
Micro ........ VID 0x2341 / PID 8037
Micro BL ... VID 0x2341 / PID 0037

I'm not a Mac user. Do you get a reply regardless of whichever port you did select? That sounds strange to me.

The normal upload proces for a board with native USB like your Arduino Micro is

  • Reset the board with a software reset; this is done by the IDE by opening and closing the port woth a baudrate of 1200 baud.
  • Do the upload.

You need to have a port selected that the IDE can communicate with to perform the reset. It does not matter much which one. Your options for this are

  1. If you have a Mega, Uno or Nano, connect it and select is port.
  2. If you have a TTL-to-USB adapter, connect it and select its port.
  3. The other port that is shown in the IDE and that is not an Arduino. I'm always a little reluctant to advise this option as I don't know how the device that is on that port will react; in Windows I use e.g. COM1 which is fully safe.
  4. The bootloader port of the Arduino Micro. It will be difficult to select that in IDE 2.0 but should be easy in IDE 1.8.x by double tapping the reset on the Arduino Micro and next selecting it in the port menu.

For (1) and (2), life is easy.

  • Open the IDE and load the blink example.
  • Select the Arduino Micro as the target.
  • Select the port of the other Arduino or TTL-to-USB adapter.
  • Perform the upload.
  • When the IDE reports the memory usage, double tap the reset button.

Your upload should now succeed.

If you can't use (1) or (2) and are using IDE 1.8.x, try (4); you can try this as well in IDE 2.0 if you're using that but, as said, it might not be easy to select the bootloader port.

  • Open the IDE and load the blink example.
  • Select the Arduino Micro as the target.
  • Try to get the IDE to recognise the bootloader port (as said, in IDE 1.8.x this will be easy, double tap the reset, open the port menu and select the port).
  • Enable verbose output during compilation and verbose output during upload under file -> preferences.
  • Start an upload.
  • Just before the IDE reports the memory usage, double tap the reset button. Timing is critical, too late and it will fail, too early and it will also fail.

The upload should succeed if you get the timing right. Below part of the output before the upload process is started (the end of the compile)

Linking everything together...
"C:\\Users\\Wim\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-gcc" -Wall -Wextra -Os -g -flto -fuse-linker-plugin -Wl,--gc-sections -mmcu=atmega32u4 -o "C:\\Users\\Wim\\AppData\\Local\\Temp\\arduino-sketch-7C9CF871B9C446A638CEF8F8CD9F5ED4/Blink.ino.elf" "C:\\Users\\Wim\\AppData\\Local\\Temp\\arduino-sketch-7C9CF871B9C446A638CEF8F8CD9F5ED4\\sketch\\Blink.ino.cpp.o" "C:\\Users\\Wim\\AppData\\Local\\Temp\\arduino-sketch-7C9CF871B9C446A638CEF8F8CD9F5ED4/..\\arduino-core-cache\\core_arduino_avr_micro_532122c45ee71fa3f92d689a8d73764d.a" "-LC:\\Users\\Wim\\AppData\\Local\\Temp\\arduino-sketch-7C9CF871B9C446A638CEF8F8CD9F5ED4" -lm
"C:\\Users\\Wim\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-objcopy" -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0 "C:\\Users\\Wim\\AppData\\Local\\Temp\\arduino-sketch-7C9CF871B9C446A638CEF8F8CD9F5ED4/Blink.ino.elf" "C:\\Users\\Wim\\AppData\\Local\\Temp\\arduino-sketch-7C9CF871B9C446A638CEF8F8CD9F5ED4/Blink.ino.eep"
"C:\\Users\\Wim\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-objcopy" -O ihex -R .eeprom "C:\\Users\\Wim\\AppData\\Local\\Temp\\arduino-sketch-7C9CF871B9C446A638CEF8F8CD9F5ED4/Blink.ino.elf" "C:\\Users\\Wim\\AppData\\Local\\Temp\\arduino-sketch-7C9CF871B9C446A638CEF8F8CD9F5ED4/Blink.ino.hex"

"C:\\Users\\Wim\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-size" -A "C:\\Users\\Wim\\AppData\\Local\\Temp\\arduino-sketch-7C9CF871B9C446A638CEF8F8CD9F5ED4/Blink.ino.elf"
Sketch uses 3958 bytes (13%) of program storage space. Maximum is 28672 bytes.
Global variables use 149 bytes (5%) of dynamic memory, leaving 2411 bytes for local variables. Maximum is 2560 bytes.

The relevant line is the first one "Linking everything together"; double tap the reset at that moment (you might even have to do it a little earlier).

Don't give up if you don't get it right the first time.

If neither (1), (2) or (4) above are an option or you don't manage with (4), use (3). The instructions are the same as for (1) and (2).