There are many ways to program AVR microcontrollers. Since many people ask about diﬀerent ones at one time or another, I thought I’d outline them here so that their questions can be answered quickly and eﬃciently. Please forgive me if I miss a method or make an error.
1 - In System Programming (ISP)
Supported By: Most MEGA and TINY devices
Supported Programmers: AVRISP MKI/II, JTAG MKII, STK500, STK600, Dragon, AVRISP clones, AVR910 Programmers, AVRONE
In System Programming is perhaps the most common method of programming the ﬂash, EEPROM, fuse and lockbytes of the entire AVR line. ISP can program AVRs at extremely high clock rates (assuming the target AVR is running at a high frequency and the programmer supports it) and is the method of choice for almost all AVR hobbyists. There are many, many AVRISP clones and AVR910 programmers on the market in addition to simple do-it-yourself dongles which connect to your computer’s parallel port.
Recent new dongle designs may use the computer’s serial port, however anecdotal evidence has said that this method is *extremely* slow due to technical limitations.
ISP requires that the target AVR is running at a clock rate of at least four times that of the ISP clock.
This is a common pitfall and a source of confusion to many new to AVRs.
2 - JTAG
Supported By: AVR32 and most large pin count MEGA and XMEGA devices
Supported Programmers: JTAG-ICE, JTAG-ICE MKII, JTAG-ICE3, Dragon, JTAG-ICE clones, AVRONE, STK600 (programming only)
Technically JTAG is a debugging system, not a programming method. Still, the JTAG interface allows for the programming of an AVR which supports it.
JTAG is an in-system debugging tool which allows you to manipulate and examine the status of a supported
AVR while it is running in a circuit. JTAG allows the user to stop execution at any time, the manipulation of the AVR’s internal registers and much more.
The oﬃcial JTAG-ICE units from ATMEL