How to Update CNC Machining GRBL Firmware

Much of the information represented below is taken from the GRBL Github Page, and been updated to include more detail for those doing this sort of thing for the first time.  It’s very hard to damage anything so just give it a crack.

These are the quickest most foolproof steps to take in updating GRBL onto an Atmel based board like Arduino, the GRBL-AIO and others – basically, any board that runs GRBL will be updatable following this guide.


  • Windows Mac or Linux computer.
  • Latest GRBL Firmware
  • Arduino Software
  • USB Cable
  • Grbl Compatible Control Board

Step 1 – Download Arduino Software, if not already installed.

The Arduino software is the simplest way to install drivers for most serial devices used by Arduino compatible boards  (although not out GRBL-AIO).  It is also a simple way to compile and upload firmware to such boards (including our GRBL-AIO).

Download the latest Arduino software here.  Current version at the time of this post is 1.8.5.

Choose and download the file for the appropriate operating system download, note for windows you should select the windows installer, not the non-admin install (as it won’t install the useful drivers for you).

Double click on the installer file you have downloaded and follow the prompts to install the Arduino interface.  It may prompt you to install several drivers, just say yes.

Step 2 – Download Latest GRBL Firmware

  • Browse to the latest GRBL Release on Git-Hub here.
  • Select the ‘Clone or download’ drop down box and click  ‘Download ZIP’ to begin download
Download Grbl

Step 3 – Unzip Downloaded GRBL Firmware.


  • Click on the file in your browser downloader and it should unzip into your downloads folder, or where ever you selected to save the file.
  • Alternatively, find the file in your downloads folder (or where ever you saved it), it will be named ‘’, and double-click it and it will unzip.


  • Open your downloads folder, or where ever you saved the file, find the file named ‘’, right click on it and choose ‘extract all’ or ‘extract here’.
Extract Windows
  • If you have installed WinZip or similar it may have hijacked windows native right click context menu unzip functionality and you may have to use that software instead.

You should now have an unzipped folder named ‘grbl-master’ on your computer somewhere.

Step 4 – Install Grbl Firmware Uploader into Arduino Interface.

  • Open the previously installed Arduino program.
  • Check to see if any previous versions of grbl are already installed.
    • Look under menu “File” => “Examples” to see if there are any mentions of GRBL.   If there are none no worries, if there are some mentions of GRBL in here then you need to go and clean them out.
    • Above you can see we have some old versions there and so to clean them out:  Look in “/Documents/Arduino/libraries/” and delete any folders with “GRBL” in the name.  If you have just installed Arduino you won’t find any so move on.
    • Back in the Arduino program, select “Sketch” => “Include Library” => “Add .ZIP Library’.
    • GrblincludeLibrary
    • Even though we have selected to include a .ZIP library, we are not going to select the zip file but instead will choose the folder we unzipped named ‘grbl-master’.
    • If you accidentally select the .zip file or the wrong folder, you will need to start this step again by deleting the files.  Note that you may have to restart the Arduino interface after deleting the files to confirm that the libraries have actually been deleted  (Arduino program only checks for the existence of libraries on open and so if you delete some it won’t know until you open it again and it cannot find them.)

Step 4 – Backup your GRBL Settings

  • If you already have a functioning machine you want to take a copy of your GRBL parameters now in case something goes wrong.
  • Click “tools” => “Port” and select the port your GRBL Board is connected to.  AIO boards will show up as “3DTek Grbl AIO” or “SLAB_USBtoUART”. Other boards may show up as Arduino or … something else.
  • Now Click on “Tools” => “Serial Monitor” and it will open the following window. You will need to select “Both NL & CR” and “115200 Baud” in the two drop down boxes at the bottom.
  • If your board alread has GRBL loaded, you will be greated with something like the above.  Note the first Line GRBL1.1F  –  This is the GRBL Version number, expect this to change to what ever release version you are updating once you have completed the next step.
  • Type $$ into the empty text box at the top and hit enter. You will see a list of all GRBL’s current parameters, as per below
  • Copy all that text and save it to a document somewhere on your computer

Step 5 – Flashing New Firmware to the board

  • Close the serial monitor window.
  • Open the GRBL Upload project by clicking menus “File”=> “Examples” => “GRBL” => “GRBL Upload”
Choose Sketch
  • Click “Tools” => “Board” and select an Arduino board that matches the Arduino you are using, or with the same chipset as your board.  For the AIO, choose ‘Genuino Uno’.   Mostly it’s the Uno or Genuino or something with UNO in the name, as this uses the chip (ATMega328P) that GRBL was originally designed for. If you’re using some exotic port of GRBL on a different processor then you likely know what to select here. Otherwise, choose ‘Genuino Uno’.
Choose Arduino Board
  • Select the programmer named “AVR ISP MKII” from the “Tools” => “Programmer” Menu.
  • Upload to the board by clicking on the “Sketch” => “Upload” menu. Don’t chose “upload with programmer” unless of course, you know what your doing and have an external programmer connected to ISCP pins or similar.
  • Expect to see a lot of rubbish in the orange output text down the bottom. The last comments will be:
Writing | ################################################## | 100%
avrdude : XXXXX bytes of flash written
avrdude done. Thank you.

Step 5 – Confirm Upload

  • Hopefully, you received the output above and not some annoying error.
  • Now go back and run the first few parts of Step 4 and confirm that the version number displayed when you first open the serial monitor is the version has changed to what you are expecting, the latest version that you downloaded.
  • Confirm also that all your $ parameters are the same as the backup you took in step 4 the first time around.
  • Any parameters can be updated here by simply typing  ‘$ parameter_number new_value, into the top text box and hitting enter.
  • For Example, to update the Steps per mm for the Y-Axis you could type $101=40.  For a full list of the parameters and descriptions see Grbl Configuration
  • REMEMBER to REPLACE JP1 if you had to take it off in order to program the board, you probably won’t have but if you did…don’t forget to put it back!

As mentioned – This guide builds a little on the official one, for those who need a bit more info… here is the original:  GRBL Github Page

External Programmer note

If using a GRBL-AIO board and are using an external programmer, REMOVE JP1 from your GRBLAIO before programming and put it back afterwards!  

The GRBL AIO has filters on all the IO to stop the stray noise that plagues most CNC machines and is discussed at length in all the forums.  The Z limit switch is on a microcontroller pin that is also used for ICSP programming and so if your programming via Chip Piggy Back or External programmer using the ICSP interface then you will need to remove JP1 during programming otherwise the filter on the Z limit switch line will interfere with data transfer.