Flashing a Bootloader to the CR-10


Introduction: Flashing a Bootloader to the CR-10

The Melzi board contained in the Creality CR-10 does not come pre-flashed with a bootloader. A bootloader is what enables us to write firmware over usb. If we plan on flashing new firmware and don't want to have to take the control box apart every time, we need to flash one.

We will be flashing this bootloader via ICSP using an Arduino as the programmer. This same task can be completed using a USB ICSP Programmer. I had an Arduino Uno lying around so that's what we'll use for this demonstration.

Note that the firmware I provided is almost totally stock. I made no real modifications. I simply provided this for others who wish to modify their firmware.

Step 1: Programming the Arduino UNO


First, download and install the latest version of the Ardunio IDE from Ardunio. Then connect your Ardunio via USB to your PC. Once connected we will have to determine which COM port your Arudino is using. So open up Device Manager and under the "Ports" section, see what COM port yours is using. In the screenshot I provided, my Arudino was using COM5.

Now we can head over to the Arduino IDE that we installed earlier.

  1. Open the Arudino IDE that you just downloaded
  2. From the Tools menu, select Board and then chose your board type (Arduino/Genuino UNO in my case)
  3. From the Tools menu, select the port your Arduino is connected to (COM5 in my case)
  4. From the File menu, select Examples > ArudinoISP > ArudinoISP
  5. Select Upload (Sketch > Upload or the small right facing arrow on the toolbar)

Once that uploads successfully, your Arduino is now an ISP Programmer! Disconnect it from your PC and close the Arduino IDE.

We can now connect to our Melzi board.

Step 2: Wiring It Up

  1. First off, you will have to turn off the power and remove all of the cables from the control box.
  2. Once it is free, flip it over to remove the screws holding the bottom plate on.
  3. Flip it over and remove the two screws on the side of the box holding up the power supply.

Once you've moved the power supply out of the way (be careful as some of the wires connected to it are not very long) you should be able to see the controller board. You can either remove the controller board from the housing or leave it in place. I chose to leave it in place to save time. If you do the same, find something to prop up the power supply.

Next, swap the USB/VREG jumper to USB so that we can power the board via USB. You can find it's location on the picture I attached.

Now we have to wire our Arduino to the Melzi controller board inside our CR-10. This will be done by connecting the ICSP pins on the Arduino to the ICSP pins on the Melzi. I've attached a few pictures to see how this is done. I recommend using female to female jumper wire to do this but any way you can wire this can work. It should be wired as follows:

Melzi -----> Arduino

5V --------> 5V
SCK -----> SCK
RESET -> Digital Pin 10
GND ----> GND

If you line up the Arduino and Melzi like I have in my picture, you can just connect the pins on each board as you see them (top left to top left, bottom left to bottom left etc..) with the exception of the RESET pin on the Melzi. The RESET pin on the Melzi needs to be connected to Digital Pin 10 on the Arduino. You can make this connection with a female to male jumper wire or you can do what I did and just slide a small pice of tinned wire in one side of a female to female jumper wire.

Step 3: Flashing the Bootloader

We will now flash the bootloader to the Melzi board using the Arudino UNO as a programmer. First, we have to download the Sanguino add-on for our Arduino IDE:

  1. Download Sanguino from this link.
  2. Extract the contents of the zip to your Arudino hardware directory (usually Program Files (x86)\Arduino\hardware)

Now we can connect things to our PC and start flashing:

  1. Once everything is wired up correctly, connect the Melzi board to your PC via USB.
  2. Go back into Device Manager and verify which COM port the Melzi board is using.
  3. Now you can plug your Arduino board into the PC via USB as well.
  4. Open the Arduino IDE and from the Tools Menu select Board > Sanguino
  5. Select Tools > Processor > ATmega 1284P 16Mhz
  6. Select Tools > Port and choose the port for the Arduino board (NOT the Melzi)
  7. Select Tools > Programmer > Arduino as ISP
  8. Finally, Select Tools > Burn Bootloader

If everything was done correctly, it will now burn the bootloader to the Melzi board using the Arduino UNO as an ICSP programmer. At the bottom of the Arduino IDE window, there will be a small black box that should say it completed successfully.


So you're sure you did everything right and you tried to burn bootloader yet it didn't work? Here is an Alternative Method using a sketch made by a brilliant man named Nick Gammon.

  1. Download Nick Gammon's sketches from here. (Nick Gammon's web page can be found here)
  2. Extract the zip somewhere. Documents\Arduino is a good place.
  3. Back in the Arduino IDE, click File > Open
  4. Find the folder you extracted Gammon's sketches to. Inside that folder, there will be a folder named Atmega_Board_Programmer and inside that folder, a file named Atmega_Board_Programmer.ino. Select that file and open it.
  5. Now set your board (Tools > Board) to the Arduino UNO and your port (Tools > Port) to the com port of the Arduino UNO, and your programmer (Tools > Programmer) to the AVRISP mkII
  6. Upload the sketch.
  7. Wire everything up as previously stated in this guide and connect both boards via USB to your PC.
  8. With everything still set up for your Arduino (Board, Port and Programmer), in the Arduino IDE, select Tools > Serial Monitor.
  9. Inside the Serial Monitor window, there are two drop down boxes at the bottom right, set the first to "Both NL & CR" and the second to "1152000 baud".
  10. Some text should scroll by. If you get a message saying "Failed to enter ICSP programming mode" something is wired incorrectly.
  11. If you get the message "Type 'Q' to quit, 'V' to verify, or 'G' to program the chip with the bootloader ...", type G in the text box at the top of the window and click the send button.
  12. If preformed correctly, it will flash the bootloader.

Step 4: Flashing Firmware

Now that our Melzi has a bootloader burned to it, we can flash it via USB. You can disconnect the Arduino from the Melzi board now.

For the firmware I provided on the Facebook group, you will need to download Arduino v1.0.5 (I used 1.0.5-r2). You can find it on Arduino's website. You will also need to extract the Sanguino folder to the hardware folder of the Arduino v1.0.5 installation.

  1. Extract the firmware to a folder somewhere.
  2. Open Arduino v1.0.5
  3. File > Open and locate the folder you extracted
  4. Select the Marlin.ino file.

This will now open the firmware in Arduino, you can make whatever changes you'd like here. Most changes will occur in the Configuration.h file. Once you're happy with your firmware settings:

  1. Set your board to Sanguino W/ ATmega1284 or ATmega1284P (16MHz) (Tools > Board)
  2. Set your port to the COM port for the Melzi board (same as the previous step Tools > Serial Port)
  3. Set your Programmer to AVRISP mkII (Tools > Programmer).

Now you can hit upload and, if you've done everything right, you will now have a custom firmware on the CR-10. Any time you want to change something in your firmware, simply connect via USB, open Arduino v1.0.5, make your changes and hit upload!




  • Creative Misuse Contest

    Creative Misuse Contest
  • Water Contest

    Water Contest
  • Oil Contest

    Oil Contest

37 Discussions


9 months ago

Hiw=everything went well until I tried to put the new firmware on the cr-10 board.I got the error:

"In file included from C:\Users\xxxxx\AppData\Local\Temp\arduino_build_789088\sketch\pins.h:61:0,

from C:\Users\xxxxx\AppData\Local\Temp\arduino_build_789088\sketch\MarlinConfig.h:33,

from C:\Users\xxxxx\Desktop\cr10\firmware\Marlin-1.1.x\Marlin-1.1.x\Marlin\Marlin.ino:31:

pins_RAMPS.h:48: error: #error "Oops! Make sure you have 'Arduino Mega' selected from the 'Tools -> Boards' menu."

#error "Oops! Make sure you have 'Arduino Mega' selected from the 'Tools -> Boards' menu."


exit status 1

#error "Oops! Make sure you have 'Arduino Mega' selected from the 'Tools -> Boards' menu."


I don't know why I get this error, I have followed the instructions to the letter. I used both arduino 1.05 r2 and 1.8.5, same errors. I chose the "Sanguino W/ ATmega1284 or ATmega1284P (16MHz)
" as in the instructions.

My printer is down now and I am stuck. Please help.

Thanks in advance

1 reply

I presume your Marlin config.h is correctly setup for Sanguino used by CR10 and not a basic Reprap? What motherboard is defined?


5 months ago

Hey thanks for the guide!

I was wondering, I heard some of the CR10's came preflashed with bootloder,

Is there any way to identify if mine has the bootloader already? (except for trying step 4 directly, aand if ill try it can it damage something?)

Dose it necceserry to change firmware when upgrading the hotend to V6?

Thank yoou in advance.


6 months ago

There are no jumpers on the new board - I tried to flash with no luck

1 reply

Is there a spot where you could solder a jumper to allow for USB power? or did they totally change the PCB? if the three solder pads are there it should work and they just didn't put the pins on, Just a thought

I had to use the second method to flash boot loader, also Arduino 1.6.8 to flash the firmware, had to try it twice, i got an error the first time, along with U8glib version 1.1.8 imported in from Arduino library, Lauszus sanguino 1.0.2-4-g360282f

1 reply

This was on a CR-10 Mini from Gearbest, My Melzi board had the usb jumper


6 months ago

I just got my CR10 and there is no jumper on my Melzi board. Does this mean there is a bootloader on it??

THIS IS NOT THE SAME FOR THE TEVO TORNADO. The TEVO uses an atmega2560 instead of the 1284 so you must choose genuino/ mega2560 instead of the sanguino for all steps.....that being said it turns out the tevo tornado has a bootloader already flashed.....

You need to choose the arduino serial port as programmer, not the melzi board's port.

It seems that the latest control boards may be coming with a bootloader. Mine bought from sainsmart did.

Does it have to be an Arduino or can it be one of the cheaper knockoffs?


9 months ago


Thanx a lot for the outstanding instructable. And thanx to Nick Gammon, whom I never met.

My experience in the process:

1. The first run of burning a bootloader with "Arduino as ISP" failed. Really sure about the COM port to use?

2. The Nick-Gammon-Way worked flawlessly.

3. Was able to upload the recent Marlin build (1.1.5) with Arduino IDE 1.8.4 after some hiccups (could it be that there are some issues when trying to compile from a mounted network drive? Worked without any complaints from a local folder...) Don't forget to replace the standard config.h in the Marlin folder with the config.h from subfolder \example_configurations\creality\cr-10 before compiling.

4. Supervised Testprints successful

5. Eager to tweak around in the firmware. E3D v6 meet CR-10, CR-10 meet E3D v6. And a happy new year (sorry, endorphin rush)

Thanx again and cheers

So we have the new CR-10S with the new control board, and these pins are neither in the same position, nor grouped together like in these photos. Do you have any info on installing a bootloader with the new CR-10S control board?


10 months ago

Hi. What's the reason for why we need to use 1.0.5 and not the newer Arduino IDE?


10 months ago

Ok so I'm nervous about doing this, but I am going to have to eventually since I bought the E3 V6 Hotend and cut my stock wires too short to reuse. My controller has a USB input into it, would I be able to flash it with that? Also, does anyone have a video of this. I'm so unclear on how to manage this without an Arduino board.

2 replies

Reply 10 months ago

Can you do this with a pi?


Reply 10 months ago

Also can't access the CR10 group until an admin approves.......

The wires for the mega are:

Programmer Target
MISO (50) - MISO (50)
MOSI (51) - MOSI (51)
SCK (52) - SCK (52)
SS (53) - Reset (30)
5V - 5V


10 months ago

Can I use an USB ASP programmer and flash the bootloader onto the CR-10 board using a PC?