Ender 3: How to Install a Bootloader and Update Marlin Firmware

Update your 3D printer's firmware and add thermal runaway protection.
Zach Zach (248)
30 minutes

This guide will show you how to install a bootloader and update the Marlin firmware on your Ender 3 or Ender 3 Pro. If you're using an Ender 3 V2, then there's a different guide for updating firmware on the Ender 3 V2.

Why update your Ender 3's firmware?

Most Ender 3s ship with a customized, outdated Marlin firmware version that lacks thermal runaway protection and other safety features.

If you use OctoPrint, you may even have seen the following error message: "Warning! Your printer's firmware is known to lack mandatory safety features (e.g. thermal runaway protection). This is a fire risk." Many 3D printer fires happen as a result of thermal runaway.

What is thermal runaway?

In a nutshell, your printer contains both a temperature sensor, or "thermocouple", and a heating element. When you start a print, your heating element reads data from the thermocouple and continues to heat until reaching the predefined print temperature. Thermal runaway is a condition that exists when the thermocouple becomes dislodged or damaged and your printer continues heating, forever, until something like this happens (read: 🔥🔥🔥):

Watch the video:

What is thermal runaway protection?

Thermal runaway protection is a feature of most modern firmware that shuts down the heating element if the thermocouple isn't responding properly. To get technical, it generally polls for a temperature change every N seconds and expects an increase. No increase? Shut it down.

Guide overview

Before updating the Creality Ender 3 firmware, we'll load a custom bootloader onto the Ender 3 using a cheap Arduino Uno or Arduino Uno clone. You can pick an Uno up for about $15 on Amazon.

What's a bootloader?

A bootloader is a program that loads an operating system when a computer (in this case, the printer) is turned on. Because the Ender 3 doesn't come with a bootloader, we'll need to install one. This will allow the printer to boot using a newer version of the Marlin firmware. After installing the bootloader, we'll be able to easily update the firmware in the future, too.

This guide will work for Mac, Windows, and Linux!

Let's get started!

Arduino UnoArduino Uno ×1
Jumper wires, female-to-femaleJumper wires, female-to-female ×5
Jumper wires, female-to-maleJumper wires, female-to-male ×1
Mini USB to USB cableMini USB to USB cable ×1

Howchoo is reader-supported. As an Amazon Associate, we may earn a small affiliate commission at no cost to you when you buy through our links.

Arduino IDE
Files in Arduino are called "sketches". The Arduino IDE will open to a blank sketch.

Download and install the Arduino IDE for Mac, Windows, or Linux.

Installing the U8glib library

In the main menu, navigate to File > Examples or Example Sketches and select Arduino ISP.

Then, navigate to Manage Libraries and install the U8glib library.

Adding a custom board to Arduino IDE

Next, we'll need to install the Sanguino board.

Open Arduino Preferences and paste the following under Additional Boards Manager URLs:

https://raw.githubusercontent.com/Lauszus/Sanguino/master/package_lauszus_sanguino_index.json

Then, navigate to the Boards Manager and install Sanguino.

Uploading a sketch in the Arduino IDE

Connect your Arduino Uno (or Arduino Uno clone) to your computer using a USB cable.

Under Tools, select Arduino Uno as the board.

Then, select either Arduino Uno or COM as the port, depending on your computer.

Finally, click Upload to upload the Arduino ISP sketch. After uploading, keep the Uno connected to your computer.

Ender 3 Arduino firmware pinout diagram
This pinout diagram identifies the Ender 3 and Arduino Uno pins needed to make your connections.

Turn your printer OFF. Then, use the small hex key that came with your printer to remove the 3 screws from the Ender 3 control box—this is the box located beneath your bed.

Finally, use your "Dupont" jumper wires to connect your Arduino to your printer as follows:

Arduino Ender 3 bootloader connections

Ender 3 Pin Arduino Uno Pin
MISO MISO
5V 5V
SCK SCK
MOSI MOSI
RESET ~10
GND GND

Matching up the pins

You may have noticed these pins aren't labeled on either the Ender 3 or Arduino Uno. No worries—you might also have noticed there's an identical small 2x3 header (2 rows of 3 pins in each row) on both the Arduino and Ender 3. We basically want to "match up" the two headers, with the exception of the RESET pin.

Use the attached Ender 3 Arduino wiring diagram to connect the two headers properly.

Selecting the Sanguino board in the Arduino IDE.

Select the Sanguino board from the Tools menu. Then, change the Programmer from AVRISP mkII to Arduino as ISP. Finally, click Burn bootloader.

When the process is finished, you'll see a message stating "Output bootloader burned successfully".

Troubleshooting

If you run into issues, try the following:

  • Double-check your settings and connections
  • Swap out your jumper wires in case yours are defective
  • Make sure you downloaded the Arduino IDE directly from the Arduino website (not the Windows store)
  • If you see an error such as the one below (especially if you're running macOS), try installing the TH3D United Firmware Package and running the included preconfigured Arduino IDE instead of the normal Arduino IDE. Then, select Sanguino (1284P Boards) as the board. If you're using a Mac, don't forget to follow the Mac setup instructions for the TH3D Arduino IDE.
avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x14

avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x01
avrdude: stk500_initialize(): (a) protocol error, expect=0x14, resp=0x10
avrdude: initialization failed, rc=-1
         Double check connections and try again, or use -F to override
         this check.

avrdude: stk500_disable(): unknown response=0x12
Error while burning bootloader.

When the bootloader is done burning, carefully disconnect the jumper wires from your Ender 3, secure the control box cover, and unplug the Arduino from your computer.

The latest Marlin firmware release

Download the latest Marlin release to your computer and unzip it.

Then, navigate to Marlin/example_configurations/Creality/Ender-3 and copy all those files into the Marlin directory, replacing all files when prompted.

Updating Ender 3 firmware

Connect a mini USB to USB cable between your computer and the Ender 3's front USB port. If you're already using OctoPrint with the Ender 3, simply move the USB cable from the Raspberry Pi to your computer. :)

Back in the Arduino IDE, select File > Open and locate the Marlin.ino file from the Marlin directory you unzipped early.

Then, make sure the port is still selected as Sanguino or Sanguino (1284P Boards), the programmer is Arduino as ISP, and the proper serial port is selected.

Finally, click the Upload button. The firmware transfer process should take about a minute.

Ender 3 Marlin screen

Disconnect your computer and power on your printer. Your printer will take a bit longer than normal to start up. You should now see a different boot screen since your firmware has been updated.

Up next

Next, set up OctoPrint on your Ender 3 and improve your printing experience!

Watch the video: