Unbricking a Pro-Micro Board

I had a little trouble first setting up the Arduino compatible Pro Micro board in Ubuntu, but with that little hiccup out of the way, it's been a very useful board to have. The small size and around £5 price for clones on ebay means it's cheap and small enough to leave in a completed project. Having the ATMega 32U4 chip on board (the same as the Leonardo) means keyboard and mouse emulation too, which can be a very useful extra over a basic Uno board.

While I do really like the board, I do seem to have a tendency to "brick" them with unusual frequency. Because there are two possible board frequency and voltages, both of which look almost identical, I've often uploaded a sketch that's compiled for the wrong voltage and processor frequency and then it gets sulky.

Once you've done this, (and there's no warning from the IDE when you click upload, because the chip identifier is the same for both boards), you'll suddenly find the serial port disappears from the list, and you can't upload anything to correct it.

If you're on linux and you run dmesg | tail to see what's going on, you'll likely see something like:

[61.861588] usb 1-3.2: new full-speed USB device number 4 using ehci-pci
[61.937708] usb 1-3.2: device descriptor read/64, error -32
[62.113869] usb 1-3.2: device descriptor read/64, error -32
[62.290027] usb 1-3.2: new full-speed USB device number 5 using ehci-pci
[62.362085] usb 1-3.2: device descriptor read/64, error -32
[62.538169] usb 1-3.2: device descriptor read/64, error -32
[62.714342] usb 1-3.2: new full-speed USB device number 6 using ehci-pci
[63.122582] usb 1-3.2: device not accepting address 6, error -32
[63.194715] usb 1-3.2: new full-speed USB device number 7 using ehci-pci
[63.603028] usb 1-3.2: device not accepting address 7, error -32
[63.603456] hub 1-3:1.0: unable to enumerate USB device on port 2

The procedure to correct it is very simple though; resetting the board twice in quick succession will get the board to reboot into it's bootloader mode, and it will appear as a device that you can then flash to (this is instead of the normal 0.75s wait before launching the main program on reset/power on). You'll have to be on the ball for pressing upload though, it will only stay in the bootloader mode for 8 seconds.

As there's no reset button on board, you'll have to use a jumper wire from GND to the RST pin next to it. If it's in a breadboard, that's easy enough, but if there's no convenient ground connection, bridgin the surround of the usb socket to the RST will work too.

Identify the board voltage

On the board there should be an identifier on the bottom of the circuit board that gives the voltage and frequency of the board you have, but with some of the cheaper versions, I've seen the identifying mark omitted. meArm.io has a good guide to identifying the voltage from the crystal:

  • 5V boards will have a 16MHz crystal,
  • 3.3V boards will have an 8MHz crystal,

and in each case, the frequency is marked on the crystal's case as either 16.000 or 8.000 respectively.

Pro Micro board image from Sparkfun