Avrdude 1
Avrdude 1
Permission is granted to make and distribute verbatim copies of this manual provided the
copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the con-
ditions for verbatim copying, provided that the entire resulting derived work is distributed
under the terms of a permission notice identical to this one.
Permission is granted to copy and distribute translations of this manual into another lan-
guage, under the above conditions for modified versions, except that this permission notice
may be stated in a translation approved by the Free Software Foundation.
i
Table of Contents
1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1 History and Credits. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
4 Configuration File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.1 AVRDUDE Defaults . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.2 Programmer Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.3 Part Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.3.1 Parent Part . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.3.2 Instruction Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.4 Other Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Appendix B Troubleshooting . . . . . . . . . . . . . . . . . . . . 57
Concept Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
1
1 Introduction
AVRDUDE - AVR Downloader Uploader - is a program for downloading and uploading
the on-chip memories of Atmel’s AVR microcontrollers. It can program the Flash and
EEPROM, and where supported by the serial programming protocol, it can program fuse
and lock bits. AVRDUDE also supplies a direct instruction mode allowing one to issue any
programming instruction to the AVR chip regardless of whether AVRDUDE implements
that specific feature of a particular chip.
AVRDUDE can be used effectively via the command line to read or write all chip memory
types (eeprom, flash, fuse bits, lock bits, signature bytes) or via an interactive (terminal)
mode. Using AVRDUDE from the command line works well for programming the entire
memory of the chip from the contents of a file, while interactive mode is useful for exploring
memory contents, modifying individual bytes of eeprom, programming fuse/lock bits, etc.
AVRDUDE supports the following basic programmer types: Atmel’s STK500, Atmel’s
AVRISP and AVRISP mkII devices, Atmel’s STK600, Atmel’s JTAG ICE (the original one,
mkII, and 3, the latter two also in ISP mode), appnote avr910, appnote avr109 (including
the AVR Butterfly), serial bit-bang adapters, and the PPI (parallel port interface). PPI
represents a class of simple programmers where the programming lines are directly connected
to the PC parallel port. Several pin configurations exist for several variations of the PPI
programmers, and AVRDUDE can be configured to work with them by either specifying the
appropriate programmer on the command line or by creating a new entry in its configuration
file. All that’s usually required for a new entry is to tell AVRDUDE which pins to use for
each programming function.
A number of equally simple bit-bang programming adapters that connect to a serial port
are supported as well, among them the popular Ponyprog serial adapter, and the DASA
and DASA3 adapters that used to be supported by uisp(1). Note that these adapters are
meant to be attached to a physical serial port. Connecting to a serial port emulated on top
of USB is likely to not work at all, or to work abysmally slow.
If you happen to have a Linux system with at least 4 hardware GPIOs available (like
almost all embedded Linux boards) you can do without any additional hardware - just
connect them to the SDO, SDI, RESET and SCK pins of the AVR’s SPI interface and use
the linuxgpio programmer type. Older boards might use the labels MOSI for SDO and
MISO for SDI. It bitbangs the lines using the Linux sysfs GPIO interface. Of course, care
should be taken about voltage level compatibility. Also, although not strictly required, it is
strongly advisable to protect the GPIO pins from overcurrent situations in some way. The
simplest would be to just put some resistors in series or better yet use a 3-state buffer driver
like the 74HC244. Have a look at http://kolev.info/blog/2013/01/06/avrdude-linuxgpio/
for a more detailed tutorial about using this programmer type.
Under a Linux installation with direct access to the SPI bus and GPIO pins, such
as would be found on a Raspberry Pi, the “linuxspi” programmer type can be used to
directly connect to and program a chip using the built in interfaces on the computer. The
requirements to use this type are that an SPI interface is exposed along with one GPIO
pin. The GPIO serves as the reset output since the Linux SPI drivers do not hold chip
select down when a transfer is not occuring and thus it cannot be used as the reset pin. A
readily available level translator should be used between the SPI bus/reset GPIO and the
chip to avoid potentially damaging the computer’s SPI controller in the event that the chip
Chapter 1: Introduction 2
is running at 5V and the SPI runs at 3.3V. The GPIO chosen for reset can be configured
in the avrdude configuration file using the reset entry under the linuxspi programmer, or
directly in the port specification. An external pull-up resistor should be connected between
the AVR’s reset pin and Vcc. If Vcc is not the same as the SPI voltage, this should be done
on the AVR side of the level translator to protect the hardware from damage.
On a Raspberry Pi, header J8 provides access to the SPI and GPIO lines.
Typically, pins 19, 21, and 23 are SPI SDO, SDI, and SCK, while pins 24 and 26 would
serve as CE outputs. So, close to these pins is pin 22 as GPIO25 which can be used as
/RESET, and pin 25 can be used as GND.
A typical programming cable would then look like:
J8 pin ISP pin Name
21 1 SDI
- 2 Vcc - leave open
23 3 SCK
19 4 SDO
22 5 /RESET
25 6 GND
(Mind the 3.3 V voltage level of the Raspberry Pi!)
The -P portname option defaults to /dev/spidev0.0:/dev/gpiochip0 for this program-
mer.
The STK500, JTAG ICE, avr910, and avr109/butterfly use the serial port to communi-
cate with the PC. The STK600, JTAG ICE mkII/3, AVRISP mkII, USBasp, avrftdi (and
derivatives), and USBtinyISP programmers communicate through the USB, using libusb
as a platform abstraction layer. The avrftdi adds support for the FT2232C/D, FT2232H,
and FT4232H devices. These all use the MPSSE mode, which has a specific pin mapping.
Bit 0 (the lsb of the byte in the config file) is SCK. Bit 1 is SDO, and Bit 2 is SDI. Bit
3 usually reset. The 2232C/D parts are only supported on interface A, but the H parts
can be either A or B (specified by the usbdev config parameter). The STK500, STK600,
JTAG ICE, and avr910 contain on-board logic to control the programming of the target
device. The avr109 bootloader implements a protocol similar to avr910, but is actually
implemented in the boot area of the target’s flash ROM, as opposed to being an external
device. The fundamental difference between the two types lies in the protocol used to con-
trol the programmer. The avr910 protocol is very simplistic and can easily be used as the
basis for a simple, home made programmer since the firmware is available online. On the
other hand, the STK500 protocol is more robust and complicated and the firmware is not
openly available. The JTAG ICE also uses a serial communication protocol which is similar
to the STK500 firmware version 2 one. However, as the JTAG ICE is intended to allow on-
chip debugging as well as memory programming, the protocol is more sophisticated. (The
JTAG ICE mkII protocol can also be run on top of USB.) Only the memory programming
functionality of the JTAG ICE is supported by AVRDUDE. For the JTAG ICE mkII/3,
JTAG, debugWire and ISP mode are supported, provided it has a firmware revision of at
least 4.14 (decimal). See below for the limitations of debugWire. For ATxmega devices, the
JTAG ICE mkII/3 is supported in PDI mode, provided it has a revision 1 hardware and
firmware version of at least 5.37 (decimal).
Chapter 1: Introduction 3
The Atmel-ICE (ARM/AVR) is supported (JTAG, PDI for Xmega, debugWIRE, ISP,
UPDI).
Atmel’s XplainedPro boards, using EDBG protocol (CMSIS-DAP compliant), are sup-
ported by the “jtag3” programmer type.
Atmel’s XplainedMini boards, using mEDBG protocol, are also supported by the “jtag3”
programmer type.
The AVR Dragon is supported in all modes (ISP, JTAG, PDI, HVSP, PP, debugWire).
When used in JTAG and debugWire mode, the AVR Dragon behaves similar to a JTAG
ICE mkII, so all device-specific comments for that device will apply as well. When used
in ISP and PDI mode, the AVR Dragon behaves similar to an AVRISP mkII (or JTAG
ICE mkII in ISP mode), so all device-specific comments will apply there. In particular, the
Dragon starts out with a rather fast ISP clock frequency, so the -B bitclock option might
be required to achieve a stable ISP communication. For ATxmega devices, the AVR Dragon
is supported in PDI mode, provided it has a firmware version of at least 6.11 (decimal).
Wiring boards (e.g. Arduino Mega 2560 Rev3) are supported, utilizing STK500 V2.x
protocol, but a simple DTR/RTS toggle to set the boards into programming mode. The
programmer type is “wiring”. Note that the -D option will likely be required in this case,
because the bootloader will rewrite the program memory, but no true chip erase can be
performed.
Serial bootloaders that run a skeleton of the STK500 1.x protocol are supported via their
own programmer type specification “arduino”. This programmer works for the Arduino
Uno Rev3 or any AVR that runs the Optiboot bootloader. The number of connection retry
attempts can be specified as an extended parameter. See the section on extended parameters
below for details.
Urprotocol is a leaner version of the STK500 1.x protocol that is designed to be back-
wards compatible with STK500 v1.x; it allows bootloaders to be much smaller, e.g., as
implemented in the urboot project https://github.com/stefanrueger/urboot. The pro-
grammer type “urclock” caters for these urboot bootloaders. Owing to its backward com-
patibility, bootloaders that can be served by the arduino programmer can normally also be
served by the urclock programmer. This may require specifying the size of (to AVRDUDE)
unknown bootloaders in bytes using the -x bootsize=<n> option, which is necessary for
the urclock programmer to enable it to protect the bootloader from being overwritten. If
an unknown bootloader has EEPROM read/write capability then the option -x eepromrw
informs avrdude -c urclock of that capability.
The BusPirate is a versatile tool that can also be used as an AVR programmer. A single
BusPirate can be connected to up to 3 independent AVRs. See the section on extended
parameters below for details.
The USBasp ISP, USBtinyISP and CH341A adapters are also supported, provided AVR-
DUDE has been compiled with libusb support. They former two feature simple firmware-
only USB implementations, running on an ATmega8 (or ATmega88), or ATtiny2313, re-
spectively. CH341A programmers connect directly to the AVR target. Their SPI bit clock
is approximately 1.7 MHz and cannot be changed. As a consequence, the AVR target must
have a CPU frequency of 6.8 MHz or more: factory-set AVR parts, which typically run
on an internal oscillator between 1 MHz and 1.6 MHz, cannot be programmed using -c
ch341a.
Chapter 1: Introduction 4
The Atmel DFU bootloader is supported in both, FLIP protocol version 1 (AT90USB*
and ATmega*U* devices), as well as version 2 (Xmega devices). See below for some hints
about FLIP version 1 protocol behaviour.
The MPLAB(R) PICkit 4 and MPLAB(R) SNAP are supported in JTAG, TPI, ISP,
PDI and UPDI mode. The Curiosity Nano board is supported in UPDI mode. It is dubbed
“PICkit on Board”, thus the name pkobn_updi.
SerialUPDI programmer implementation is based on Microchip’s pymcuprog (https://
github.com/microchip-pic-avr-tools/pymcuprog) utility, but it also contains some per-
formance improvements included in Spence Konde’s DxCore Arduino core (https://
github.com/SpenceKonde/DxCore). In a nutshell, this programmer consists of simple USB-
>UART adapter, diode and couple of resistors. It uses serial connection to provide UPDI
interface. See Section 5.3 [SerialUPDI programmer], page 51, for more details and known
issues.
The jtag2updi programmer is supported, and can program AVRs with a UPDI interface.
Jtag2updi is just a firmware that can be uploaded to an AVR, which enables it to inter-
face with avrdude using the jtagice mkii protocol via a serial link (https://github.com/
ElTangas/jtag2updi).
The Micronucleus bootloader is supported for both protocol version V1 and V2. As
the bootloader does not support reading from flash memory, use the -V option to prevent
AVRDUDE from verifying the flash memory. See the section on extended parameters below
for Micronucleus specific options.
The Teensy bootloader is supported for all AVR boards. As the bootloader does not
support reading from flash memory, use the -V option to prevent AVRDUDE from verifying
the flash memory. See the section on extended parameters below for Teensy specific options.
might be suffixed with "Hz", "kHz" or "MHz" in order to specify the bit clock
frequency rather than a period. Some programmers default their bit clock
value to a 1 microsecond bit clock period, suitable for target MCUs running
at 4 MHz clock and above. Slower MCUs need a correspondingly higher bit
clock period. Some programmers reset their bit clock value to the default
value when the programming software signs off, whilst others store the last
used bit clock value. It is recommended to always specify the bit clock if
read/write speed is important. You can use the ’default bitclock’ keyword
in your ~/.config/avrdude/avrdude.rc or ~/.avrduderc configuration file
to assign a default value to keep from having to specify this option on every
invocation.
Note that some official Microchip programmers store the bitclock setting and
will continue to use it until a different value is provided. This applies to "2nd
gen" programmers (AVRISPmkII, AVR Dragon, JTAG ICE mkII, STK600)
and "3rd gen"programmers (JTAGICE3, Atmel ICE, Power Debugger). "4th
gen" programmers (PICkit 4, MPLAB SNAP) will store the last user-specified
bitclock until the programmer is disconnected from the computer.
-c programmer-id
Specify the programmer to be used. AVRDUDE knows about several common
programmers. Use this option to specify which one to use. The programmer-id
parameter is the programmer’s id listed in the configuration file. Specify -c ? to
list all programmers in the configuration file. If you have a programmer that is
unknown to AVRDUDE, and the programmer is controlled via the PC parallel
port, there’s a good chance that it can be easily added to the configuration file
without any code changes to AVRDUDE. Simply copy an existing entry and
change the pin definitions to match that of the unknown programmer. If -c
? is specified with a specific part, see -p above, then only those programmers
are output that expect to be able to handle this part, together with the pro-
gramming interface(s) that can be used in that combination. In reality there
can be deviations from this list, particularly if programming is directly via a
bootloader. Currently, the following programmer ids are understood and sup-
ported:
-c wildcard/flags
Run developer options for programmers that are matched by wildcard. Whilst
their main use is for developers some flags can be of utility for users, e.g.,
avrdude -c usbtiny/S shows AVRDUDE’s understanding of usbtiny’s proper-
ties; for more information run avrdude -c x/h.
-C config-file
Use the specified config file for configuration data. This file contains all pro-
grammer and part definitions that AVRDUDE knows about. If not specified,
AVRDUDE looks for the configuration file in the following two locations:
1. <directory from which application loaded>/../etc/avrdude.conf
2. <directory from which application loaded>/avrdude.conf
Chapter 2: Command Line Options 7
noreset The ‘/RESET’ line will be deactivated at program exit, thus allow-
ing the MCU target program to run while the programming hard-
ware remains connected. noreset is supported by the linuxspi
and flip2 programmer options, as well as all parallel port based
programmers.
vcc This option will leave those parallel port pins active (i. e. high)
that can be used to supply ‘Vcc’ power to the MCU.
novcc This option will pull the ‘Vcc’ pins of the parallel port down at
program exit.
d_high This option will leave the 8 data pins on the parallel port active (i.
e. high).
d_low This option will leave the 8 data pins on the parallel port inactive
(i. e. low).
Multiple exitspec arguments can be separated with commas.
-F Normally, AVRDUDE tries to verify that the device signature read from the
part is reasonable before continuing. Since it can happen from time to time that
a device has a broken (erased or overwritten) device signature but is otherwise
operating normally, this options is provided to override the check. Also, for
programmers like the Atmel STK500 and STK600 which can adjust parameters
local to the programming tool (independent of an actual connection to a target
controller), this option can be used together with -t to continue in terminal
mode. Moreover, the option allows to continue despite failed initialization of
connection between a programmer and a target.
-i delay For bitbang-type programmers, delay for approximately delay microseconds be-
tween each bit state change. If the host system is very fast, or the target runs off
a slow clock (like a 32 kHz crystal, or the 128 kHz internal RC oscillator), this
can become necessary to satisfy the requirement that the ISP clock frequency
must not be higher than 1/4 of the CPU clock frequency. This is implemented
as a spin-loop delay to allow even for very short delays. On Unix-style operat-
ing systems, the spin loop is initially calibrated against a system timer, so the
number of microseconds might be rather realistic, assuming a constant system
load while AVRDUDE is running. On Win32 operating systems, a preconfig-
ured number of cycles per microsecond is assumed that might be off a bit for
very fast or very slow machines.
-l logfile
Use logfile rather than stderr for diagnostics output. Note that initial diagnostic
messages (during option parsing) are still written to stderr anyway.
-n No-write: disables writing data to the MCU whilst processing -U (useful for
debugging AVRDUDE). The terminal mode continues to write to the device.
-O Perform a RC oscillator run-time calibration according to Atmel application
note AVR053. This is only supported on the STK500v2, AVRISP mkII, and
JTAG ICE mkII hardware. Note that the result will be stored in the EEPROM
cell at address 0.
Chapter 2: Command Line Options 9
-P port Use port to identify the device to which the programmer is attached. Normally,
the default parallel port is used, but if the programmer type normally connects
to the serial port, the default serial port will be used. See Appendix A, Platform
Dependent Information, to find out the default port names for your platform.
If you need to use a different parallel or serial port, use this option to specify
the alternate port name.
On Win32 operating systems, the parallel ports are referred to as lpt1 through
lpt3, referring to the addresses 0x378, 0x278, and 0x3BC, respectively. If the
parallel port can be accessed through a different address, this address can be
specified directly, using the common C language notation (i. e., hexadecimal
values are prefixed by 0x).
For the JTAG ICE mkII, if AVRDUDE has been built with libusb support, port
may alternatively be specified as usb[:serialno]. In that case, the JTAG ICE
mkII will be looked up on USB. If serialno is also specified, it will be matched
against the serial number read from any JTAG ICE mkII found on USB. The
match is done after stripping any existing colons from the given serial number,
and right-to-left, so only the least significant bytes from the serial number
need to be given. For a trick how to find out the serial numbers of all JTAG
ICEs attached to USB, see Section 2.3 [Example Command Line Invocations],
page 23.
As the AVRISP mkII device can only be talked to over USB, the very same
method of specifying the port is required there.
For the USB programmer "AVR-Doper" running in HID mode, the port must
be specified as avrdoper. Libhidapi support is required on Unix and Mac OS
but not on Windows. For more information about AVR-Doper see http://
www.obdev.at/avrusb/avrdoper.html.
For the USBtinyISP, which is a simplistic device not implementing serial num-
bers, multiple devices can be distinguished by their location in the USB hier-
archy. See the respective See Appendix B [Troubleshooting], page 57, entry for
examples.
For the XBee programmer the target MCU is to be programmed wirelessly over
a ZigBee mesh using the XBeeBoot bootloader. The ZigBee 64-bit address
for the target MCU’s own XBee device must be supplied as a 16-character
hexadecimal value as a port prefix, followed by the @ character, and the serial
device to connect to a second directly contactable XBee device associated with
the same mesh (with a default baud rate of 9600). This may look similar to:
0013a20000000001dev/tty.serial.
For diagnostic purposes, if the target MCU with an XBeeBoot bootloader is
connected directly to the serial port, the 64-bit address field can be omitted.
In this mode the default baud rate will be 19200.
For programmers that attach to a serial port using some kind of higher level
protocol (as opposed to bit-bang style programmers), port can be specified as
net:host:port. In this case, instead of trying to open a local device, a TCP
network connection to (TCP) port on host is established. Square brackets
may be placed around host to improve readability for numeric IPv6 addresses
Chapter 2: Command Line Options 10
usersig Three extra flash pages for firmware settings; this memory
is not erased during a chip erase. Only some classic parts,
ATmega(64|128|256|644|1284|2564)RFR2, have a usersig
memory. Usersig is different to flash in the sense that it can
neither be accessed with ISP serial programming nor written to by
bootloaders. AVRDUDE offers JTAG programming of classic-part
usersig memories. As with all flash-type memories the -U option
can only write 0-bits but not 1-bits. Hence, usersig needs to be
erased before a file can be uploaded to this memory region, e.g.,
using -T "erase usersig" -U usersig:w:parameters.hex:i
ATxmega devices have the following memory types in addition to eeprom,
flash, signature and lock:
application
Application flash area
apptable Application table flash area
boot Boot flash area
fuse0 A.k.a. jtaguid: JTAG user ID for some devices
fuse1 Watchdog configuration
fuse6 Fault detection action configuration TC4/5 for ATxmega E series
parts
fuseN Other fuse bytes of ATxmega devices, where N is 2, 4 or 5, for
system configuration
prodsig Production signature (calibration) area
usersig Additional flash memory page that can be used for firmware set-
tings; this memory is not erased during a chip erase
Modern 8-bit AVR devices have the following memory types in addition to
eeprom, flash, signature and lock:
fuse0 A.k.a. wdtcfg: watchdog configuration
fuse1 A.k.a. bodcfg: brownout detection configuration
fuse2 A.k.a. osccfg: oscillator configuration
fuse4 A.k.a. tcd0cfg (not all devices): timer counter type D configuration
fuse5 A.k.a. syscfg0: system configuration 0
fuse6 A.k.a. syscfg1: system configuration 1
fuse7 A.k.a. append or codesize: either the end of the application code
section or the code size in blocks of 256/512 bytes
fuse8 A.k.a. bootend or bootsize: end of the boot section or the boot
size in blocks of 256/512 bytes
fuses A "logical" memory of 9 bytes containing all fuseN of a part, which
can be used to program all fuses at the same time
Chapter 2: Command Line Options 12
osc16err Two bytes typically describing the 16 MHz oscillator frequency er-
ror at 3 V and 5 V, respectively
osc20err Two bytes typically describing the 20 MHz oscillator frequency er-
ror at 3 V and 5 V, respectively
osccal16 Two oscillator calibration bytes for 16 MHz
osccal20 Two oscillator calibration bytes for 20 MHz
prodsig Production signature (calibration) area
sernum Serial number with a unique ID for the pary (10 bytes)
tempsense
Temperature sensor calibration values
userrow Extra page of EEPROM memory that can be used for firmware
settings; this memory is not erased during a chip erase
The op field specifies what operation to perform:
r read the specified device memory and write to the specified file
w read the specified file and write it to the specified device memory
v read the specified device memory and the specified file and perform
a verify operation
The filename field indicates the name of the file to read or write. The format
field is optional and contains the format of the file to read or write. Possible
values are:
i Intel Hex
I Intel Hex with comments on download and tolerance of checksum
errors on upload
s Motorola S-record
r raw binary; little-endian byte order, in the case of the flash ROM
data
e ELF (Executable and Linkable Format), the final output file from
the linker; currently only accepted as an input file
m immediate mode; actual byte values are specified on the command
line, separated by commas or spaces in place of the filename field
of the -U option. This is useful for programming fuse bytes without
having to create a single-byte file or enter terminal mode.
a auto detect; valid for input only, and only if the input is not pro-
vided at stdin.
d decimal; this and the following formats generate one line of out-
put for the respective memory section, forming a comma-separated
list of the values. This can be particularly useful for subsequent
processing, like for fuse bit settings.
Chapter 2: Command Line Options 13
‘vtarg_switch=VALUE’, ‘vtarg_switch’
The on-board target voltage switch can be turned on or off by writ-
ing a 1 or a 0. The current state can be read by ‘-xvtarg_switch’
alone. Note that the target power switch will always be on after
a power cycle. Also note that the smaller Xplained Nano boards
does not have a target power switch.
‘help’ Show help menu and exit.
Curiosity Nano
The Curiosity Nano board accepts the following extended parameter:
‘vtarg=VALUE, vtarg’
The generated on-board target voltage can be changed by specifying
a new voltage. The current set-voltage can be read by ‘-xvtarg’
alone.
‘help’ Show help menu and exit.
STK500
STK600
The STK500 and STK600 boards accept the following extended parameters:
‘vtarg=VALUE, vtarg’
The generated on-board target voltage can be changed by specifying
a new voltage. The current set-voltage can be read by ‘-xvtarg’
alone.
‘fosc=VALUE[MHz|M|kHz|k|Hz], fosc’
Set the programmable oscillator frequency in MHz, kHz or Hz. The
current frequency can be read by ‘-xfosc’ alone.
‘varef=VALUE, varef’
The generated on-board analog reference voltage can be changed by
specifying a new reference voltage. The current reference voltage
can be read by ‘-xvaref’ alone.
‘varef[0,1]=VALUE, varef[0,1]’
STK600 only
The generated on-board analog reference voltage for channel 0 or
channel 1 can be changed by specifying a new reference voltage.
The current reference voltage can be read by ‘-xvaref0’ or
‘-xvaref1’ alone.
‘attemps[=<1..99>]’
STK500V1 only
Specify how many connection retry attemps to perform before ex-
iting. Defaults to 10 if not specified.
‘help’ Show help menu and exit.
AVR910
Chapter 2: Command Line Options 16
‘showfilename’
Show the input filename (or title) of the last flash writing session,
then exit.
‘title=<string>’
When set, <string> will be used in lieu of the input filename. The
maximum string length for the title/filename field is 254 bytes in-
cluding terminating nul.
‘showapp’
Show the size of the programmed application, then exit.
‘showstore’
Show the size of the unused flash between the application and meta-
data, then exit.
‘showmeta’
Show the size of the metadata just below the bootloader, then exit.
‘showboot’
Show the size of the bootloader, then exit.
‘showversion’
Show bootloader version and capabilities, then exit.
‘showvector’
Show the vector number and name of the interrupt table vector
used by the bootloader for starting the application, then exit. For
hardware-supported bootloaders this will be vector 0 (Reset), and
for vector bootloaders this will be any other vector number of the
interrupt vector table or the slot just behind the vector table with
the name VBL_ADDITIONAL_VECTOR.
‘showpart’
Show the part for which the bootloader was compiled, then exit.
‘bootsize=<size>’
Manual override for bootloader size. Urboot bootloaders put the
number of used bootloader pages into a table at the top of the boot-
loader section, i.e., typically top of flash, so the urclock programmer
can look up the bootloader size itself. In backward-compatibility
mode, when programming via other bootloaders, this option can
be used to tell the programmer the size, and therefore the location,
of the bootloader.
‘vectornum=<arg>’
Manual override for vector number. Urboot bootloaders put the
vector number used by a vector bootloader into a table at the top of
flash, so this option is normally not needed for urboot bootloaders.
However, it is useful in backward-compatibility mode (or when the
urboot bootloader does not offer flash read). Specifying a vector
number in these circumstances implies a vector bootloader whilst
the default assumption would be a hardware-supported bootloader.
Chapter 2: Command Line Options 18
‘eepromrw’
Manual override for asserting EEPROM read/write capability. Not
normally needed for urboot bootloaders, but useful for in backward-
compatibility mode if the bootloader offers EEPROM read/write.
‘emulate_ce’
If an urboot bootloader does not offer a chip erase command it will
tell the urclock programmer so during handshake. In this case the
urclock programmer emulates a chip erase, if warranted by user
command line options, by filling the remainder of unused flash be-
low the bootloader with 0xff. If this option is specified, the urclock
programmer will assume that the bootloader cannot erase the chip
itself. The option is useful for backwards-compatible bootloaders
that do not implement chip erase.
‘restore’
Upload unchanged flash input files and trim below the bootloader
if needed. This is most useful when one has a backup of the full
flash and wants to play that back onto the device. No metadata
are written in this case and no vector patching happens either if it
is a vector bootloader. However, for vector bootloaders, even under
the option -xrestore an input file will not be uploaded for which
the reset vector does not point to the vector bootloader. This is
to avoid writing an input file to the device that would render the
vector bootloader not functional as it would not be reached after
reset.
‘initstore’
On writing to flash fill the store space between the flash application
and the metadata section with 0xff.
‘nofilename’
On writing to flash do not store the application input filename (nor
a title).
‘nodate’ On writing to flash do not store the application input filename (nor
a title) and no date either.
‘nostore’
On writing to flash do not store metadata except the metadata
code byte 0xff saying there are no metadata. In particular, no
data store frame is programmed.
‘nometadata’
Do not support any metadata. The full flash besides the bootloader
is available for the application. If the application is smaller than the
available space then a metadata code byte 0xff is stored neverthe-
less to indicate there are no further metadata available. In absence
of -xnometadata, the default for the urclock programmer is to write
as much metadata (filename, data and store information) as the size
of the uploaded application and the other extended options allow.
Chapter 2: Command Line Options 19
0 5 kHz
1 50 kHz
2 100 kHz
(Firmware v4.2+
only)
3 400 kHz (v4.2+)
The only advantage of the “raw-wire” mode is that different SPI
frequencies are available. Paged writing is not implemented in this
mode.
‘ascii’ Attempt to use ASCII mode even when the firmware supports Bin-
Mode (binary mode). BinMode is supported in firmware 2.7 and
newer, older FW’s either don’t have BinMode or their BinMode
is buggy. ASCII mode is slower and makes the above ‘reset=’,
‘spifreq=’ and ‘rawfreq=’ parameters unavailable. Be aware that
ASCII mode is not guaranteed to work with newer firmware ver-
sions, and is retained only to maintain compatibility with older
firmware versions.
‘nopagedwrite’
Firmware versions 5.10 and newer support a binary mode SPI com-
mand that enables whole pages to be written to AVR flash memory
at once, resulting in a significant write speed increase. If use of this
mode is not desirable for some reason, this option disables it.
‘nopagedread’
Newer firmware versions support in binary mode SPI command
some AVR Extended Commands. Using the “Bulk Memory Read
from Flash” results in a significant read speed increase. If use of
this mode is not desirable for some reason, this option disables it.
‘cpufreq=125..4000’
This sets the AUX pin to output a frequency of n kHz. Connecting
the AUX pin to the XTAL1 pin of your MCU, you can provide
it a clock, for example when it needs an external clock because of
wrong fuses settings. Make sure the CPU frequency is at least four
times the SPI frequency.
‘serial_recv_timeout=1...’
This sets the serial receive timeout to the given value. The timeout
happens every time avrdude waits for the BusPirate prompt. Es-
pecially in ascii mode this happens very often, so setting a smaller
value can speed up programming a lot. The default value is 100ms.
Using 10ms might work in most cases.
‘help’ Show help menu and exit.
Micronucleus bootloader
The Micronucleus programmer type accepts the following extended parameter:
Chapter 2: Command Line Options 21
‘wait=timeout’
If the device is not connected, wait for the device to be plugged in.
The optional timeout specifies the connection time-out in seconds.
If no time-out is specified, AVRDUDE will wait indefinitely until
the device is plugged in.
‘help’ Show help menu and exit.
Teensy bootloader
The Teensy programmer type accepts the following extended parameter:
‘wait=timeout’
If the device is not connected, wait for the device to be plugged in.
The optional timeout specifies the connection time-out in seconds.
If no time-out is specified, AVRDUDE will wait indefinitely until
the device is plugged in.
‘help’ Show help menu and exit.
Wiring
The Wiring programmer type accepts the following extended parameter:
‘snooze=0..32767’
After performing the port open phase, AVRDUDE will
wait/snooze for snooze milliseconds before continuing to the
protocol sync phase. No toggling of DTR/RTS is performed if
snooze > 0.
‘help’ Show help menu and exit.
PICkit2 Connection to the PICkit2 programmer:
(AVR) (PICkit2)
RST VPP/MCLR (1)
VDD VDD Target (2)
-- possibly
optional if AVR
self powered
GND GND (3)
SDI PGD (4)
SCLK PDC (5)
OSI AUX (6)
The PICkit2 programmer type accepts the following extended parameters:
‘clockrate=rate’
Sets the SPI clocking rate in Hz (default is 100kHz). Alternately
the -B or -i options can be used to set the period.
‘timeout=usb-transaction-timeout’
Sets the timeout for USB reads and writes in milliseconds (default
is 1500 ms).
‘help’ Show help menu and exit.
Chapter 2: Command Line Options 22
USBasp
The USBasp programmer type accepts the following extended parameter:
‘section_config’
Programmer will erase configuration section with option ’-e’ (chip
erase), rather than entire chip. Only applicable to TPI devices
(ATtiny 4/5/9/10/20/40).
‘help’ Show help menu and exit.
xbee
The xbee programmer type accepts the following extended parameter:
‘xbeeresetpin=1..7’
Select the XBee pin DIO<1..7> that is connected to the MCU’s
‘/RESET’ line. The programmer needs to know which DIO pin to
use to reset into the bootloader. The default (3) is the DIO3 pin
(XBee pin 17), but some commercial products use a different XBee
pin.
The remaining two necessary XBee-to-MCU connections are not
selectable - the XBee DOUT pin (pin 2) must be connected to the
MCU’s ‘RXD’ line, and the XBee DIN pin (pin 3) must be connected
to the MCU’s ‘TXD’ line.
‘help’ Show help menu and exit.
jtag2updi
serialupdi
The jtag2updi and serialupdi programmer types accept the following extended
parameters:
‘rtsdtr=low,high’
Forces RTS/DTR lines to assume low or high state during the whole
programming session. Some programmers might use this signal to
indicate UPDI programming state, but this is strictly hardware
specific.
When not provided, driver/OS default value will be used.
‘help’ Show help menu and exit.
linuxspi
The linuxspi programmer type accepts the following extended parameter:
‘disable_no_cs’
Ensures the programmer does not use the SPI NO CS bit for the
SPI driver. This parameter is useful for kernels that do not support
the CS line being managed outside the application.
‘help’ Show help menu and exit.
Chapter 2: Command Line Options 23
Using && to confirm that the silent AVRDUDE command went OK:
$ avrdude -qq -p m128 -c stk500 -e -U flash:w:diag.hex && echo OK
OK
Save flash memory in raw binary format to the file named c:/diag flash.bin:
$ avrdude -p m128 -c stk500 -U flash:r:"c:/diag flash.bin":r
Using the default programmer, download the file diag.hex to flash, eeprom.hex to EEP-
ROM, and set the extended, high, and low fuse bytes to 0xff, 0x89, and 0x2e respectively:
$ avrdude -p m128 -U flash:w:diag.hex \
-U eeprom:w:eeprom.hex \
-U efuse:w:0xff:m \
-U hfuse:w:0x89:m \
-U lfuse:w:0x2e:m
Read the fuses and print their values in different formats (hexadecimal, binary and octal):
$ avrdude -cusbasp -patmega128 -qq -Ulfuse:r:-:h -Uhfuse:r:-:b -Uefuse:r:-:o
0xbf
0b11000110
0377
Connect to the JTAG ICE mkII with a serial number ending in 1C37 via USB, and enter
terminal mode:
$ avrdude -c jtag2 -p m649 -P usb:1c:37 -t
List the serial numbers of all JTAG ICEs attached to USB; this is done by specifying an
invalid serial number, and increasing the verbosity level:
$ avrdude -c jtag2 -p m128 -P usb:xx -v
[...]
Using Port : usb:xxx
Using Programmer : jtag2
avrdude: usbdev_open(): Found JTAG ICE, serno: 00A000001C6B
avrdude: usbdev_open(): Found JTAG ICE, serno: 00A000001C3A
avrdude: usbdev_open(): Found JTAG ICE, serno: 00A000001C30
avrdude: usbdev_open(): did not find any (matching) USB device "usb:xxx"
Write data from stdin (standard input) to EEPROM; no error output means all went fine:
$ echo ’The quick brown fox’ | avrdude -c usbasp -p attiny13 -qq -U eeprom:w:-:r
0000 42 6f 6e 6a 6f 75 72 00 ff ff ff ff ff ff ff ff |Bonjour.........|
0010 ff ff ff ff ff ff ff ff 78 56 34 12 ff ff ff ff |........xV4.....|
:20000000E2809954686520717569636B2062726F776E20666F78E280990AFFFFFFFFFFFFD3
:20002000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:00000001FF
Same but redirect stderr (standard error output) to /dev/null instead of using -qq:
$ avrdude -cusbasp -pattiny13 -Ueeprom:r:-:i 2>/dev/null
:20000000E2809954686520717569636B2062726F776E20666F78E280990AFFFFFFFFFFFFD3
:20002000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:00000001FF
Chapter 2: Command Line Options 26
Main menu
Distance: %dcm
Exit
ATtiny11
ATtiny12
ATtiny13
ATtiny13A
ATtiny15
AT89S51
[...]
AVR64EA48
LGT8F88P
LGT8F168P
LGT8F328P
List of all modern AVR parts (with UPDI interface) known to AVRDUDE:
$ avrdude -p*/d | grep PM_UPDI | cut -f2 -d"’"
ATtiny202
ATtiny204
ATtiny402
[...]
AVR64EA28
AVR64EA32
AVR64EA48
Chapter 2: Command Line Options 27
AVRDUDE in a bash script creating terminal scripts that reset a part to factory settings:
$ cat make-init-scripts
#!/bin/bash
mkdir /tmp/factory
for part in $(avrdude -p*/d | grep = | cut -f2 -d"’"); do
echo $part
avrdude -p$part/St | grep initval | cut -f3,5 | grep -ve-1 \
| sed "s/.*/write &/" >/tmp/factory/$part.ini
done
Run above script and use one of the created terminal scripts:
$ ./make-init-scripts
$ cat /tmp/factory/ATmega328P.ini
write lfuse 0x62
write hfuse 0xd9
write efuse 0xff
write lock 0xff
Output a list of non-bootloader programmers that can be used for a part. Note that |&
folds stderr into stdout in a bash shell:
$ avrdude -c? -pavr32ea32 |& grep -v bootloader
Print filename of last stored sketch with its date stamp (only with urclock programmer):
$avrdude -qq -curclock -P/dev/ttyUSB0 -pattiny13 -xshowdate -xshowfilename
Create a bash function avrdude-elf that takes an elf file as input, with support for optional
Avrdude flags at the end, and writes to all memories specified in the elf file. In this example,
the elf file did not contain any EEPROM data:
# Show all writable memories present for the ATtiny13
$ echo $(avrdude -pattiny13/ot | grep write | cut -f3 | uniq)
0/positive negative [addr, sz+len] End is |len| bytes below memory size sz
negative positive [sz+addr, ...] Start is |addr| bytes below memory size
Character ’A’ 1
Hexadecimal 0x12345 1, 2, 4, or 8
integer
Decimal float 3.1415926 4
Hexadecimal 0xA.8p2D 8
double
data can be binary, octal, decimal or hexadecimal integers, floating point num-
bers or C-style strings and characters. If nothing matches, data will be inter-
preted as a name of a file containing data, which will be read and inserted at
this point. In order to force the interpretation of a data item as file, e.g., when
the file name would be understood as a number otherwise, the file name can be
given a :f format specifier. In absence of a format suffix, the terminal will try
to auto-detect the file format.
For integers, an optional case-insensitive suffix specifies the data size as in the
table below:
LL 8 bytes / 64 bits
L 4 bytes / 32 bits
H or S 2 bytes / 16 bits
HH 1 byte / 8 bits
Suffix D indicates a 64-bit double, F a 32-bit float, whilst a floating point number
without suffix defaults to 32-bit float. Hexadecimal floating point notation is
supported. An ambiguous trailing suffix, e.g., 0x1.8D, is read as no-suffix float
where D is part of the mantissa; use a zero exponent 0x1.8p0D to clarify.
An optional U suffix makes integers unsigned. Ordinary 0x hexadecimal and 0b
binary integers are always treated as unsigned. +0x, -0x, +0b and -0b numbers
with an explicit sign are treated as signed unless they have a U suffix. Unsigned
integers cannot be larger than 2^64-1. If n is an unsigned integer then -n is also
a valid unsigned integer as in C. Signed integers must fall into the [-2^63, 2^63-
1] range or a correspondingly smaller range when a suffix specifies a smaller
type.
Ordinary 0x hexadecimal and 0b binary integers with n hex digits (counting
leading zeros) use the smallest size of one, two, four and eight bytes that can
accommodate any n-digit hexadecimal/binary integer. If an integer suffix spec-
ifies a size explicitly the corresponding number of least significant bytes are
written, and a warning shown if the number does not fit into the desired repre-
sentation. Otherwise, unsigned integers occupy the smallest of one, two, four or
eight bytes needed. Signed numbers are allowed to fit into the smallest signed
or smallest unsigned representation: For example, 255 is stored as one byte as
255U would fit in one byte, though as a signed number it would not fit into a
Chapter 3: Terminal Mode Operation 32
one-byte interval [-128, 127]. The number -1 is stored in one byte whilst -1U
needs eight bytes as it is the same as 0xFFFFffffFFFFffffU.
One trailing comma at the end of data items is ignored to facilitate copy and
paste of lists.
write memory addr data
The start address addr may be omitted if the size of the memory being written
to is one byte.
write memory addr len data[,] {data[,]} ...
The ellipsis . . . form writes the data to the entire memory intervall addressed
by addr len and, if necessary, pads the remaining space by repeating the last
data item. The fill write command does not write beyond the specified memory
area even if more data than needed were given.
save memory {addr len} file[:format]
Save one or more memory segments to a file in a format specified by the :format
letter. The default is :r for raw binary. Each memory segment is described
by an address and length pair. In absence of any memory segments the entire
memory is saved to the file. Only Motorola S-Record (:s) and Intel Hex (:i
or :I) formats store address information with the saved data. Avrdude cannot
currently save ELF file formats. All the other file formats lose the address
information and concatenate the chosen memory segments into the output file.
If the file name is - then avrdude writes to stdout.
erase Perform a chip erase and discard all pending writes to EEPROM and flash.
Note that EEPROM will be preserved if the EESAVE fuse bit is set.
erase memory
Erase the entire specified memory.
erase memory addr len
Erase a section of the specified memory.
flush Synchronise with the device all pending writes to flash, EEPROM and usersig.
With some programmer and part combinations, flash (and sometimes EEP-
ROM, too) looks like a NOR memory, i.e., a write can only clear bits, never
set them. For NOR memories a page erase or, if not available, a chip erase
needs to be issued before writing arbitrary data. Usersig is generally unaffected
by a chip erase. When a memory looks like a NOR memory, either page erase
is deployed (e.g., with parts that have PDI/UPDI interfaces), or if that is not
available, both EEPROM and flash caches are fully read in, a chip erase com-
mand is issued and both EEPROM and flash are written back to the device.
Hence, it can take minutes to ensure that a single previously cleared bit is set
and, therefore, this routine should be called sparingly.
abort Normally, caches are only ever actually written to the device when using flush,
at the end of the terminal session after typing quit, or after EOF on input is
encountered. The abort command resets the cache discarding all previous
writes to the flash, EEPROM and usersig cache.
Chapter 3: Terminal Mode Operation 33
config [opts]
Show all configuration properties of the part; these are usually bitfields in fuses
or lock bits bytes that can take on values, which typically have a mnemonic
name. Each part has their own set of configurable items. The option -f groups
the configuration properties by the fuses and lock bits byte they are housed in,
and shows the current value of these memories as well. Config -a outputs an
initialisation script with all properties and all possible respective assignments.
The currently assigned mnemonic values are the ones that are not commented
out. The option -v increases the verbosity of the output of the config command.
part Display the current part settings and parameters. Includes chip specific infor-
mation including all memory types supported by the device, read/write timing,
etc.
verbose [level]
Change (when level is provided), or display the verbosity level. The initial
verbosity level is controlled by the number of -v options given on the command
line.
Chapter 3: Terminal Mode Operation 34
quell [level]
Change (when level is provided), or display the quell level. 1 is used to suppress
progress reports. 2 or higher yields progressively quieter operations. The initial
quell level is controlled by the number of -q options given on the command line.
?
help Give a short on-line summary of the available commands.
quit Leave terminal mode and thus AVRDUDE.
q Can be used as an alias for quit.
!line Run the shell line in a subshell, e.g., !ls *.hex. Subshell commands
take the rest of the line as their command. For security reasons, they
must be enabled explictly by putting allow_subshells = yes; into your
${HOME}/.config/avrdude/avrdude.rc or ${HOME}/.avrduderc file.
# comment Place comments onto the terminal line (useful for scripts).
In addition, the following commands are supported on some programmers:
pgerase memory addr
Erase one page of the memory specified.
send b1 b2 b3 b4
Send raw instruction codes to the AVR device. If you need access to a feature
of an AVR part that is not directly supported by AVRDUDE, this command
allows you to use it, even though AVRDUDE does not implement the command.
When using direct SPI mode, up to 3 bytes can be omitted.
spi Enter direct SPI mode. The pgmled pin acts as chip select. Only supported on
parallel bitbang programmers, and partially by USBtiny. Chip Select must be
externally held low for direct SPI when using USBtinyISP, and send must be a
multiple of four bytes.
pgm Return to programming mode (from direct SPI mode).
vtarg voltage
Set the target’s supply voltage to voltage Volts.
varef [channel] voltage
Set the adjustable voltage source to voltage Volts. This voltage is normally
used to drive the target’s Aref input on the STK500 and STK600. The STK600
offers two reference voltages, which can be selected by the optional parameter
channel (either 0 or 1).
fosc freq[M|k]
Set the programming oscillator to freq Hz. An optional trailing letter M multi-
plies by 1E6, a trailing letter k by 1E3.
fosc off Turn the programming oscillator off.
sck period
Set the SCK clock period to period microseconds. Note that some official
Microchip programmers store the bitclock setting and will continue to use it
until a diferent value is provided. See -B bitclock for more information.
Chapter 3: Terminal Mode Operation 35
avrdude> part
AVR Part : ATmega328P
Chip Erase delay : 9000 us
PAGEL : PD7
BS2 : PC2
RESET disposition : possible i/o
RETRY pulse : SCK
Serial program mode : yes
Parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
PollIndex : 3
PollValue : 0x53
Memory Detail :
avrdude> flush
avrdude> erase
erasing chip ...
avrdude> quit
Chapter 3: Terminal Mode Operation 37
avrdude> #
avrdude> # Consult external fuse calculator
avrdude> #
avrdude> #
avrdude> quit
avrdude> quit
Chapter 3: Terminal Mode Operation 39
The following example demonstrates negative address and length bytes, and the fill form
of the write command using an ellipis ... where the last data item provided is used to fill
up the indicated memory range.
$ avrdude -c usbasp -p atmega328p -t
avrdude> write flash -64 1234567890 ’A’ ’V’ ’R’ 2.718282 0xaa 0xbb 0xcc "Hello World!"
Caching | ################################################## | 100% 0.00 s
avrdude> write flash -32 -1 0x01 0b00000010 0b11 0x04 0x05 ...
Caching | ################################################## | 100% 0.00 s
avrdude> flush
avrdude: synching cache to device ...
Writing | ################################################## | 100% 0.05 s
avrdude> quit
Mixing terminal commands and -U memory operations: the example below burns a boot-
loader, uses a terminal line to write application data to flash, loads the application, config-
ures the brownout detection level to 2.7 V and, finally, stores the full flash as new hex file.
Note the use of different quotation marks in bash to pass the terminal command lines as
single entity to AVRDUDE.
$ avrdude -qc dryrun -p m328p \
-U urboot_m328p_1s_autobaud_uart0_pr_ee_ce.hex \
-T ’write flash 0x7D00 0xc0cac01a 0xcafe "secret Coca Cola recipe"’ \
-U flash:w:cola-vending-machine.hex \
-T "config -v bod=*2v7" \
-U flash:r:app+data.hex:I
avrdude: processing -T write flash 0x7D00 0xc0cac01a 0xcafe "secret Coca Cola recipe"
avrdude: synching cache to device ... done
4 Configuration File
AVRDUDE reads a configuration file upon startup which describes all of the parts and
programmers that it knows about. The advantage of this is that if you have a chip that
is not currently supported by AVRDUDE, you can add it to the configuration file without
waiting for a new release of AVRDUDE. Likewise, if you have a parallel port programmer
that is not supported, chances are that you can copy an existing programmer definition
and, with only a few changes, make your programmer work.
AVRDUDE first looks for a system wide configuration file in a platform dependent
location. On Unix, this is usually /usr/local/etc/avrdude.conf, whilst on Windows it
is usually in the same location as the executable file. The full name of this file can be
specified using the -C command line option. After parsing the system wide configuration
file, AVRDUDE looks for a per-user configuration file to augment or override the system
wide defaults. On Unix, the per-user file is ${XDG_CONFIG_HOME}/avrdude/avrdude.rc,
whereas if ${XDG_CONFIG_HOME} is either not set or empty, ${HOME}/.config/ is used
instead. If that does not exists .avrduderc within the user’s home directory is used. On
Windows, this file is the avrdude.rc file located in the same directory as the executable.
If a parent is specified, all settings of it (except its ids) are used for the new programmer.
These values can be changed by new setting them for the new programmer.
Known programming modes are
• PM_SPM: Bootloaders, self-programming with SPM opcodes or NVM Controllers
• PM_TPI: Tiny Programming Interface (t4, t5, t9, t10, t20, t40, t102, t104)
• PM_ISP: SPI programming for In-System Programming (almost all classic parts)
• PM_PDI: Program and Debug Interface (xmega parts)
• PM_UPDI: Unified Program and Debug Interface
• PM_HVSP: High Voltage Serial Programming (some classic parts)
• PM_HVPP: High Voltage Parallel Programming (most non-HVSP classic parts)
• PM_debugWIRE: Simpler alternative to JTAG (a subset of HVPP/HVSP parts)
• PM_JTAG: Joint Test Action Group standard (some classic parts)
• PM_JTAGmkI: Subset of PM_JTAG, older parts, Atmel ICE mkI
• PM_XMEGAJTAG: JTAG, some XMEGA parts
• PM_AVR32JTAG: JTAG for 32-bit AVRs
• PM_aWire: AVR32 parts
To invert a bit in the pin definitions, use = ~ <num>. To invert a pin list (all pins get
inverted) use ~ ( <num1> [, <num2> ... ] ).
Not all programmer types can handle a list of USB PIDs.
The following programmer types are currently implemented:
Chapter 4: Configuration File 43
resetdelay = <num> ;
synchcycles = <num> ; # HVSP only
chiperasepulsewidth = <num> ; # PP only
chiperasepolltimeout = <num> ;
chiperasetime = <num> ; # HVSP only
programfusepulsewidth = <num> ; # PP only
programfusepolltimeout = <num> ;
programlockpulsewidth = <num> ; # PP only
programlockpolltimeout = <num> ;
# debugWIRE and/or JTAG ICE mkII parameters, also from ATDF files
allowfullpagebitstream = <yes/no> ;
enablepageprogramming = <yes/no> ;
idr = <num> ; # IO addr of IDR (OCD) reg
rampz = <num> ; # IO addr of RAMPZ reg
spmcr = <num> ; # mem addr of SPMC[S]R reg
eecr = <num> ; # mem addr of EECR reg
eind = <num> ; # mem addr of EIND reg
mcu_base = <num> ; # MCU control block in ATxmega devices
nvm_base = <num> ; # NVM controller in ATxmega devices
ocd_base = <num> ; # OCD module in AVR8X/UPDI devices
ocdrev = <num> ; # JTAGICE3 parameter from ATDF files
pgm_enable = <instruction format> ;
chip_erase = <instruction format> ;
# parameters for bootloaders
autobaud_sync = <num> ; # autobaud detection byte, default 0x30
memory <memory>
paged = <yes/no> ; # yes/no (flash only, do not use for EEPROM)
offset = <num> ; # memory offset
size = <num> ; # bytes
page_size = <num> ; # bytes
num_pages = <num> ; # numeric
initval = <num> ; # factory setting of fuses and lockbits
bitmask = <num> ; # bits used (only in fuses and lockbits)
n_word_writes = <num> ; # TPI only: if set, number of words to write
min_write_delay = <num> ; # micro-seconds
max_write_delay = <num> ; # micro-seconds
readback = <num> <num> ; # pair of byte values
readback_p1 = <num> ; # byte value (first component)
readback_p2 = <num> ; # byte value (second component)
pwroff_after_write = <yes/no> ; # yes/no
mode = <num> ; # STK500 v2 file parameter from ATDF files
delay = <num> ; # "
blocksize = <num> ; # "
readsize = <num> ; # "
read = <instruction format> ;
write = <instruction format> ;
read_lo = <instruction format> ;
read_hi = <instruction format> ;
write_lo = <instruction format> ;
write_hi = <instruction format> ;
loadpage_lo = <instruction format> ;
loadpage_hi = <instruction format> ;
writepage = <instruction format> ;
;
;
If any of the above parameters are not specified, the default value of 0 is used for numerics
(except for mcuid, hvupdi_variant, ocdrev, initval and bitmask, all of which default to
Chapter 4: Configuration File 45
-1, and for autobaud_sync which defaults to 0x30) or the empty string "" for string values.
If a required parameter is left empty, AVRDUDE will complain. Almost all occurrences of
numbers (with the exception of pin numbers and where they are separated by space, e.g.,
in signature and readback) can also be given as simple expressions involving arithemtic and
bitwise operators.
example, the EEPROM read and write instruction for an AT90S2313 AVR part could be
encoded as:
As the address bit numbers in the SPI opcodes are highly systematic, they don’t really
need to be specified. A compact version of the format specification neither uses bit-numbers
for address lines nor spaces. If such a string is longer than 7 characters, then the characters
0, 1, x, a, i and o will be recognised as the corresponding bit, whilst any of the characters
., -, _ or / can act as arbitrary visual separators, which are ignored. Examples:
loadpage_lo = "0100.0000--000x.xxxx--xxaa.aaaa--iiii.iiii";
Another issue you might notice is slow performance of EEPROM writing using Seri-
alUPDI for AVR Dx devices. This can be addressed by changing avrdude.conf section for
this device - changing EEPROM page size to 0x20 (instead of default 1), like so:
#------------------------------------------------------------
# AVR128DB28
#------------------------------------------------------------
memory "flash"
size = 0x20000;
offset = 0x800000;
page_size = 0x200;
readsize = 0x100;
;
memory "eeprom"
size = 0x200;
offset = 0x1400;
page_size = 0x1;
readsize = 0x100;
;
;
USERROW memory has not been defined for new devices except for experimental addi-
tion for AVR128DB28. The point of USERROW is to provide ability to write configuration
details to already locked device and currently SerialUPDI interface supports this feature,
but it hasn’t been tested on wide variety of chips. Treat this as something experimental
at this point. Please note: on locked devices it’s not possible to read back USERROW
contents when written, so the automatic verification will most likely fail and to prevent
error messages, use -V.
Please note that SerialUPDI interface is pretty new and some issues are to be ex-
pected. In case you run into them, please make sure to run the intended command with
debug output enabled (-v -v -v) and provide this verbose output with your bug report.
You can also try to perform the same action using pymcuprog (https://github.com/
microchip-pic-avr-tools/pymcuprog) utility with -v debug and provide its output too.
You will notice that both outputs are pretty similar, and this was implemented like that on
purpose - it was supposed to make analysis of UPDI protocol quirks easier.
53
A.1 Unix
A.1.1 Unix Installation
To build and install from the source tarball on Unix like systems:
$ gunzip -c avrdude-7.2.tar.gz | tar xf -
$ cd avrdude-7.2
$ ./configure
$ make
$ su root -c ’make install’
The default location of the install is into /usr/local so you will need to be sure that
/usr/local/bin is in your PATH environment variable.
If you do not have root access to your system, you can do the following instead:
$ gunzip -c avrdude-7.2.tar.gz | tar xf -
$ cd avrdude-7.2
$ ./configure --prefix=$HOME/local
$ make
$ make install
A.2 Windows
A.2.1 Installation
A Windows executable of avrdude is included in WinAVR which can be found at http://
sourceforge.net/projects/winavr. WinAVR is a suite of executable, open source soft-
ware development tools for the AVR for the Windows platform.
There are two options to build avrdude from source under Windows. The first one is to
use Cygwin (http://www.cygwin.com/).
Appendix A: Platform Dependent Information 55
To build and install from the source tarball for Windows (using Cygwin):
$ set PREFIX=<your install directory path>
$ export PREFIX
$ gunzip -c avrdude-7.2.tar.gz | tar xf -
$ cd avrdude-7.2
$ ./configure LDFLAGS="-static" --prefix=$PREFIX --datadir=$PREFIX
--sysconfdir=$PREFIX/bin --enable-versioned-doc=no
$ make
$ make install
Note that recent versions of Cygwin (starting with 1.7) removed the MinGW support
from the compiler that is needed in order to build a native Win32 API binary that does not
require to install the Cygwin library cygwin1.dll at run-time. Either try using an older
compiler version that still supports MinGW builds, or use MinGW (http://www.mingw.
org/) directly.
lpt1 0x378
lpt2 0x278
lpt3 0x3BC
On your desktop PC, lpt1 will be the most common choice. If you are using a laptop,
you might have to use lpt3 instead of lpt1. Select the name of the port the corresponds to
the base address of the parallel port that you want.
If the parallel port can be accessed through a different address, this address can be
specified directly, using the common C language notation (i. e., hexadecimal values are
prefixed by 0x).
A.2.4 Documentation
AVRDUDE installs a manual page as well as info, HTML and PDF documentation. The
manual page is installed in /usr/local/man/man1 area, while the HTML and PDF doc-
umentation is installed in /usr/local/share/doc/avrdude directory. The info manual is
installed in /usr/local/info/avrdude.info.
Note that these locations can be altered by various configure options such as --prefix
and --datadir.
57
Appendix B Troubleshooting
In general, please report any bugs encountered via
https://github.com/avrdudes/avrdude/issues.
• Problem: I’m using a serial programmer under Windows and get the following error:
avrdude: serial_open(): can’t set attributes for device "com1",
Solution: This problem seems to appear with certain versions of Cygwin. Specifying
"/dev/com1" instead of "com1" should help.
• Problem: I’m using Linux and my AVR910 programmer is really slow.
Solution (short): setserial port low_latency
Solution (long): There are two problems here. First, the system may wait some time
before it passes data from the serial port to the program. Under Linux the following
command works around this (you may need root privileges for this).
setserial port low_latency
Secondly, the serial interface chip may delay the interrupt for some time. This be-
haviour can be changed by setting the FIFO-threshold to one. Under Linux this can
only be done by changing the kernel source in drivers/char/serial.c. Search the file
for UART_FCR_TRIGGER_8 and replace it with UART_FCR_TRIGGER_1. Note that overall
performance might suffer if there is high throughput on serial lines. Also note that you
are modifying the kernel at your own risk.
• Problem: I’m not using Linux and my AVR910 programmer is really slow.
Solutions: The reasons for this are the same as above. If you know how to work around
this on your OS, please let us know.
• Problem: Updating the flash ROM from terminal mode does not work with the JTAG
ICEs.
Solution: None at this time. Currently, the JTAG ICE code cannot write to the flash
ROM one byte at a time.
• Problem: Page-mode programming the EEPROM (using the -U option) does not erase
EEPROM cells before writing, and thus cannot overwrite any previous value != 0xff.
Solution: None. This is an inherent feature of the way JTAG EEPROM program-
ming works, and is documented that way in the Atmel AVR datasheets. In order to
successfully program the EEPROM that way, a prior chip erase (with the EESAVE
fuse unprogrammed) is required. This also applies to the STK500 and STK600 in
high-voltage programming mode.
• Problem: How do I turn off the DWEN fuse?
Solution: If the DWEN (debugWire enable) fuse is activated, the /RESET pin is not
functional anymore, so normal ISP communication cannot be established. There are
two options to deactivate that fuse again: high-voltage programming, or getting the
JTAG ICE mkII talk debugWire, and prepare the target AVR to accept normal ISP
communication again.
The first option requires a programmer that is capable of high-voltage programming
(either serial or parallel, depending on the AVR device), for example the STK500.
In high-voltage programming mode, the /RESET pin is activated initially using a
Appendix B: Troubleshooting 58
12 V pulse (thus the name high voltage), so the target AVR can subsequently be
reprogrammed, and the DWEN fuse can be cleared. Typically, this operation cannot
be performed while the AVR is located in the target circuit though.
The second option requires a JTAG ICE mkII that can talk the debugWire protocol.
The ICE needs to be connected to the target using the JTAG-to-ISP adapter, so the
JTAG ICE mkII can be used as a debugWire initiator as well as an ISP programmer.
AVRDUDE will then be activated using the jtag2isp programmer type. The initial ISP
communication attempt will fail, but AVRDUDE then tries to initiate a debugWire
reset. When successful, this will leave the target AVR in a state where it can accept
standard ISP communication. The ICE is then signed off (which will make it signing
off from the USB as well), so AVRDUDE has to be called again afterwards. This time,
standard ISP communication can work, so the DWEN fuse can be cleared.
The pin mapping for the JTAG-to-ISP adapter is:
JTAG pin ISP pin
1 3
2 6
3 1
4 2
6 5
9 4
• Problem: Multiple USBasp or USBtinyISP programmers connected simultaneously are
not found.
Solution: The USBtinyISP code supports distinguishing multiple programmers based
on their bus:device connection tuple that describes their place in the USB hierarchy
on a specific host. This tuple can be added to the -P usb option, similar to adding a
serial number on other USB-based programmers.
The actual naming convention for the bus and device names is operating-system de-
pendent; AVRDUDE will print out what it found on the bus when running it with (at
least) one -v option. By specifying a string that cannot match any existing device (for
example, -P usb:xxx), the scan will list all possible candidate devices found on the bus.
Examples:
avrdude -c usbtiny -p atmega8 -P usb:003:025 (Linux)
avrdude -c usbtiny -p atmega8 -P usb:/dev/usb:/dev/ugen1.3 (FreeBSD 8+)
avrdude -c usbtiny -p atmega8 \
-P usb:bus-0:\\.\libusb0-0001--0x1781-0x0c9f (Windows)
• Problem: I cannot do . . . when the target is in debugWire mode.
Solution: debugWire mode imposes several limitations.
The debugWire protocol is Atmel’s proprietary one-wire (plus ground) protocol to
allow an in-circuit emulation of the smaller AVR devices, using the /RESET line.
DebugWire mode is initiated by activating the DWEN fuse, and then power-cycling
the target. While this mode is mainly intended for debugging/emulation, it also offers
limited programming capabilities. Effectively, the only memory areas that can be read
or programmed in this mode are flash ROM and EEPROM. It is also possible to read
out the signature. All other memory areas cannot be accessed. There is no chip erase
functionality in debugWire mode; instead, while reprogramming the flash ROM, each
Appendix B: Troubleshooting 59
flash ROM page is erased right before updating it. This is done transparently by the
JTAG ICE mkII (or AVR Dragon). The only way back from debugWire mode is to
initiate a special sequence of commands to the JTAG ICE mkII (or AVR Dragon), so
the debugWire mode will be temporarily disabled, and the target can be accessed using
normal ISP programming. This sequence is automatically initiated by using the JTAG
ICE mkII or AVR Dragon in ISP mode, when they detect that ISP mode cannot be
entered.
• Problem: I want to use my JTAG ICE mkII to program an Xmega device through PDI.
The documentation tells me to use the XMEGA PDI adapter for JTAGICE mkII that
is supposed to ship with the kit, yet I don’t have it.
Solution: Use the following pin mapping:
JTAGICE Target Squid cab- PDI
mkII probe pins le colors header
1 (TCK) Black
2 (GND) GND White 6
3 (TDO) Grey
4 (VTref) VTref Purple 2
5 (TMS) Blue
6 (nSRST) PDI CLK Green 5
7 (N.C.) Yellow
8 (nTRST) Orange
9 (TDI) PDI DATA Red 1
10 (GND) Brown
• Problem: I want to use my AVR Dragon to program an Xmega device through PDI.
Solution: Use the 6 pin ISP header on the Dragon and the following pin mapping:
Dragon Target
ISP Header pins
1 (SDI) PDI DATA
2 (VCC) VCC
3 (SCK)
4 (SDO)
5 (RESET) PDI CLK /
RST
6 (GND) GND
• Problem: I want to use my AVRISP mkII to program an ATtiny4/5/9/10 device
through TPI. How to connect the pins?
Solution: Use the following pin mapping:
AVRISP Target ATtiny
connector pins pin #
1 (SDI) TPIDATA 1
2 (VTref) Vcc 5
3 (SCK) TPICLK 3
4 (SDO)
5 (RESET) /RESET 6
6 (GND) GND 2
Appendix B: Troubleshooting 60
• Problem: after flashing a firmware that reduces the target’s clock speed (e.g. through
the CLKPR register), further ISP connection attempts fail. Or a programmer cannot
initialize communication with a brand new chip.
Solution: Even though ISP starts with pulling /RESET low, the target continues to
run at the internal clock speed either as defined by the firmware running before or as set
by the factory. Therefore, the ISP clock speed must be reduced appropriately (to less
than 1/4 of the internal clock speed) using the -B option before the ISP initialization
sequence will succeed.
As that slows down the entire subsequent ISP session, it might make sense to just issue
a chip erase using the slow ISP clock (option -e), and then start a new session at
higher speed. Option -D might be used there, to prevent another unneeded erase cycle.
62
Concept Index
– D
-x Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Device support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
-x AVR Dragon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 DFU bootloader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
-x AVR910 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
-x Buspirate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
-x Curiosity Nano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
H
-x jtag2updi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
-x linuxspi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
-x Micronucleus bootloader . . . . . . . . . . . . . . . . . . . . 20
-x PICkit2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
I
-x serialupdi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
-x STK500 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
-x STK600 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 O
-x Teensy bootloader . . . . . . . . . . . . . . . . . . . . . . . . . . 21
-x Urclock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Options (command-line). . . . . . . . . . . . . . . . . . . . . . . . . 5
-x USBasp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
-x Wiring. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
-x xbee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
P
-x Xplained Mini . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Programmer support . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Programmers supported . . . . . . . . . . . . . . . . . . . . . . . . . 1
A S
avrdude.conf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 SerialUPDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
STK600 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
C T
Configuration File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Terminal Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29, 36