Bootloader + Firmware upgrade (RPi & Arduino)
I recently purchased an Ender 3 and I wanted to get the firmware upgraded for a multitude of reasons. This was challenging because although there are a ton of resources, the information was all over the place. I needed a consolidated guide but couldn't really find one.
I managed to do it somehow but I thought I can help others by making a step-by-step guide, so here goes.
Steps to flash bootloader with Arduino:
- Teaching Tech explains how to flash the bootloader in this video. Watch this until 08:56 and then follow the steps below to flash Marlin 1.1.9
Steps to flash bootloader with RPi:
- Follow u/n00bsen's guide on how to flash the bootloader. The guide is beautifully explained and is easy to understand, with pictures. Full credit to him. I have tried with RPi B and it works. Link: //imgur.com/gallery/4kIDSpv
Steps to flash firmware:
- Download the latest Marlin release from https://github.com/MarlinFirmware/Marlin
- Unzip the firmware folder and go to Marlin>example_configurations>Creality>Ender-3. Copy all the files and copy them into the root Marlin folder. Replace the required files. Now the firmware is configured for the Ender 3.
- Open Marlin.ino in Arduino IDE.
- Add the Sanguino board to the board manager by pasting this Link in File>Preferences>Additional Board Manger URL's. Go to Tools>Board>Board Manager. Search for Sanguino and install it. Now select it on Tools>Board.
- Now you need to include a library called U8Glib. Download the U8Glib zip from Link and go to Link to check which version is compatible. Currently U8Glib 1.1.17 is supported.
- In Arduino, go to Sketch>Include Library> Add .ZIP Library. Navigate to the U8Glib zip and select it.
- Make sure the processor is ATMega 1284 (16 MHz) in Tools>Processor.
- Go to configuration_adv.h and uncomment the following:
#define arc_support
#define MESH_BED_LEVELING
#define POWER_LOSS_RECOVERY <-- Optional. Supposedly reduces SD card lifetime. - Go to configuration.h and uncomment the following:
#define LCD_BED_LEVELING
#define DISABLE_BOOT<-- To save space when mesh bed levelling is enabled
#define SLIM_LCD_MENUS <-- To save space when mesh bed levelling is enabled
#define SPEAKER <-- To save space when mesh bed levelling is enabled - If you have the newest Ender 3 revision, the printable area has been increased.
In configuration.h, by default it is set to:
#define X_BED_SIZE 220
#define Y_BED_SIZE 220
Replace it with:
#define X_BED_SIZE 235
#define Y_BED_SIZE 235 - Once these are done, compile the code. It should compile without errors.
- Upload the sketch to the printer via the USB port. Make sure the COM port is correct.
- Disconnect everything and restart the printer. The firmware is now flashed along with all the features.
- Make sure to perform mesh bed levelling as shown here: Link
- Remember to store the mesh bed levelling settings.
- Also, add the line M420 S1 after G28 in the Cura printer settings so that the printer refers to the mesh bed levelling settings before each print.
I cannot stress how good mesh bed levelling is. It is a lifesaver and is absolutely a must, as is the thermal runaway protection that the firmware offers.
Note: I have the latest revision of the Ender 3 and I had read that the new board (V1.1.4) has a bootloader built in so I tried to flash Marlin directly through the USB port. Unfortunately, that doesn't work, so don't try it.
If anyone has any inputs or suggestions, please leave a comment and upvote the ones that you agree with.
EDIT: added new bed area command for the latest revision (235x235x250)
Credits: u/n00bsen, Teaching Tech & Thomas Sanladerer.