I've been struggling with this issue for a few days on and off now.  I made a custom PCB (schematic) for a smaller Arduino Pro Micro and it works - mostly.  The only issue I had was that the pins on the USB connector were backward, but when I soldered on a USB cable everything worked as expected.

I then made a new board (schematic) with the following changes:
 - Fix the USB connector
 - Changed two of the GPIOs that were brought out to pins (from D4 and D17 to D6 and D9)
 - Added an onboard LED connected to D8
 - Removed the jumper on HWB pin

I have been able to burn the bootloader using both an Arduino Uno and with an AVRISP mkII.  When I plug the micro into the computer the first time it is recognized as an "Arduino Micro (COM6)".  Then I try to upload the Arduino example Blink.ino sketch - and that works too.  In the process the IDE forces the reset and in device manager I can see the "Arduino Micro bootloader (COM7)" replace the micro on COM6.  The LED does begin to blink but in device manager it remains as "Arduino Micro bootloader (COM7)".  When I try to upload another sketch to this port it fails (as I would expect) because it cannot force the reset; presumably because the bootloader is already active.  So I unplug it and try again.  It shows up as "Arduino Micro (COM6); all looks good but when I try to upload it cannot force the reset, tries to upload to "Arduino Micro (COM6)" and fails (I assume because it is not entering into the bootloader).

When I double tap the reset pin or connect to the arduino using a baud rate of 1200 the micro does reset (as expected) and the light stops flashing so I suspect the bootloader is being executed - but on device manager it remains as "Arduino Micro (COM6)".

If anyone has any ideas I'm all ears.  Normally I do not have to fight with Atmel hardware like I have on this issue.

  • The bootloader on the chip only waits a few seconds for an upload request. If you start the upload within this time the things will happen as you expect them. If the time is over the bootloader stops listening on the serial port and frees it for the program. You can reenter the "boot time interval" by resetting the chip. But as you have no button ( ;-) ) this would be difficult. A UNO for example has an extra USB to Serial converter chip that can perform this reset before the programming starts. Can you add an external reset button and try pressing it and start the programming immediately? Commented Dec 22, 2019 at 13:35
  • If you ask why the first upload was possible: As long as there is no program on the chip, the bootloader has no reason to give up control to a program. Then it waits forever for an upload. Commented Dec 22, 2019 at 13:36
  • That second comment makes sense (kinda what I figured). When I reset (wire soldered to the resistor-next board will have a pin for RST) the chip the LED I connected for the blink turns off for 8 seconds. (This is the boot time interval for the Arduino Micro bootloader I believe. To the computer it is still seen as "Arduino Micro (COM6)" - not bootloader. When Arduino IDE attempts to connect to the programmer (LED still off) it errors out.
    – av324192
    Commented Dec 22, 2019 at 14:06
  • 8 Seconds sounds reasonable. It depends from where you got the bootloader, but the device name "Arduino Micro" is the correct string for the caterina version that is chosen automatically by the IDE. I found another thread that could be the solution but I don't understand why. Please see arduino.stackexchange.com/questions/57651/…. Commented Dec 22, 2019 at 14:37
  • 1
    The issue I am having a problem wrapping my head around is that I have two versions of this board; one works, one doesn't. Using Atmel Studio I can verify that the flash, fuse and lock bits are all identical. I updated the question with both schematics.
    – av324192
    Commented Dec 23, 2019 at 1:42


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.