Blog Post

Return to blog feed

Troubleshooting Ender 3 Pro Firmware Update

February 6th, 2021 (edited December 11th, 2021)

I recently installed Marlin firmware on my 3D printer (an Ender 3 Pro, 1.1.4 mainboard) so I could increase the size of the build space. You can find several step-by-step guides on how to do this online, and I used this one from Howchoo. It was, on the whole, very helpful, but I had to troubleshoot several unexpected issues along the way (and you should definitely expect to, also). I'm documenting them for anyone else who wants to follow the linked guide with an Ender 3 Pro. I was using a Windows 10 computer.

Wiring the Arduino (Howchoo step 5): don't forget to wire the Reset pin on the printer board to the ~10 pin on the Arduino. This isn't super clearly depicted in the pictures. If you don't do this, you'll see an error like this when burning the bootloader:

avrdude: Yikes!  Invalid device signature.
         Double check connections and try again, or use -F to override
         this check.

Error while burning bootloader.

Compiling Marlin (Howchoo step 8): when I did this, the current version of the Arduino IDE was incapable of linking the current version of Marlin. This was because it was attempting to make a long shell call to the linker that exceeded Windows' maximum length. You'll see the following error message in the Arduino IDE after clicking "Verify" or "Upload" if this happens:

fork/exec C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-gcc.exe: The filename or extension is too long.
Error compiling for board Sanguino.

As the call was largely using relative paths, I saw no way to easily reduce its length. Fortunately, there are plenty of other ways to compile and upload firmware (all of them are essentially wrappers around a compiler such as gcc and the uploader, avrdude, by the way), so at this point, I ditched Arduino and switched to following this guide from Marlin using Visual Studio Code.

PlatformIO Environment (Marlin step 2): the default_envs for the Ender 3 Pro in this configuration is melzi_optiboot. If you get this wrong you might see a series of errors like this on upload (the trailing hex value will vary):

avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00

Uploading firmware (Marlin step 2 [okay, like this entire tutorial is in step 2]): If you haven't (successfully) connected your printer to a computer via USB before, you might need to install drivers. If that's the case, you won't see the Ender in Device Manager (under Ports) or under the Arduino IDE's Ports list. PlatformIO might give you an error like this on upload:

Error: Please specify upload_port for environment or use global --upload-port option.

All the Ender 3 Pro boards use the CH340 drivers, which you can find here. Always restart your computer after installing drivers.