Arduino Pro Micro

The case of the broken Pro Micro

Preamble

I was watching youtube tutorials, and saw this video.
Arduino Tutorial #14: Leonardo as Mouse

This immediately appealed to my mischievous side, and I ordered a 3.3 V Pro Micro.

However, I digress… That part of the story, the prologue, if you will, is covered more fully in USB Shenanigans. However, this blog, The case of the broken Pro Micro, will deal will repairing an apparently bricked Pro Micro, which resulted due to the shenanigans…

The breakage

The Pro Micro arrived, I opened the package, plugged it into my MacBook Pro. It was recognised, which was a plus as usually OS X is very fussy about Arduino boards. Boards with the USB interface implemented with CH340 chips  are just not seen, and unfortunately, a lot of Chinese clones use this IC in lieu of the standard FTDI chip.

Anyway, as it was recognised, I opened up the sketch outlined in USB Shenanigans, selected Arduino Micro in the Tools->Board menu, and uploaded the code.  However, it failed to do what I expected to, there were no random mouse movements, nothing. In addition, rather worryingly, all of the three LEDs (PWR, Tx and Rx) were on permanently.

Bricked Pro Micro 3.3V
Bricked Pro Micro 3.3V

The device seemed bricked, as it no longer showed up in the Tools->Port menu.  Plugging it in to my trusty PC laptop didn’t help. It just wasn’t recognised. I got the “USB device unrecognised” popup message from the system tray.

Panic started to set in. A lot of googling “bricked Micro Pro” ensued.

The debugging

A lot of people seem to be suffering the same fate. Evidently, it is very easy to brick these.

The StackExchange Arduino site had a handy question, Arduino Pro Micro clone not recognized, flickering RX LED, which, while not exactly the same issue as I was having, led me to the two following sites:

The Sparkfun Troubleshooting and FAQ for the Micro is very informative. The Micro can be put into bootloader mode by quickly resetting the device twice. A reset is achieved by grounding the RST pin. The easiest way of doing this is by adding a tact switch between GND and RST.

You will also need the Arduino Addon Files which are available on the Pro Micro – 3.3V/8MHz page. Without these you can not select the correct board within the Arduino IDE. Out of the box, the IDE just doesn’t have the additional files required to support uploading the correct code to the 3.3 Pro Micro. After installation you should see the correct board listed in the Tools->Board menu.

This was my mistake, as I had obviously used the wrong board (the 5V in lieu of the 3.3V) to upload the code. The Sparkfun FAQ explains:

The most common source of Pro Micro “bricking” is uploading code to it with an incorrectly set board (e.g. programming a 16MHz/5V Pro Micro with the board set to 8MHz/3.3V). Also, make sure your sketch doesn’t mess with the ATmega32U4’s PLLCSR register, or any other register that sets up USB functionality on the ATmega32U4. The Pro Micro will actually take code compiled for the wrong operating speed, but when it tries to re-enumerate, you’ll be greeted with a notification “USB device not recognised”

One can, apparently, also enter bootloader mode by powering on the Micro whilst holding the RESET button down, but this didn’t seem to work for me, although I am willing to give any rumoured remedy a go.

kwan-137 also has some excellent detailed instructions on how to revive a bricked Pro Micro, again on the Sparkfun Pro Micro page

Get the driver zip mentioned in the “Getting Started Guide”. Copy the single file within it to c:\windows\inf, it will ask for administrator permission to do so.

From the same page, get the Arduino addon files and install them as instructed. Start Arduino, go to File/Preferences and turn on “Show verbose output for: ” for both compilation and upload.

Connect a jumper wire to one of the gnd pins and be ready to touch the other end to the rst pin. For me, I just slid the end of the jumper wire into the gnd hole and held it in place diagonally so it was touching, then touched the other end to the rst hole as needed.

I did this first, but I don’t know if it is necessary. I plugged the board into USB, heard the USB connect bing (low note followed by high), then about 7 seconds later, got a USB malfunction message and a USB disconnect bing (high note followed by low). During that 7 seconds, the part was recognized in the Device Manager as a Sparkfun Pro Micro.

Now for the final step: Start Arduino, select Sparkfun Pro Micro 3.3V, and double-tap the reset pin. During the 7 seconds, you should be able to select the correct serial port in Tools/Serial port. Now load an example sketch, I selected File/Examples/04.Communication/ASCIITable which just uses the USB serial port, no other hardware or D13 light needed. Push the upload button, then watch the status window. It will do something to the effect of

PORTS {COM7, } / {COM7, } => {} PORTS {COM7, } / {COM7, } => {} PORTS {COM7, } / {COM7, } => {}

a lot, maybe 15-20 times in about 4-5 seconds. Towards the end of that time, double-tap the reset pin. If it works, avrdude will print a lot of text, report success, and the part will work normally from then on. Too late on the double-tap and it will not find the device, too early and the 7-second window will expire before avrdude gets into contact with the bootloader and holds the window open.

Here’s what I think is happening: I have seen notes on the net to the effect that a poorly behaving sketch can effectively crash or block the USB driver in the device, and never let the bootloader do its work. The reset double-tap forces the bootloader to start, wait 7 seconds before starting the user sketch, and if Arduino starts a sketch upload during that time, then things work normally. Outside of that window the broken user sketch blocks things. So, the question then becomes, how did a bad sketch get into the part in the first place? I had this trouble with a part fresh from Sparkfun, which I had never put a sketch on.

Hope this helps someone out there…

I tried this the other night, for a couple of hours, trying to get the timing right, but with no success. I do not get the additional COM port appearing within the 8 seconds that the bootloader is operative. The Micro certainly appears to go into bootloader mode (the TX and RX lights stay off), but not a lot else happens. I have the IDE in verbose mode, and get a lot of messages, but those messages are the same whether the Pro Micro is connected or not:

Sketch uses 4,788 bytes (16%) of program storage space. Maximum is 28,672 bytes.
Global variables use 151 bytes of dynamic memory.
Forcing reset using 1200bps open/close on port COM3
PORTS {COM3, } / {COM3, } => {}
PORTS {COM3, } / {COM3, } => {}
PORTS {COM3, } / {COM3, } => {}
PORTS {COM3, } / {COM3, } => {}
PORTS {COM3, } / {COM3, } => {}
PORTS {COM3, } / {COM3, } => {}
PORTS {COM3, } / {COM3, } => {}
PORTS {COM3, } / {COM3, } => {}
PORTS {COM3, } / {COM3, } => {}
PORTS {COM3, } / {COM3, } => {}
PORTS {COM3, } / {COM3, } => {}
PORTS {COM3, } / {COM3, } => {}
PORTS {COM3, } / {COM3, } => {}
PORTS {COM3, } / {COM3, } => {}
PORTS {COM3, } / {COM3, } => {}
PORTS {COM3, } / {COM3, } => {}
PORTS {COM3, } / {COM3, } => {}
PORTS {COM3, } / {COM3, } => {}
PORTS {COM3, } / {COM3, } => {}
PORTS {COM3, } / {COM3, } => {}
Uploading using selected port: COM3
C:\Program Files\Arduino\hardware\tools\avr/bin/avrdude -CC:\Program Files\Arduino\hardware\tools\avr/etc/avrdude.conf -v -patmega32u4 -cavr109 -PCOM3 -b57600 -D -Uflash:w:C:\Users\davinci\AppData\Local\Temp\build8071801802790727777.tmp/Blink.cpp.hex:i

avrdude: Version 6.0.1, compiled on Apr 15 2015 at 19:59:58
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2009 Joerg Wunsch

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

Using Port : COM3
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

I think that I will have to try with the more painful USBasp route. But that can wait another day…

UPDATE

I tried the USBasp, after remembering to set the jumper to 3.3V, and got the following error:

Arduino: 1.6.4 (Windows 7), Board: "SparkFun Pro Micro 3.3V/8MHz"

Error while burning bootloader: missing 'bootloader.tool' configuration parameter

Looking that error message up on google, I came across this thread, “missing ‘bootloader.tool’ configuration” error when trying to burn bootloader. The relevant information here is:

Looks like the SparkFun folks put the “bootloader.tool=avrdude” line in for the 16 MHz Pro Micro but not for the 8 MHz Pro Micro.  You should be able to edit the boards.txt file to fix the problem.

This is indeed the case, as opening up the

boards.txt

file, which is part of the Sparkfun files, that are stored in the Arduino directory under the users home directory,

C:\Users\davinci\Documents\Arduino\hardware\sparkfun\avr\boards.txt

shows:

menu.cpu=Processor

##############################################################

promicro16.name=SparkFun Pro Micro 5V/16MHz
promicro16.build.board=AVR_PROMICRO16
promicro16.build.vid.0=0x1B4F
promicro16.build.pid.0=0x9205
promicro16.build.vid.1=0x1B4F
promicro16.build.pid.1=0x9206

promicro16.upload.tool=avrdude
promicro16.upload.protocol=avr109
promicro16.upload.maximum_size=28672
promicro16.upload.data_size=2560
promicro16.upload.speed=57600
promicro16.upload.disable_flushing=true
promicro16.upload.use_1200bps_touch=true
promicro16.upload.wait_for_upload_port=true

promicro16.bootloader.tool=avrdude
promicro16.bootloader.low_fuses=0xff
promicro16.bootloader.high_fuses=0xd8
promicro16.bootloader.extended_fuses=0xcb
promicro16.bootloader.file=caterina/Caterina-promicro16.hex
promicro16.bootloader.unlock_bits=0x3F
promicro16.bootloader.lock_bits=0x2F

promicro16.build.mcu=atmega32u4
promicro16.build.f_cpu=16000000L
promicro16.build.vid=0x1B4F
promicro16.build.pid=0x9206
promicro16.build.usb_product="SparkFun Pro Micro"
promicro16.build.core=arduino:arduino
promicro16.build.variant=promicro
promicro16.build.extra_flags={build.usb_flags}

##############################################################

promicro8.name=SparkFun Pro Micro 3.3V/8MHz
promicro8.build.board=AVR_PROMICRO8
promicro8.build.vid.0=0x1B4F
promicro8.build.pid.0=0x9203
promicro8.build.vid.1=0x1B4F
promicro8.build.pid.1=0x9204

promicro8.upload.tool=avrdude
promicro8.upload.protocol=avr109
promicro8.upload.maximum_size=28672
promicro8.upload.speed=57600
promicro8.upload.disable_flushing=true
promicro8.upload.use_1200bps_touch=true
promicro8.upload.wait_for_upload_port=true

promicro8.bootloader.low_fuses=0xff
promicro8.bootloader.high_fuses=0xd8
promicro8.bootloader.extended_fuses=0xfe
promicro8.bootloader.file=caterina/Caterina-promicro8.hex
promicro8.bootloader.unlock_bits=0x3F
promicro8.bootloader.lock_bits=0x2F

promicro8.build.mcu=atmega32u4
promicro8.build.f_cpu=8000000L
promicro8.build.vid=0x1B4F
promicro8.build.pid=0x9204
promicro8.build.usb_product="SparkFun Pro Micro"
promicro8.build.core=arduino:arduino
promicro8.build.variant=promicro
promicro8.build.extra_flags={build.usb_flags}

##############################################################

fiov3.name=SparkFun Fio V3 3.3V/8MHz
fiov3.build.board=AVR_FIOV3
fiov3.build.vid.0=0x1B4F
fiov3.build.pid.0=0xF100
fiov3.build.vid.1=0x1B4F
fiov3.build.pid.1=0xF101

fiov3.upload.tool=avrdude
fiov3.upload.protocol=avr109
fiov3.upload.maximum_size=28672
fiov3.upload.speed=57600
fiov3.upload.disable_flushing=true
fiov3.upload.use_1200bps_touch=true
fiov3.upload.wait_for_upload_port=true

fiov3.bootloader.low_fuses=0xff
fiov3.bootloader.high_fuses=0xd8
fiov3.bootloader.extended_fuses=0xfe
fiov3.bootloader.file=caterina/Caterina-fio.hex
fiov3.bootloader.unlock_bits=0x3F
fiov3.bootloader.lock_bits=0x2F

fiov3.build.mcu=atmega32u4
fiov3.build.f_cpu=8000000L
fiov3.build.vid=0x1B4F
fiov3.build.pid=0xF101
fiov3.build.usb_product="SparkFun Fio v3"
fiov3.build.core=arduino:arduino
fiov3.build.variant=promicro
fiov3.build.extra_flags={build.usb_flags}

##############################################################

makeymakey.name=SparkFun Makey Makey
makeymakey.build.board=AVR_MAKEYMAKEY
makeymakey.build.vid.0=0x1B4F
makeymakey.build.pid.0=0x2B74
makeymakey.build.vid.1=0x1B4F
makeymakey.build.pid.1=0x2B75

makeymakey.upload.tool=avrdude
makeymakey.upload.protocol=avr109
makeymakey.upload.maximum_size=28672
makeymakey.upload.speed=57600
makeymakey.upload.disable_flushing=true
makeymakey.upload.use_1200bps_touch=true
makeymakey.upload.wait_for_upload_port=true

makeymakey.bootloader.low_fuses=0xff
makeymakey.bootloader.high_fuses=0xd8
makeymakey.bootloader.extended_fuses=0xcb
makeymakey.bootloader.file=caterina/Caterina-makey.hex
makeymakey.bootloader.unlock_bits=0x3F
makeymakey.bootloader.lock_bits=0x2F

makeymakey.build.mcu=atmega32u4
makeymakey.build.f_cpu=16000000L
makeymakey.build.vid=0x1B4F
makeymakey.build.pid=0x2B75
makeymakey.build.usb_product="SparkFun MaKey"
makeymakey.build.core=arduino:arduino
makeymakey.build.variant=promicro
makeymakey.build.extra_flags={build.usb_flags}

Modifying the file to add the line

promicro8.bootloader.tool=avrdude

, so that the file now looks like

menu.cpu=Processor

##############################################################

promicro16.name=SparkFun Pro Micro 5V/16MHz
promicro16.build.board=AVR_PROMICRO16
promicro16.build.vid.0=0x1B4F
promicro16.build.pid.0=0x9205
promicro16.build.vid.1=0x1B4F
promicro16.build.pid.1=0x9206

promicro16.upload.tool=avrdude
promicro16.upload.protocol=avr109
promicro16.upload.maximum_size=28672
promicro16.upload.data_size=2560
promicro16.upload.speed=57600
promicro16.upload.disable_flushing=true
promicro16.upload.use_1200bps_touch=true
promicro16.upload.wait_for_upload_port=true

promicro16.bootloader.tool=avrdude
promicro16.bootloader.low_fuses=0xff
promicro16.bootloader.high_fuses=0xd8
promicro16.bootloader.extended_fuses=0xcb
promicro16.bootloader.file=caterina/Caterina-promicro16.hex
promicro16.bootloader.unlock_bits=0x3F
promicro16.bootloader.lock_bits=0x2F

promicro16.build.mcu=atmega32u4
promicro16.build.f_cpu=16000000L
promicro16.build.vid=0x1B4F
promicro16.build.pid=0x9206
promicro16.build.usb_product="SparkFun Pro Micro"
promicro16.build.core=arduino:arduino
promicro16.build.variant=promicro
promicro16.build.extra_flags={build.usb_flags}

##############################################################

promicro8.name=SparkFun Pro Micro 3.3V/8MHz
promicro8.build.board=AVR_PROMICRO8
promicro8.build.vid.0=0x1B4F
promicro8.build.pid.0=0x9203
promicro8.build.vid.1=0x1B4F
promicro8.build.pid.1=0x9204

promicro8.upload.tool=avrdude
promicro8.upload.protocol=avr109
promicro8.upload.maximum_size=28672
promicro8.upload.speed=57600
promicro8.upload.disable_flushing=true
promicro8.upload.use_1200bps_touch=true
promicro8.upload.wait_for_upload_port=true

promicro8.bootloader.tool=avrdude
promicro8.bootloader.low_fuses=0xff
promicro8.bootloader.high_fuses=0xd8
promicro8.bootloader.extended_fuses=0xfe
promicro8.bootloader.file=caterina/Caterina-promicro8.hex
promicro8.bootloader.unlock_bits=0x3F
promicro8.bootloader.lock_bits=0x2F

promicro8.build.mcu=atmega32u4
promicro8.build.f_cpu=8000000L
promicro8.build.vid=0x1B4F
promicro8.build.pid=0x9204
promicro8.build.usb_product="SparkFun Pro Micro"
promicro8.build.core=arduino:arduino
promicro8.build.variant=promicro
promicro8.build.extra_flags={build.usb_flags}

##############################################################

fiov3.name=SparkFun Fio V3 3.3V/8MHz
fiov3.build.board=AVR_FIOV3
fiov3.build.vid.0=0x1B4F
fiov3.build.pid.0=0xF100
fiov3.build.vid.1=0x1B4F
fiov3.build.pid.1=0xF101

fiov3.upload.tool=avrdude
fiov3.upload.protocol=avr109
fiov3.upload.maximum_size=28672
fiov3.upload.speed=57600
fiov3.upload.disable_flushing=true
fiov3.upload.use_1200bps_touch=true
fiov3.upload.wait_for_upload_port=true

fiov3.bootloader.low_fuses=0xff
fiov3.bootloader.high_fuses=0xd8
fiov3.bootloader.extended_fuses=0xfe
fiov3.bootloader.file=caterina/Caterina-fio.hex
fiov3.bootloader.unlock_bits=0x3F
fiov3.bootloader.lock_bits=0x2F

fiov3.build.mcu=atmega32u4
fiov3.build.f_cpu=8000000L
fiov3.build.vid=0x1B4F
fiov3.build.pid=0xF101
fiov3.build.usb_product="SparkFun Fio v3"
fiov3.build.core=arduino:arduino
fiov3.build.variant=promicro
fiov3.build.extra_flags={build.usb_flags}

##############################################################

makeymakey.name=SparkFun Makey Makey
makeymakey.build.board=AVR_MAKEYMAKEY
makeymakey.build.vid.0=0x1B4F
makeymakey.build.pid.0=0x2B74
makeymakey.build.vid.1=0x1B4F
makeymakey.build.pid.1=0x2B75

makeymakey.upload.tool=avrdude
makeymakey.upload.protocol=avr109
makeymakey.upload.maximum_size=28672
makeymakey.upload.speed=57600
makeymakey.upload.disable_flushing=true
makeymakey.upload.use_1200bps_touch=true
makeymakey.upload.wait_for_upload_port=true

makeymakey.bootloader.low_fuses=0xff
makeymakey.bootloader.high_fuses=0xd8
makeymakey.bootloader.extended_fuses=0xcb
makeymakey.bootloader.file=caterina/Caterina-makey.hex
makeymakey.bootloader.unlock_bits=0x3F
makeymakey.bootloader.lock_bits=0x2F

makeymakey.build.mcu=atmega32u4
makeymakey.build.f_cpu=16000000L
makeymakey.build.vid=0x1B4F
makeymakey.build.pid=0x2B75
makeymakey.build.usb_product="SparkFun MaKey"
makeymakey.build.core=arduino:arduino
makeymakey.build.variant=promicro
makeymakey.build.extra_flags={build.usb_flags}

Now, when I burn the bootloader, this had the effect of turning off the two Rx and Tx LEDs, leaving only the PWR red LED, so that operation appears to have been returned to normal. However, a content mismatch error is returned:

Arduino: 1.6.4 (Windows 7), Board: "SparkFun Pro Micro 3.3V/8MHz"

C:\Program Files\Arduino\hardware\tools\avr/bin/avrdude -CC:\Program Files\Arduino\hardware\tools\avr/etc/avrdude.conf -v -patmega32u4 -cusbasp -Pusb -e -Ulock:w:0x3F:m -Uefuse:w:0xfe:m -Uhfuse:w:0xd8:m -Ulfuse:w:0xff:m 



avrdude: Version 6.0.1, compiled on Apr 15 2015 at 19:59:58

         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/

         Copyright (c) 2007-2009 Joerg Wunsch



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



         Using Port                    : usb

         Using Programmer              : usbasp

         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 : usbasp

         Description     : USBasp, http://www.fischl.de/usbasp/



avrdude: auto set sck period (because given equals null)

avrdude: warning: cannot set sck period. please check for usbasp firmware update.

avrdude: AVR device initialized and ready to accept instructions



Reading | ################################################## | 100% 0.01s



avrdude: Device signature = 0x1e9587

avrdude: erasing chip

avrdude: auto set sck period (because given equals null)

avrdude: warning: cannot set sck period. please check for usbasp firmware update.

avrdude: reading input file "0x3F"

avrdude: writing lock (1 bytes):



Writing | ################################################## | 100% 0.00s



avrdude: 1 bytes of lock written

avrdude: verifying lock memory against 0x3F:

avrdude: load data lock data from input file 0x3F:

avrdude: input file 0x3F contains 1 bytes

avrdude: reading on-chip lock data:



Reading | ################################################## | 100% 0.00s



avrdude: verifying ...

avrdude: 1 bytes of lock verified

avrdude: reading input file "0xfe"

avrdude: writing efuse (1 bytes):



Writing | ################################################## | 100% 0.03s



avrdude: 1 bytes of efuse written

avrdude: verifying efuse memory against 0xfe:

avrdude: load data efuse data from input file 0xfe:

avrdude: input file 0xfe contains 1 bytes

avrdude: reading on-chip efuse data:



Reading | ################################################## | 100% 0.00s



avrdude: verifying ...

avrdude: 1 bytes of efuse verified

avrdude: reading input file "0xd8"

avrdude: writing hfuse (1 bytes):



Error while burning bootloader.

Writing |  ***failed;  

################################################## | 100% 0.08s



avrdude: 1 bytes of hfuse written

avrdude: verifying hfuse memory against 0xd8:

avrdude: load data hfuse data from input file 0xd8:

avrdude: input file 0xd8 contains 1 bytes

avrdude: reading on-chip hfuse data:



Reading | ################################################## | 100% 0.00s



avrdude: verifying ...

avrdude: verification error, first mismatch at byte 0x0000

         0x00 != 0xd8

avrdude: verification error; content mismatch



avrdude done.  Thank you.

Plugging the Pro Micro back into the MacBook Pro as a test, seeing as, like I said above, the Mac is the most fussy, unfortunately shown that Pro Micro was not recognised, and no entry appeared in the Port menu.


A question on Stack Exchange, nothing really new here – Arduino Pro Micro Communication Issues


Reprise

This issue was revisited one year later… see The case of the broken Pro Micro (reprise) for the happy conclusion.

6 thoughts on “The case of the broken Pro Micro”

  1. Thank you so much, thought I had bricked two Pro Micros. Got to the reset state but couldn’t upload the script I wanted. But uploading one of the Example ones during the 8 seconds worked for me. Then more stable and able to upload my sketch. I appreciate your comprehensive instructions.

    Like

Leave a comment