arduino pro micro 3.3V on linux: uploads 'blink' once then refuses to enumerate

I bought a bunch of 3.3V pro micros that appear to have real atmega32u4 chips on them. They identify as real briefly. I'm using Xubuntu 16.04 (uname -r 3.13.3-170) with arduino 1.8.7 on one machine, and xubuntu 20.04 with arduino 1.8.13 on another machine.
On both machines, I can plug the chip in and see it show up in dmesg and find it in the arduino IDE, check the board info, I can upload blink, and once I do so all the LED's come on, stay on, and from then on the board refuses to enumerate as a usb device.
Example of dmesg once I've tried programming it once:
[467519.580143] usb 3-1: new full-speed USB device number 14 using uhci_hcd
[467519.700150] usb 3-1: device descriptor read/64, error -71
[467519.924195] usb 3-1: device descriptor read/64, error -71
[467520.140156] usb 3-1: new full-speed USB device number 15 using uhci_hcd
[467520.260134] usb 3-1: device descriptor read/64, error -71
[467520.484124] usb 3-1: device descriptor read/64, error -71
[467520.700160] usb 3-1: new full-speed USB device number 16 using uhci_hcd
[467521.116074] usb 3-1: device not accepting address 16, error -71
[467521.228112] usb 3-1: new full-speed USB device number 17 using uhci_hcd
[467521.640149] usb 3-1: device not accepting address 17, error -71
[467521.640247] hub 3-0:1.0: unable to enumerate USB device on port 1

This has happened with four devices, on two different machines.
I have tried hard-resetting them once, twice, 20-ish times, with no success.
There's no delay in booting whatever it's doing at all: I plug the board in and immediately the LED's turn on, and dmesg blows up (although it does show repeated additional entries as the usb subsystem repeatedly tries to get the chip to enumerate.)

I hooked up an atmel avrisp to one, reburnt the bootloader, it claims I did it successfully, but the chip still refuses to enumerate after burning a new bootloader.

I also have a 5V pro micro. It works fine every time.
So, if you're using linux maybe don't get 3.3v pro micros.
I'm open to suggestions. I have one left that I haven't yet destroyed by attempting to program it.

This happens when you compile the sketch with a board selection in the Arduino IDE that is configured for a different clock speed than the actual clock speed on the hardware.

The 3.3 V Pro Micros have an 8 MHz clock, whereas the 5 V Pro Micros have a 16 MHz clock, so this explains why you are getting different results with the 5 V boards.

There was a recent discussion about this, including the recovery technique here:
https://forum.arduino.cc/index.php?topic=727750
Please give that a try. If you have any questions or problems, let me know and I'll help out.

Note that doing a "Burn Bootloader' with your ISP programmer is a valid alternative to the reset fix. You only need to make sure you have the correct board selected before doing the "Burn Bootloader" (because the bootloader also needs to be configured for the right clock speed). So if it's more convenient for you to do the "Burn Bootloader' than the manual reset, feel free to do that. The average Arduino user doesn't own an ISP programmer and perhaps not even a spare Arduino board to turn into an "Arduino as ISP", so I don't normally mention that more complex option, but it sounds like you're well equipped!

1 Like

This appears to have worked: thank you!

Follow-up: avr isp mk2 also burns the right fuses with the bootloader and restores the others to functionality. Yay!

You're welcome. I'm glad to hear it's working now. Enjoy!
Per

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.