Upload to Elegoo Nano via Arduino UNO R3 w/ "Arduino as ISP"

I'm following this tutorial: https://www.arduino.cc/en/Tutorial/ArduinoISP#toc2

and am trying to upload a sketch to my nano via my uno (I don't have a miniUSB cable...).

Everything seems to start working (when doing the "Upload Using Programmer" step, the tx/rx lights on both the UNO and the Nano start flashing like they do during an upload), but it eventually fails with this output:

avrdude: Version 6.3-20171130
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "/Users/phildo/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino14/etc/avrdude.conf"
         User configuration file is "/Users/phildo/.avrduderc"
         User configuration file does not exist or is not a regular file, skipping

         Using Port                    : /dev/cu.usbmodem14201
         Using Programmer              : arduino
         Overriding Baud Rate          : 19200
         AVR Part                      : ATmega328P
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PC2
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
           flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
           lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

         Programmer Type : Arduino
         Description     : Arduino

avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x14

avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x02

avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x10
         Hardware Version: 425479
         Firmware Version: 25196036.-1444073640
         Topcard         : STK502
         Vtarget         : 1.8 V
         Varef           : 0.0 V
         Oscillator      : Off
         SCK period      : 0.1 us

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

avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x10

avrdude done.  Thank you.

the selected serial port 
 does not exist or your board is not connected

The only thing that's "out of the ordinary" is that the Nano is an Elegoo, w/ CH340 chip instead of an FT232.

I had assumed we were bypassing that, though?

Any idea why this process would be failing?

The protocol used for Arduino as ISP was recently changed and this change made it more likely that the board used for Arduino as ISP will be automatically reset, causing the upload to fail.

There is a way to disable the auto reset. If you have a 10 uF capacitor on hand, try connecting it between the Reset and GND pins on the Uno.

If you don't have a capacitor, you can instead roll back your Arduino AVR Boards version to 1.6.21, which is the last version before the protocol change:

  • Tools > Board > Boards Manager
  • Wait for the downloads to finish.
  • Click on "Arduino AVR Boards".
  • Select "1.6.21" from the dropdown menu.
  • Click "Install".
  • Wait for the installation to finish.
  • Click "Close".
  • Try the upload again.

phildo:
The only thing that's "out of the ordinary" is that the Nano is an Elegoo, w/ CH340 chip instead of an FT232.

I had assumed we were bypassing that, though?

Correct. That wouldn't cause a problem.

Wow! This is excellent information! Thanks so much for your super helpful post. I'll test it out when I get home.

Is there anything I can do to merge in this information w/ the tutorial documentation on the arduino site?
Like, is the website on some github repository somewhere?

Again- thanks a bunch!

You're welcome. I hope it will end up solving your problem.

Thanks for your interest in improving the documentation. Unfortunately there is not a GitHub repository for this particular website content.

The language reference pages do have a repository and you are welcome to submit pull requests for that content:

For the rest of the website content, the process is to open an issue report in the arduino/Arduino repository that reports a problem or suggests improvements:

Or for the library reference pages you can submit the issue report to that library's repository:

However, in this case I think it will be better to wait because the reports of problems caused by this change are likely to result in going back to the old protocol for the Arduino as ISP programmer and adding a new "Arduino as ISP (ATmega32U4)" programmer with the new protocol.:

The tutorial should also be updated to reflect that change, but it's probably best to wait until after that happens to see exactly how it will be implemented (e.g. what the exact programmer name will be).

I have heard that, even with the old protocol, sometimes the capacitor is required but I have never needed it. You can see in the tutorial they do show one being used on the Mega but not the Uno. Then the text says:

The 10µF electrolytic capacitor connected to RESET and GND of the programming board is needed only for the boards that have an interface between the microcontroller and the computer's USB, like Mega, Uno, Mini, Nano.

So that's confusingly contradictory. I guess it might be better to add a capacitor to the Uno images and mark it as being maybe not needed in all the images, then provide some explanation in the text.