.avrdude: butterfly_recv(): programmer is not responding

I have a 3.3V Sparkfun Pro Micro and I am trying to run the example Blink sketch. When I attempt to upload the sketch, I receive the following error:

Arduino: 1.6.5 (Mac OS X), Board: "SparkFun Pro Micro, ATmega32U4 (3.3V, 8 MHz)"

A lot of lines from compilation*

/Users/SopeEweje/Downloads/Arduino.app/Contents/Java/hardware/tools/avr/bin/avrdude -C/Users/SopeEweje/Library/Arduino15/packages/SparkFun/hardware/avr/1.1.1/avrdude.conf -v -patmega32u4 -cavr109 -P/dev/cu.usbserial-A104OJLC -b57600 -D -Uflash:w:/var/folders/8l/wdp2tglx5jlc8k36c1cvv2rm0000gn/T/build4502743492183006288.tmp/Blink.cpp.hex:i

avrdude: Version 6.0.1, compiled on Apr 14 2015 at 16:30:25
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2009 Joerg Wunsch

System wide configuration file is "/Users/SopeEweje/Library/Arduino15/packages/SparkFun/hardware/avr/1.1.1/avrdude.conf"
User configuration file is "/Users/SopeEweje/.avrduderc"
User configuration file does not exist or is not a regular file, skipping

Using Port : /dev/cu.usbserial-A104OJLC
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
Problem uploading to board. See http://www.arduino.cc/en/Guide/Troubleshooting#upload for suggestions.

I am completely new to Arduino as of a little over a week ago so I don't have a very good understanding of the programming aspect of using Arduinos, much less troubleshooting techniques. Does anyone know how to address this error? In addition, the serial port for my board (Sparkfun Pro Micro) does not always appear when I connect it to my laptop (MacBook Pro). I already had to download an older version of Arduino in order for these particular USB drivers to work but is there something else I need to do to ensure I don't have to restart my computer every time I want to connect?

I am having the exact same problem. Did you find a fix by chance?

I have to chime in, I'm afraid. I'm trying to program an Arduino Micro on a Ubuntu 16.04 laptop with USB-3 ports only.

Simply starting an upload gives the following output:

         Using Port                    : /dev/ttyACM0
         Using Programmer              : avr109
An error occurred while uploading the sketch
         Overriding Baud Rate          : 57600
avrdude: ser_open(): can't open device "/dev/ttyACM0": Device or resource busy

avrdude done.  Thank you.

So apparently auto-resetting the Micro (i.e. connecting/disconnecting at 1200 baud) fails.

Only if I press and hold the physical reset button, start the upload, then release the button, I get a bit further but still run into the error thetallertwin and mattygio are seeing.

         Using Port                    : /dev/ttyACM0
         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 = ""; type = 
    Software Version = .; Hardware Version = �.F
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

I found the solution.

Apparently, Ubuntu's Modem Manager tries to be too clever and gets in the way. Blacklisting the Arduino bootloader as described in the above link keeps it from interfering.

Three remarks:

  • The aforementioned post wrongly lists two commands to create the udev rule. The correct one is:
    echo 'ATTRS{idVendor}=="2a03", ENV{ID_MM_DEVICE_IGNORE}="1"' | sudo tee /etc/udev/rules.d/77-arduino.rules

  • Do not run the Arduino IDE as root! This causes other issues down the line. Make sure your user is a member of the "dialout" group instead:

  • To check, type groups in the terminal. You should see "dialout" listed.

  • In case you don't, add your user to said group with sudo usermod -aG dialout $USER (requires logging out and back in again)

  • If the Micro doesn't show up as a USB device at all, it was probably flashed partially in the past. In that case you will need to manually fire up the bootloader by double-clicking the reset button on the board right after you have initiated an upload.
    In more detail:

  • The Micro identifies itself as "ID 2341:8037 Arduino SA" during normal operation. When the bootloader is active, however, the board becomes "ID 2a03:0037 dog hunter AG Arduino Micro (bootloader)" for about 8 seconds. The latter is the device that the Arduino IDE must talk to during an upload.

  • A convenient way to monitor what's going on is to periodically run lsusb, like so: watch -n.1 lsusb. Try pressing the reset button once, which will bring back the "2341:8037" device, and double-clicking it, which temporarily brings up the "2a03:0037" device.