Burning a bootloader to an Arduino Nano using another Arduino

Recently I have bought a cheap clone of Arduino Nano from the Chinese site Deal Extreme. Unfortunately, that product (SKU 81877) comes without a bootloader. The main sign that indicates you that the Arduino doesn’t have a bootloader is that the “L” LED, next to the Power LED, doesn’t blink when the Arduino is connected to the power source or when the Reset button is pressed.

It is possible to use your Arduino without a bootloader, but it won’t work with the Arduino IDE and you will need an external AVR Programmer like this one in order to upload sketches.

So I needed to follow two main steps in order to get my Arduino Nano working without buying an AVR programmer:

  1. Solder the six ICSP pins. These pins are provided in the same package, but you need to solder them to the Arduino board.
  2. Use another Arduino (a working one) as an ISP programmer in order to burn a bootloader onto the non-working one. I borrowed another Arduino Nano from my friend Nahuel (let me say thank you to him and Dani, who helped me with all of this), but other models shoud work too.

The Arduino board I bought looked like this. Notice that the ICSP header slot, highlighted in red, doesn’t have any pins soldered to it:

icsp

And this is my board after soldering the pins:

con_pines

So it was time for the second step: to burn the bootloader using another Arduino as an ISP programmer.

First of all, connect the working Arduino (the one you will be using as the programmer) to your computer with the USB cable and launch the Arduino IDE. From the Tools menu select the right Serial Port and Board ( the one that corresponds to the Arduino that you are using as the programmer; in this case, Arduino Nano w/Atmega 328) and then load the “ArduinoISP” sketch from the File->Examples menu. Compile it and upload it to the working Arduino.ArduinoISP

Then you need to connect the two Arduinos. The ICSP pin header of the Arduino without bootloader must be connected to the regular pins of the Arduino that will be used as the programmer.

I found here a way to do the connection. Basically, you have to connect them this way:

Arduino without   |  Arduino as ISP
   bootloader     |   programmer
__________________|________________
ICSP pin#1 (MISO) |      D12
ICSP pin#2 (+5V)  |      5V
ICSP pin#3 (SCK)  |      D13
ICSP pin#4 (MOSI) |      D11
ICSP pin#5 (RST)  |      D10
ICSP pin#6 (GND)  |      GND
__________________|________________

In case you need it, this is the ICSP pinout (use the number “1” printed on the Arduino board next to the ICSP header slot as a reference):

icsp_pinout

Here you have a couple of pictures of the two Arduinos connected (yes, cables got a bit messy 🙂 ). The Arduino connected to the white USB cable is the one used as the programmer, while the other one is the Arduino that came without its bootloader.

2arduinos_1

2arduinos_2

After wiring the Arduinos, connect the one that is used as the programmer to your computer again. This time, In the Tools -> Board menu select the item that corresponds to the Arduino in which you are going to burn the bootloader (in this case, Arduino Nano w/Atmega 328 again). Then go to the Tools->Programmer menu, and select “Arduino as ISP” instead of the default “AVRISP mkII”:

programmer

Finally, click in the Tools -> Burn Bootloader menu item. After some seconds of flashy LED blinking, the brand new Arduino is ready to use! Have fun! 🙂

Advertisements

39 thoughts on “Burning a bootloader to an Arduino Nano using another Arduino

  1. Thanks Fransisco, for your clear instructions.I was able to burn the bootloader onto my Arduino Nano (yes from DealExtreme) from my Uno. However I was unable to use the Arduino SDK to upload any sketches to the Nano. So I switched to Eclipse with the AVR plugin. Then I was able to successfully upload the Blink sketch and the LED started blinking, I was surprised that it was red, but hey, who’s complaining? I am not sure why the Arduino SDK is unable to upload to the newly burned Nano, but I mainly use Eclipse now anyway.

  2. I have the same problem with the same board with the same seller. I’ve just follow this post with another arduino (Uno R3) and it works!!! 🙂
    The first time i burned the bootloader have the same problem that Ecoharpo, and the serial port not recognized by IDE. I burned for a second time, and all works fine!! Thanks!! I 🙂

  3. This has saved my project! i just used a Uno had borrowed to program my Nano. I just used some jumper leads without any soldering. Any your pin diagram was super helpful because I actually got it wrong the first time.

  4. Thanks, this helped me very far, but I got a connection error when trying to burn the bootimage. Checked every connection and could not find any problems. Uploading sketches through the ISP worked fine. To fix the problem I used this sketch:
    https://github.com/adafruit/ArduinoISP/blob/master/ArduinoISP.ino

    Had to use the “slow speed chip erase and fuse burning” as described in the large comment on top. After erasing, fuse burning and re-uploading the ISP sketch without slow mode, burning the bootimage worked from the Arduino IDE 😀

    BTW: If you use a different Arduino board to program the nano, you should select that board when uploading the Sketch, and Nano as board when burning (with Programmer > Arduino as ISP).

    • GREAT!!! I damaged bootloader in my Arduino Nano and original arduinoISP sketch does not work for me. This one works significantly better. Thank you very much, it saves me a lot of time. 😉

  5. Thanks dude! It seems to have worked here ^^
    ..but I’m still having a problem.. my Nano ATmega328 isn’t recognized both in Windows and Linux :/

      • Just a heads up, if you’re using a Mac with OSX Lion or Mountain Lion, make sure you download and install the latest FTDI drivers (the chip used for serial communication via USB on the nano) and relaunch the IDE or you will not be able to recognize the board via USB. HTH

  6. Tks a lot Guy, very good work!!!! I got a new one from DX and spend hours seachiing why didn´t work( comm, config,drivers, java and IDE version,and etc,etc and etc) and than at dx site someone gave me your safer link!!!tks

  7. I had the D8 problem on 2 Nano’s from marcmart.home via eBay over a year ago but only just been brought into service. After a lot of reading it was clear a new bootloader with correct fuse configuration was needed. Your instructions were excellent, I used one Nano to fix the other, then vice versa, some sync problems during the programming but upgrading to Arduino 1.0.5 fixed it, so both Nano’s are fully working again.
    Thank you hugely for this, your great write-up was very much appreciated!!
    Mike in the UK.

  8. Pingback: Non-functional Arduinos from Banggood.com | Axotron Blog
  9. Thanks, dude for this good and clear instructiona. I used a Duemillanove which fortunately had bootloader and connected it one after the other with two of these “deaf” Nano V3 boards. Additonally I connected the three LEDs mentioned in the program header comment. They go from pins 9, 8, 7 over 220 Ohm to Gnd indicating operation (9), error (8), programming (7) and are giving a lot of insight what’s going on. While the upload to the first board went smoothly, the error LED indicated some problems with the second board. It needed two retries but finally did it. After that I could upload programs to both nano boards using the Arduino IDE.

  10. Dude your are awsome!! I had my old arduino nano broken. Bought two chinesse without bootloader. Than after some time I purchased a new arduino nano and with than I burn the boodloader to all. Now i have 4 arduino nano all thanks to your post. Very easy to do with that!

  11. I use Arduino Leonardo to raise Arduino Nano. When I run the boot loader displays an error
    avrdude: stk500_getsync(): not in sync: resp=0x00
    how to fix it?

    Regards

  12. Is it possible to load the bootloader using arduino UNO as programmer. I think, as nano and uno are not pin compatible will it create any probles if i load the bootloader, during further applications using newly burned MUC.

  13. Pingback: C Programming the ATMega 328p | BGX
  14. Pingback: glory is a silent thing » Blog Archive » Counterfeit Arduino nano fix(es)!
  15. Hi, I got 2 very cheap Nano clones from aliexpress, neither of which will connect to my iMac (no USB in /dev). So, I assumed no bootloader. So I tried your very nice procedure. The ArduinoISP sketch ran for a while and then produced the following error messages (P.S.: I have a valid port for the host)–

    avrdude: stk500_recv(): programmer is not responding
    processing.app.debug.RunnerException
    at cc.arduino.packages.uploaders.SerialUploader.burnBootloader(SerialUploader.java:291)
    at processing.app.Editor$47.run(Editor.java:2569)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:715)
    at java.awt.EventQueue.access$400(EventQueue.java:82)
    at java.awt.EventQueue$2.run(EventQueue.java:676)
    at java.awt.EventQueue$2.run(EventQueue.java:674)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:86)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:685)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
    Caused by: processing.app.debug.RunnerException: Problem uploading to board. See http://www.arduino.cc/en/Guide/Troubleshooting#upload for suggestions.
    at cc.arduino.packages.Uploader.executeUploadCommand(Uploader.java:111)
    at cc.arduino.packages.uploaders.SerialUploader.burnBootloader(SerialUploader.java:284)
    … 15 more

    — Any suggestions?

  16. I just wanted to say thanks. I was trying to burn bootloader and was having errors. I checked a bunch of sites. but yours was the only one that I saw that said to switch the Tools >> Programmer. This did the trick. Thanks again!

  17. You can skip soldering of ISP connector and use directly pins as follows:
    ICSP PIN Signal Arduino Nano pin
    1 MISO D12 (15)
    2 VCC VIN (30)
    3 SCK D13 (16)
    4 MOSI D11 (14)
    5 RESET RESET (28)
    6 GND GND (29)

  18. June 8 2015

    I bought two Nanos from Deal extreme, as they say ~ you get what you pay for….. cheap and trash..
    no bootloader and after many tries finally look like I’m had burned the loader to find out that the
    FTDI chip is bad…. Dealer tremendous will make good ? Of course not!! Ah!! At the same time I’m had
    purchased two video cameras and they shipped only one. No body should be buying from this outfit.

  19. This article is incomplete..hat do u mean your Ard Mini ready to use? Say i want to load a blink code into the handicap mini ? Whats the next step to do that ?

  20. Francisco, thanks for sharing this knowledge.
    It helped me to “repair” one of the 5 Arduino Nano’s I ordered from Ebay.
    Apparently this one was not loaded with the bootloader and the blink sketch like the other 4 boards.
    Thanks again!

  21. Pingback: Uso del Watchdog, problema que tienen los arduinos y como solucionarlo!!! – arguino
  22. My Nano3 has a red blkining LED besides the POWER led. Does it automatically mean there is a bootloader? I installed CH340 driver (that’s the chip on that board) but still windows won’t detect it. I’m starting to doubt the cable (I use one that shipped as a battery charger for my drone). My other Arduinos work fine

    Any insight?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s