My STK500 board is unable to program generic nano boards with ICSP ?

Are there any other folks using actual Atmel STK500 development boards to program Arduino boards via the ISP header?

I'm working on several projects. Some use "raw" AVR chips which I've been initially programming by plugging them into my STK500 development board. I've had great results there.

Then I did some tests using the STK500 ISP (6 pin) header to program Arduino boards, such as Uno, Sparkfun RedBoard, and others. That worked perfectly too.

Finally I tried to program a couple of Chinese generic "Nano V3" boards with no luck at all. The STK500 would NOT connect to these Nano boards at all. But, on the other hand, an Arduino Uno "as ISP" worked perfectly.

I think the following might be a plausible explanation for this odd behavior:
(Perhaps a more experienced forum member could confirm whether this makes sense?)

  • To enter programming mode the \RESET pin on the target AVR MCU must be pulled from high to low.
  • When using ISP, \RESET should remain low during programming. (Note: bootloaders/serial programming works differently - they put only a brief pulse of logic level 0 on \RESET)
  • For the AVR to function normally after programming, the \RESET pin is normally pulled high by a pullup resistor. This prevents accidental unwanted device resets.
  • The standard pullup resistor value is 10K ohms. All of my Uno and Sparkfun Red Boards have the 10K pullup resistor.
  • But the pullup resistor on the Nano boards in only 1K ohms.
  • Because of this the STK500 board cannot get the voltage on \RESET lower than about 3v. So of course the Nano doesn't reset and can't be programmed.
  • In contrast when the Nano is hooked up via ISP to an "Arduino as ISP" then \RESET goes down to 0.1v during programming. And, it works.

So it appears that the Atmel STK500 board isn't able to pull \RESET all the way to 0v for some target boards. I have the STK500 schematic. Its reset circuitry is complicated in order to support "high voltage" programming. But I'm thinking that changing R207 from 47k to 10k will fix the problem. I will post the result after I try it.


After changing R207 from 47k ohms to 10k ohms, my STK-500 board is now working perfectly with the generic Arduino Nano boards.

I have noticed the same thing. It appears that the generic Nano boards have a 1K pull up resistor where the real ones have a 10K pull up. So the generic ones require more current to pull reset low. I modified my Nano and replaced the 1K with a 10K resistor and it works like the others now. Until then I simply held down the reset button while programming through the ISP connector.