Pro Micro - Programmer not responding

Hello all

I have had my Pro Micro for about five years. I have been using it beautifully as the controller in a DIY flight simulator button box (buttons, switches, pots and rotary encoders) and update just one sketch sporadically.

It now won't upload any sketches. I have tried uploading the basic Blink sketch (it compiles fine) and get the verbose error included below.

The last version of my own sketch is still loaded on the Pro Micro. The serial monitor reports the rotary encoder and potentiometer inputs (but not button presses or switches (???) ) , so I guess that the selected serial port does exist and the board is connected, contrary to the last line in the error message below.

I have double reset the board and tried to upload a sketch before it loads, with the same results. I have disabled and enabled the board from Device Manager. I have disconnected and reconnected both ends of the cable to the board, restarted my PC, checked the com port number and device name (Arduino Leonardo) and pulled out a bit of hair.

I do not have any access to another board as I live at the edge of civilisation.

I am not an enthusiast, just an end-user with limited understanding and ability, so please be gentle. 8)

Thank you sincerely for your time.

Tony

Sketch uses 3956 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.
Forcing reset using 1200bps open/close on port COM6
PORTS {COM1, COM6, } / {COM1, COM6, } => {}
PORTS {COM1, COM6, } / {COM1, COM6, } => {}
PORTS {COM1, COM6, } / {COM1, COM6, } => {}
PORTS {COM1, COM6, } / {COM1, COM6, } => {}
PORTS {COM1, COM6, } / {COM1, COM6, } => {}
PORTS {COM1, COM6, } / {COM1, COM6, } => {}
PORTS {COM1, COM6, } / {COM1, COM6, } => {}
PORTS {COM1, COM6, } / {COM1, COM6, } => {}
PORTS {COM1, COM6, } / {COM1, COM6, } => {}
PORTS {COM1, COM6, } / {COM1, COM6, } => {}
PORTS {COM1, COM6, } / {COM1, COM6, } => {}
PORTS {COM1, COM6, } / {COM1, COM6, } => {}
PORTS {COM1, COM6, } / {COM1, COM6, } => {}
PORTS {COM1, COM6, } / {COM1, COM6, } => {}
PORTS {COM1, COM6, } / {COM1, COM6, } => {}
PORTS {COM1, COM6, } / {COM1, COM6, } => {}
PORTS {COM1, COM6, } / {COM1, COM6, } => {}
PORTS {COM1, COM6, } / {COM1, COM6, } => {}
PORTS {COM1, COM6, } / {COM1, COM6, } => {}
PORTS {COM1, COM6, } / {COM1, COM6, } => {}
Uploading using selected port: COM6
C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude -CC:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf -v -patmega32u4 -cavr109 -PCOM6 -b57600 -D -Uflash:w:C:\Users\tony\AppData\Local\Temp\arduino_build_151152/Blink.ino.hex:i 

avrdude: Version 6.3-20190619
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "C:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf"

         Using Port                    : COM6
         Using Programmer              : avr109
         Overriding Baud Rate          : 57600
         AVR Part                      : ATmega32U4
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PA0
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65    20     4    0 no       1024    4      0  9000  9000 0x00 0x00
           flash         65     6   128    0 yes     32768  128    256  4500  4500 0x00 0x00
           lfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           lock           0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

         Programmer Type : butterfly
         Description     : Atmel AppNote AVR109 Boot Loader

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 = "F"; type = @
    Software Version = =.v; Hardware Version = �. 
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

avrdude done.  Thank you.

the selected serial port 
 does not exist or your board is not connected

The way uploads work is:

  • The Arduino IDE (or the upload tool used by the Arduino IDE) sends a signal for the microcontroller to reset.
  • The microcontroller resets.
  • The bootloader runs and waits (normally only for a short time) for an upload to start.
  • The upload tool sends the program to the microcontroller, where the bootloader writes it to flash memory.

On the boards with native USB (like the one you're using), the way the IDE signals the microcontroller to reset is by opening a serial connection at 1200 baud. There is some special code running in the background on the microcontroller that does the reset when it detects that 1200 baud connection.

In some cases, the reset code that's supposed to be on the microcontroller could be missing or not working correctly, which will mean the bootloader never runs and the upload fails with the error you're seeing. The fix is to manually reset the board.

Try this:

  • Press and release the reset button on your board quickly twice. You should now see the LED on the board pulsing, which means the bootloader is running. The double press causes the bootloader to run indefinitely (until the board is reset, powered off, or an upload is done), which means you don't need to get the timing of the reset just right.
  • Select the port of your board from the Tools > Port menu. The port will be different when the bootloader is running so don't assume you already have the correct port selected.
  • Start an upload in the Arduino IDE.

The upload should now finish successfully. After this, you should be able to go back to doing normal uploads without needing to press the reset button. If you still need to do the reset trick to do uploads after this, the problem may be caused by your code. You can verify this by uploading a simple sketch like File > Examples > 01.Basics > BareMinimum.

Thank you so much!

It is working now.

The LED would not flash. The board would boot normally if I reset it (wire across RST and GND) once or twice in quick succession.

Your advice to select the COM port while booting is what did the trick, I think. avrdude advised that I reset after pressing upload and voila! the board is on a new port and I am able to upload again.

Thank you again.

Tony