Add rst documentation
This commit is contained in:
parent
7bf9711392
commit
b4a980e659
|
@ -0,0 +1,2 @@
|
|||
build/
|
||||
_build/
|
|
@ -0,0 +1,230 @@
|
|||
************
|
||||
Introduction
|
||||
************
|
||||
|
||||
.. index:: 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 MOSI, MISO, RESET
|
||||
and SCK pins on the AVR and use the linuxgpio programmer type. 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/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 slave 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 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 MOSI, MISO, 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:
|
||||
|
||||
@multitable @columnfractions .15 .15 .3
|
||||
* `J8 pin` @tab `ISP pin` @tab `Name`
|
||||
* `21` @tab `1` @tab `MISO`
|
||||
* `-` @tab `2` @tab `Vcc - leave open`
|
||||
* `23` @tab `3` @tab `SCK`
|
||||
* `19` @tab `4` @tab `MOSI`
|
||||
* `22` @tab `5` @tab `/RESET`
|
||||
* `25` @tab `6` @tab `GND`
|
||||
@end multitable
|
||||
|
||||
(Mind the 3.3 V voltage level of the Raspberry Pi!)
|
||||
|
||||
The `-P `portname`` option defaults to
|
||||
`/dev/spidev0.0:/dev/gpiochip0` for this programmer.
|
||||
|
||||
The STK500, JTAG ICE, avr910, and avr109/butterfly use the serial port to communicate 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 1 (the lsb of the byte in the config
|
||||
file) is SCK. Bit 2 is MOSI, and Bit 3 is MISO. Bit 4 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 control 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).
|
||||
|
||||
The Atmel-ICE (ARM/AVR) is supported (JTAG, PDI for Xmega, debugWIRE, ISP modes).
|
||||
|
||||
Atmel's XplainedPro boards, using EDBG protocol (CMSIS-DAP compliant), are
|
||||
supported 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.
|
||||
|
||||
The Arduino (which is very similar to the STK500 1.x) is supported via
|
||||
its own programmer type specification 'arduino'. This programmer works for
|
||||
the Arduino Uno Rev3.
|
||||
|
||||
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 and USBtinyISP adapters are also supported, provided AVRDUDE
|
||||
has been compiled with libusb support.
|
||||
They both feature simple firmware-only USB implementations, running on
|
||||
an ATmega8 (or ATmega88), or ATtiny2313, respectively.
|
||||
|
||||
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 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 <https://github.com/microchip-pic-avr-tools/pymcuprog>`_)
|
||||
utility, but it also contains some performance improvements included in
|
||||
Spence Kohde's *DxCore* Arduino core (`https://github.com/SpenceKonde/DxCore <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.
|
||||
:ref:`SerialUPDI_programmer` 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 interface with avrdude using the jtagice mkii protocol
|
||||
via a serial link (`https://github.com/ElTangas/jtag2updi <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 verifing the flash memory.
|
||||
See the section on *extended parameters*
|
||||
below for Micronucleus specific options.
|
||||
|
||||
.. _History_and_Credits:
|
||||
|
||||
History and Credits
|
||||
===================
|
||||
|
||||
AVRDUDE was written by Brian S. Dean under the name of AVRPROG to run on
|
||||
the FreeBSD Operating System. Brian renamed the software to be called
|
||||
AVRDUDE when interest grew in a Windows port of the software so that the
|
||||
name did not conflict with AVRPROG.EXE which is the name of Atmel's
|
||||
Windows programming software.
|
||||
|
||||
The AVRDUDE source now resides in the public CVS repository on
|
||||
savannah.gnu.org (`http://savannah.gnu.org/projects/avrdude/ <http://savannah.gnu.org/projects/avrdude/>`_),
|
||||
where it continues to be enhanced and ported to other systems. In
|
||||
addition to FreeBSD, AVRDUDE now runs on Linux and Windows. The
|
||||
developers behind the porting effort primarily were Ted Roth, Eric
|
||||
Weddington, and Joerg Wunsch.
|
||||
|
||||
And in the spirit of many open source projects, this manual also draws
|
||||
on the work of others. The initial revision was composed of parts of
|
||||
the original Unix manual page written by Joerg Wunsch, the original web
|
||||
site documentation by Brian Dean, and from the comments describing the
|
||||
fields in the AVRDUDE configuration file by Brian Dean. The texi
|
||||
formatting was modeled after that of the Simulavr documentation by Ted
|
||||
Roth.
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,241 @@
|
|||
.. _Terminal_Mode_Operation:
|
||||
|
||||
***********************
|
||||
Terminal Mode Operation
|
||||
***********************
|
||||
|
||||
AVRDUDE has an interactive mode called `terminal mode` that is
|
||||
enabled by the *-t* option. This mode allows one to enter
|
||||
interactive commands to display and modify the various device memories,
|
||||
perform a chip erase, display the device signature bytes and part
|
||||
parameters, and to send raw programming commands. Commands and
|
||||
parameters may be abbreviated to their shortest unambiguous form.
|
||||
Terminal mode also supports a command history so that previously entered
|
||||
commands can be recalled and edited.
|
||||
|
||||
.. _Terminal_Mode_Commands:
|
||||
|
||||
Terminal Mode Commands
|
||||
======================
|
||||
|
||||
The following commands are implemented:
|
||||
|
||||
|
||||
|
||||
*dump `memtype` `addr` `nbytes`*
|
||||
Read `nbytes` from the specified memory area, and display them in
|
||||
the usual hexadecimal and ASCII form.
|
||||
|
||||
|
||||
*dump*
|
||||
Continue dumping the memory contents for another `nbytes` where the
|
||||
previous dump command left off.
|
||||
|
||||
|
||||
*write `memtype` `addr` `byte1` ... `byteN`*
|
||||
Manually program the respective memory cells, starting at address addr,
|
||||
using the values `byte1` through `byteN`. This feature is not
|
||||
implemented for bank-addressed memories such as the flash memory of
|
||||
ATMega devices.
|
||||
|
||||
|
||||
*erase*
|
||||
Perform a chip erase.
|
||||
|
||||
|
||||
*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.
|
||||
|
||||
|
||||
*sig*
|
||||
Display the device signature bytes.
|
||||
|
||||
|
||||
*spi*
|
||||
Enter direct SPI mode. The *pgmled* pin acts as slave select.
|
||||
*Only supported on parallel bitbang programmers.*
|
||||
|
||||
|
||||
*part*
|
||||
Display the current part settings and parameters. Includes chip
|
||||
specific information including all memory types supported by the
|
||||
device, read/write timing, etc.
|
||||
|
||||
|
||||
*pgm*
|
||||
Return to programming mode (from direct SPI mode).
|
||||
|
||||
|
||||
*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.
|
||||
|
||||
|
||||
*?*
|
||||
|
||||
*help*
|
||||
Give a short on-line summary of the available commands.
|
||||
|
||||
|
||||
*quit*
|
||||
Leave terminal mode and thus AVRDUDE.
|
||||
|
||||
|
||||
In addition, the following commands are supported on the STK500
|
||||
and STK600 programmer:
|
||||
|
||||
|
||||
|
||||
*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 master oscillator to `freq` Hz.
|
||||
An optional trailing letter `M`
|
||||
multiplies by 1E6, a trailing letter `k` by 1E3.
|
||||
|
||||
|
||||
*fosc off*
|
||||
Turn the master oscillator off.
|
||||
|
||||
|
||||
*sck `period`*
|
||||
*STK500 and STK600 only:*
|
||||
Set the SCK clock period to `period` microseconds.
|
||||
|
||||
*JTAG ICE only:*
|
||||
Set the JTAG ICE bit clock period to `period` microseconds.
|
||||
Note that unlike STK500 settings, this setting will be reverted to
|
||||
its default value (approximately 1 microsecond) when the programming
|
||||
software signs off from the JTAG ICE.
|
||||
This parameter can also be used on the JTAG ICE mkII/3 to specify the
|
||||
ISP clock period when operating the ICE in ISP mode.
|
||||
|
||||
|
||||
*parms*
|
||||
*STK500 and STK600 only:*
|
||||
Display the current voltage and master oscillator parameters.
|
||||
|
||||
*JTAG ICE only:*
|
||||
Display the current target supply voltage and JTAG bit clock rate/period.
|
||||
|
||||
|
||||
.. _Terminal_Mode_Examples:
|
||||
|
||||
Terminal Mode Examples
|
||||
======================
|
||||
|
||||
Display part parameters, modify eeprom cells, perform a chip erase:
|
||||
|
||||
|
||||
::
|
||||
|
||||
@cartouche
|
||||
% avrdude -p m128 -c stk500 -t
|
||||
|
||||
avrdude: AVR device initialized and ready to accept instructions
|
||||
avrdude: Device signature = 0x1e9702
|
||||
avrdude: current erase-rewrite cycle count is 52 (if being tracked)
|
||||
avrdude> part
|
||||
>>> part
|
||||
|
||||
AVR Part : ATMEGA128
|
||||
Chip Erase delay : 9000 us
|
||||
PAGEL : PD7
|
||||
BS2 : PA0
|
||||
RESET disposition : dedicated
|
||||
RETRY pulse : SCK
|
||||
serial program mode : yes
|
||||
parallel program mode : yes
|
||||
Memory Detail :
|
||||
|
||||
Page Polled
|
||||
Memory Type Paged Size Size #Pages MinW MaxW ReadBack
|
||||
----------- ------ ------ ---- ------ ----- ----- ---------
|
||||
eeprom no 4096 8 0 9000 9000 0xff 0xff
|
||||
flash yes 131072 256 512 4500 9000 0xff 0x00
|
||||
lfuse no 1 0 0 0 0 0x00 0x00
|
||||
hfuse no 1 0 0 0 0 0x00 0x00
|
||||
efuse no 1 0 0 0 0 0x00 0x00
|
||||
lock no 1 0 0 0 0 0x00 0x00
|
||||
calibration no 1 0 0 0 0 0x00 0x00
|
||||
signature no 3 0 0 0 0 0x00 0x00
|
||||
|
||||
avrdude> dump eeprom 0 16
|
||||
>>> dump eeprom 0 16
|
||||
0000 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
|
||||
|
||||
avrdude> write eeprom 0 1 2 3 4
|
||||
>>> write eeprom 0 1 2 3 4
|
||||
|
||||
avrdude> dump eeprom 0 16
|
||||
>>> dump eeprom 0 16
|
||||
0000 01 02 03 04 ff ff ff ff ff ff ff ff ff ff ff ff |................|
|
||||
|
||||
avrdude> erase
|
||||
>>> erase
|
||||
avrdude: erasing chip
|
||||
avrdude> dump eeprom 0 16
|
||||
>>> dump eeprom 0 16
|
||||
0000 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
|
||||
|
||||
avrdude>
|
||||
@end cartouche
|
||||
|
||||
|
||||
Program the fuse bits of an ATmega128 (disable M103 compatibility,
|
||||
enable high speed external crystal, enable brown-out detection, slowly
|
||||
rising power). Note since we are working with fuse bits the -u (unsafe)
|
||||
option is specified, which allows you to modify the fuse bits. First
|
||||
display the factory defaults, then reprogram:
|
||||
|
||||
|
||||
::
|
||||
|
||||
@cartouche
|
||||
% avrdude -p m128 -u -c stk500 -t
|
||||
|
||||
avrdude: AVR device initialized and ready to accept instructions
|
||||
avrdude: Device signature = 0x1e9702
|
||||
avrdude: current erase-rewrite cycle count is 52 (if being tracked)
|
||||
avrdude> d efuse
|
||||
>>> d efuse
|
||||
0000 fd |. |
|
||||
|
||||
avrdude> d hfuse
|
||||
>>> d hfuse
|
||||
0000 99 |. |
|
||||
|
||||
avrdude> d lfuse
|
||||
>>> d lfuse
|
||||
0000 e1 |. |
|
||||
|
||||
avrdude> w efuse 0 0xff
|
||||
>>> w efuse 0 0xff
|
||||
|
||||
avrdude> w hfuse 0 0x89
|
||||
>>> w hfuse 0 0x89
|
||||
|
||||
avrdude> w lfuse 0 0x2f
|
||||
>>> w lfuse 0 0x2f
|
||||
|
||||
avrdude>
|
||||
@end cartouche
|
||||
|
||||
|
|
@ -0,0 +1,382 @@
|
|||
.. _Configuration_File:
|
||||
|
||||
******************
|
||||
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 by AVRDUDE, chances are good that you can copy and
|
||||
existing programmer definition, and with only a few changes, make your
|
||||
programmer work with AVRDUDE.
|
||||
|
||||
AVRDUDE first looks for a system wide configuration file in a platform
|
||||
dependent location. On Unix, this is usually
|
||||
`/usr/local/etc/avrdude.conf`, while on Windows it is usually in the
|
||||
same location as the executable file. The name of this file can be
|
||||
changed using the *-C* command line option. After the system wide
|
||||
configuration file is parsed, AVRDUDE looks for a per-user configuration
|
||||
file to augment or override the system wide defaults. On Unix, the
|
||||
per-user file is `.avrduderc` within the user's home directory. On
|
||||
Windows, this file is the `avrdude.rc` file located in the same
|
||||
directory as the executable.
|
||||
|
||||
.. _AVRDUDE_Defaults:
|
||||
|
||||
AVRDUDE Defaults
|
||||
================
|
||||
|
||||
|
||||
|
||||
*default_parallel = "`default-parallel-device`";*
|
||||
Assign the default parallel port device. Can be overridden using the
|
||||
*-P* option.
|
||||
|
||||
|
||||
*default_serial = "`default-serial-device`";*
|
||||
Assign the default serial port device. Can be overridden using the
|
||||
*-P* option.
|
||||
|
||||
|
||||
*default_programmer = "`default-programmer-id`";*
|
||||
Assign the default programmer id. Can be overridden using the *-c*
|
||||
option.
|
||||
|
||||
|
||||
*default_bitclock = "`default-bitclock`";*
|
||||
Assign the default bitclock value. Can be overridden using the *-B*
|
||||
option.
|
||||
|
||||
|
||||
.. _Programmer_Definitions:
|
||||
|
||||
Programmer Definitions
|
||||
======================
|
||||
|
||||
The format of the programmer definition is as follows:
|
||||
|
||||
|
||||
::
|
||||
|
||||
programmer
|
||||
parent <id> # <id> is a quoted string
|
||||
id = <id1> [, <id2> [, <id3>] ...] ; # <idN> are quoted strings
|
||||
desc = <description> ; # quoted string
|
||||
type = "par" | "stk500" | ... ; # programmer type (see below for a list)
|
||||
baudrate = <num> ; # baudrate for serial ports
|
||||
vcc = <num1> [, <num2> ... ] ; # pin number(s)
|
||||
buff = <num1> [, <num2> ... ] ; # pin number(s)
|
||||
reset = <num> ; # pin number
|
||||
sck = <num> ; # pin number
|
||||
mosi = <num> ; # pin number
|
||||
miso = <num> ; # pin number
|
||||
errled = <num> ; # pin number
|
||||
rdyled = <num> ; # pin number
|
||||
pgmled = <num> ; # pin number
|
||||
vfyled = <num> ; # pin number
|
||||
usbvid = <hexnum>; # USB VID (Vendor ID)
|
||||
usbpid = <hexnum> [, <hexnum> ...]; # USB PID (Product ID)
|
||||
usbdev = <interface>; # USB interface or other device info
|
||||
usbvendor = <vendorname>; # USB Vendor Name
|
||||
usbproduct = <productname>; # USB Product Name
|
||||
usbsn = <serialno>; # USB Serial Number
|
||||
;
|
||||
|
||||
|
||||
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.
|
||||
|
||||
To invert a bit in the pin definitions, use `= ~ <num>`.
|
||||
|
||||
Not all programmer types can handle a list of USB PIDs.
|
||||
|
||||
Following programmer types are currently implemented:
|
||||
|
||||
@multitable @columnfractions .25 .6
|
||||
* `arduino` @tab Arduino programmer
|
||||
* `avr910` @tab Serial programmers using protocol described in application note AVR910
|
||||
* `avrftdi` @tab Interface to the MPSSE Engine of FTDI Chips using libftdi.
|
||||
* `buspirate` @tab Using the Bus Pirate's SPI interface for programming
|
||||
* `buspirate_bb` @tab Using the Bus Pirate's bitbang interface for programming
|
||||
* `butterfly` @tab Atmel Butterfly evaluation board; Atmel AppNotes AVR109, AVR911
|
||||
* `butterfly_mk` @tab Mikrokopter.de Butterfly
|
||||
* `dragon_dw` @tab Atmel AVR Dragon in debugWire mode
|
||||
* `dragon_hvsp` @tab Atmel AVR Dragon in HVSP mode
|
||||
* `dragon_isp` @tab Atmel AVR Dragon in ISP mode
|
||||
* `dragon_jtag` @tab Atmel AVR Dragon in JTAG mode
|
||||
* `dragon_pdi` @tab Atmel AVR Dragon in PDI mode
|
||||
* `dragon_pp` @tab Atmel AVR Dragon in PP mode
|
||||
* `flip1` @tab FLIP USB DFU protocol version 1 (doc7618)
|
||||
* `flip2` @tab FLIP USB DFU protocol version 2 (AVR4023)
|
||||
* `ftdi_syncbb` @tab FT245R/FT232R Synchronous BitBangMode Programmer
|
||||
* `jtagmki` @tab Atmel JTAG ICE mkI
|
||||
* `jtagmkii` @tab Atmel JTAG ICE mkII
|
||||
* `jtagmkii_avr32` @tab Atmel JTAG ICE mkII in AVR32 mode
|
||||
* `jtagmkii_dw` @tab Atmel JTAG ICE mkII in debugWire mode
|
||||
* `jtagmkii_isp` @tab Atmel JTAG ICE mkII in ISP mode
|
||||
* `jtagmkii_pdi` @tab Atmel JTAG ICE mkII in PDI mode
|
||||
* `jtagice3` @tab Atmel JTAGICE3
|
||||
* `jtagice3_pdi` @tab Atmel JTAGICE3 in PDI mode
|
||||
* `jtagice3_updi` @tab Atmel JTAGICE3 in UPDI mode
|
||||
* `jtagice3_dw` @tab Atmel JTAGICE3 in debugWire mode
|
||||
* `jtagice3_isp` @tab Atmel JTAGICE3 in ISP mode
|
||||
* `linuxgpio` @tab GPIO bitbanging using the Linux sysfs interface (not available)
|
||||
* `linuxspi` @tab SPI using Linux spidev driver (not available)
|
||||
* `micronucleus` @tab Micronucleus Bootloader
|
||||
* `par` @tab Parallel port bitbanging
|
||||
* `pickit2` @tab Microchip's PICkit2 Programmer
|
||||
* `serbb` @tab Serial port bitbanging
|
||||
* `serialupdi` @tab Driver for SerialUPDI programmers
|
||||
* `stk500` @tab Atmel STK500 Version 1.x firmware
|
||||
* `stk500generic` @tab Atmel STK500, autodetect firmware version
|
||||
* `stk500v2` @tab Atmel STK500 Version 2.x firmware
|
||||
* `stk500hvsp` @tab Atmel STK500 V2 in high-voltage serial programming mode
|
||||
* `stk500pp` @tab Atmel STK500 V2 in parallel programming mode
|
||||
* `stk600` @tab Atmel STK600
|
||||
* `stk600hvsp` @tab Atmel STK600 in high-voltage serial programming mode
|
||||
* `stk600pp` @tab Atmel STK600 in parallel programming mode
|
||||
* `teensy` @tab Teensy Bootloader
|
||||
* `usbasp` @tab USBasp programmer, see `http://www.fischl.de/usbasp/ <http://www.fischl.de/usbasp/>`_
|
||||
* `usbtiny` @tab Driver for "usbtiny"-type programmers
|
||||
* `wiring` @tab `http://wiring.org.co/ <http://wiring.org.co/>`_, Basically STK500v2 protocol, with some glue to trigger the bootloader.
|
||||
* `xbee` @tab XBee Series 2 Over-The-Air (XBeeBoot)
|
||||
@end multitable
|
||||
|
||||
.. _Part_Definitions:
|
||||
|
||||
Part Definitions
|
||||
================
|
||||
|
||||
|
||||
::
|
||||
|
||||
part
|
||||
id = <id> ; # quoted string
|
||||
desc = <description> ; # quoted string
|
||||
family_id = <description> ; # quoted string
|
||||
has_jtag = <yes/no> ; # part has JTAG i/f
|
||||
has_debugwire = <yes/no> ; # part has debugWire i/f
|
||||
has_pdi = <yes/no> ; # part has PDI i/f
|
||||
has_updi = <yes/no> ; # part has UPDI i/f
|
||||
has_tpi = <yes/no> ; # part has TPI i/f
|
||||
devicecode = <num> ; # numeric
|
||||
stk500_devcode = <num> ; # numeric
|
||||
avr910_devcode = <num> ; # numeric
|
||||
signature = <num> <num> <num> ; # signature bytes
|
||||
usbpid = <num> ; # DFU USB PID
|
||||
reset = dedicated | io;
|
||||
retry_pulse = reset | sck;
|
||||
pgm_enable = <instruction format> ;
|
||||
chip_erase = <instruction format> ;
|
||||
chip_erase_delay = <num> ; # micro-seconds
|
||||
# STK500 parameters (parallel programming IO lines)
|
||||
pagel = <num> ; # pin name in hex, i.e., 0xD7
|
||||
bs2 = <num> ; # pin name in hex, i.e., 0xA0
|
||||
serial = <yes/no> ; # can use serial downloading
|
||||
parallel = <yes/no/pseudo>; # can use par. programming
|
||||
# STK500v2 parameters, to be taken from Atmel's XML files
|
||||
timeout = <num> ;
|
||||
stabdelay = <num> ;
|
||||
cmdexedelay = <num> ;
|
||||
synchloops = <num> ;
|
||||
bytedelay = <num> ;
|
||||
pollvalue = <num> ;
|
||||
pollindex = <num> ;
|
||||
predelay = <num> ;
|
||||
postdelay = <num> ;
|
||||
pollmethod = <num> ;
|
||||
mode = <num> ;
|
||||
delay = <num> ;
|
||||
blocksize = <num> ;
|
||||
readsize = <num> ;
|
||||
hvspcmdexedelay = <num> ;
|
||||
# STK500v2 HV programming parameters, from XML
|
||||
pp_controlstack = <num>, <num>, ...; # PP only
|
||||
hvsp_controlstack = <num>, <num>, ...; # HVSP only
|
||||
hventerstabdelay = <num>;
|
||||
progmodedelay = <num>; # PP only
|
||||
latchcycles = <num>;
|
||||
togglevtg = <num>;
|
||||
poweroffdelay = <num>;
|
||||
resetdelayms = <num>;
|
||||
resetdelayus = <num>;
|
||||
hvleavestabdelay = <num>;
|
||||
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>;
|
||||
# JTAG ICE mkII parameters, also from XML 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.
|
||||
# (only when != 0x3c)
|
||||
is_at90s1200 = <yes/no> ; # AT90S1200 part
|
||||
is_avr32 = <yes/no> ; # AVR32 part
|
||||
|
||||
memory <memtype>
|
||||
paged = <yes/no> ; # yes / no
|
||||
size = <num> ; # bytes
|
||||
page_size = <num> ; # bytes
|
||||
num_pages = <num> ; # numeric
|
||||
min_write_delay = <num> ; # micro-seconds
|
||||
max_write_delay = <num> ; # micro-seconds
|
||||
readback_p1 = <num> ; # byte value
|
||||
readback_p2 = <num> ; # byte value
|
||||
pwroff_after_write = <yes/no> ; # yes / no
|
||||
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> ;
|
||||
;
|
||||
;
|
||||
|
||||
|
||||
.. _Parent_Part:
|
||||
|
||||
Parent Part
|
||||
-----------
|
||||
|
||||
Parts can also inherit parameters from previously defined parts
|
||||
using the following syntax. In this case specified integer and
|
||||
string values override parameter values from the parent part. New
|
||||
memory definitions are added to the definitions inherited from the
|
||||
parent.
|
||||
|
||||
|
||||
::
|
||||
|
||||
part parent <id> # quoted string
|
||||
id = <id> ; # quoted string
|
||||
<any set of other parameters from the list above>
|
||||
;
|
||||
|
||||
|
||||
.. _Instruction_Format:
|
||||
|
||||
Instruction Format
|
||||
------------------
|
||||
|
||||
Instruction formats are specified as a comma separated list of string
|
||||
values containing information (bit specifiers) about each of the 32 bits
|
||||
of the instruction. Bit specifiers may be one of the following formats:
|
||||
|
||||
|
||||
|
||||
*1*
|
||||
The bit is always set on input as well as output
|
||||
|
||||
|
||||
*0*
|
||||
the bit is always clear on input as well as output
|
||||
|
||||
|
||||
*x*
|
||||
the bit is ignored on input and output
|
||||
|
||||
|
||||
*a*
|
||||
the bit is an address bit, the bit-number matches this bit specifier's
|
||||
position within the current instruction byte
|
||||
|
||||
|
||||
*a`N`*
|
||||
the bit is the `N`th address bit, bit-number = N, i.e., `a12`
|
||||
is address bit 12 on input, `a0` is address bit 0.
|
||||
|
||||
|
||||
*i*
|
||||
the bit is an input data bit
|
||||
|
||||
|
||||
*o*
|
||||
the bit is an output data bit
|
||||
|
||||
|
||||
Each instruction must be composed of 32 bit specifiers. The instruction
|
||||
specification closely follows the instruction data provided in Atmel's
|
||||
data sheets for their parts. For example, the EEPROM read and write
|
||||
instruction for an AT90S2313 AVR part could be encoded as:
|
||||
|
||||
|
||||
::
|
||||
|
||||
read = "1 0 1 0 0 0 0 0 x x x x x x x x",
|
||||
"x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o";
|
||||
|
||||
write = "1 1 0 0 0 0 0 0 x x x x x x x x",
|
||||
"x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i";
|
||||
|
||||
|
||||
|
||||
.. _Other_Notes:
|
||||
|
||||
Other Notes
|
||||
===========
|
||||
|
||||
|
||||
*
|
||||
The `devicecode` parameter is the device code used by the STK500
|
||||
and is obtained from the software section (`avr061.zip`) of
|
||||
Atmel's AVR061 application note available from
|
||||
`http://www.atmel.com/dyn/resources/prod_documents/doc2525.pdf <http://www.atmel.com/dyn/resources/prod_documents/doc2525.pdf>`_.
|
||||
|
||||
*
|
||||
Not all memory types will implement all instructions.
|
||||
|
||||
*
|
||||
AVR Fuse bits and Lock bits are implemented as a type of memory.
|
||||
|
||||
*
|
||||
Example memory types are: `flash`, `eeprom`, `fuse`,
|
||||
`lfuse` (low fuse), `hfuse` (high fuse), `efuse`
|
||||
(extended fuse), `signature`, `calibration`, `lock`.
|
||||
|
||||
*
|
||||
The memory type specified on the AVRDUDE command line must match one of
|
||||
the memory types defined for the specified chip.
|
||||
|
||||
*
|
||||
The `pwroff_after_write` flag causes AVRDUDE to attempt to power
|
||||
the device off and back on after an unsuccessful write to the affected
|
||||
memory area if VCC programmer pins are defined. If VCC pins are not
|
||||
defined for the programmer, a message indicating that the device needs a
|
||||
power-cycle is printed out. This flag was added to work around a
|
||||
problem with the at90s4433/2333's; see the at90s4433 errata at:
|
||||
|
||||
`http://www.atmel.com/dyn/resources/prod_documents/doc1280.pdf <http://www.atmel.com/dyn/resources/prod_documents/doc1280.pdf>`_
|
||||
|
||||
*
|
||||
The boot loader from application note AVR109 (and thus also the AVR
|
||||
Butterfly) does not support writing of fuse bits. Writing lock bits
|
||||
is supported, but is restricted to the boot lock bits (BLBxx). These
|
||||
are restrictions imposed by the underlying SPM instruction that is used
|
||||
to program the device from inside the boot loader. Note that programming
|
||||
the boot lock bits can result in a 'shoot-into-your-foot' scenario as
|
||||
the only way to unprogram these bits is a chip erase, which will also
|
||||
erase the boot loader code.
|
||||
|
||||
The boot loader implements the 'chip erase' function by erasing the
|
||||
flash pages of the application section.
|
||||
|
||||
Reading fuse and lock bits is fully supported.
|
||||
|
||||
Note that due to the inability to write the fuse bits, the safemode
|
||||
functionality does not make sense for these boot loaders.
|
||||
|
||||
|
|
@ -0,0 +1,843 @@
|
|||
.. _Programmer_Specific_Information:
|
||||
|
||||
*******************************
|
||||
Programmer Specific Information
|
||||
*******************************
|
||||
|
||||
|
||||
.. _Atmel_STK600:
|
||||
|
||||
Atmel STK600
|
||||
============
|
||||
|
||||
The following devices are supported by the respective STK600 routing
|
||||
and socket card:
|
||||
|
||||
@multitable @columnfractions .25 .25 .5
|
||||
@headitem Routing card @tab Socket card @tab Devices
|
||||
* `} @tab @code{STK600-ATTINY10` @tab ATtiny4 ATtiny5 ATtiny9 ATtiny10
|
||||
* `STK600-RC008T-2` @tab `STK600-DIP` @tab ATtiny11 ATtiny12 ATtiny13 ATtiny13A ATtiny25 ATtiny45 ATtiny85
|
||||
* `STK600-RC008T-7` @tab `STK600-DIP` @tab ATtiny15
|
||||
* `STK600-RC014T-42` @tab `STK600-SOIC` @tab ATtiny20
|
||||
* `STK600-RC020T-1` @tab `STK600-DIP` @tab ATtiny2313 ATtiny2313A ATtiny4313
|
||||
* `} @tab @code{STK600-TinyX3U` @tab ATtiny43U
|
||||
* `STK600-RC014T-12` @tab `STK600-DIP` @tab ATtiny24 ATtiny44 ATtiny84 ATtiny24A ATtiny44A
|
||||
* `STK600-RC020T-8` @tab `STK600-DIP` @tab ATtiny26 ATtiny261 ATtiny261A ATtiny461 ATtiny861 ATtiny861A
|
||||
* `STK600-RC020T-43` @tab `STK600-SOIC` @tab ATtiny261 ATtiny261A ATtiny461 ATtiny461A ATtiny861 ATtiny861A
|
||||
* `STK600-RC020T-23` @tab `STK600-SOIC` @tab ATtiny87 ATtiny167
|
||||
* `STK600-RC028T-3` @tab `STK600-DIP` @tab ATtiny28
|
||||
* `STK600-RC028M-6` @tab `STK600-DIP` @tab ATtiny48 ATtiny88 ATmega8 ATmega8A ATmega48 ATmega88 ATmega168 ATmega48P ATmega48PA ATmega88P ATmega88PA ATmega168P ATmega168PA ATmega328P
|
||||
* `} @tab @code{QT600-ATTINY88-QT8` @tab ATtiny88
|
||||
* `STK600-RC040M-4` @tab `STK600-DIP` @tab ATmega8515 ATmega162
|
||||
* `STK600-RC044M-30` @tab `STK600-TQFP44` @tab ATmega8515 ATmega162
|
||||
* `STK600-RC040M-5` @tab `STK600-DIP` @tab ATmega8535 ATmega16 ATmega16A ATmega32 ATmega32A ATmega164P ATmega164PA ATmega324P ATmega324PA ATmega644 ATmega644P ATmega644PA ATmega1284P
|
||||
* `STK600-RC044M-31` @tab `STK600-TQFP44` @tab ATmega8535 ATmega16 ATmega16A ATmega32 ATmega32A ATmega164P ATmega164PA ATmega324P ATmega324PA ATmega644 ATmega644P ATmega644PA ATmega1284P
|
||||
* `} @tab @code{QT600-ATMEGA324-QM64` @tab ATmega324PA
|
||||
* `STK600-RC032M-29` @tab `STK600-TQFP32` @tab ATmega8 ATmega8A ATmega48 ATmega88 ATmega168 ATmega48P ATmega48PA ATmega88P ATmega88PA ATmega168P ATmega168PA ATmega328P
|
||||
* `STK600-RC064M-9` @tab `STK600-TQFP64` @tab ATmega64 ATmega64A ATmega128 ATmega128A ATmega1281 ATmega2561 AT90CAN32 AT90CAN64 AT90CAN128
|
||||
* `STK600-RC064M-10` @tab `STK600-TQFP64` @tab ATmega165 ATmega165P ATmega169 ATmega169P ATmega169PA ATmega325 ATmega325P ATmega329 ATmega329P ATmega645 ATmega649 ATmega649P
|
||||
* `STK600-RC100M-11` @tab `STK600-TQFP100` @tab ATmega640 ATmega1280 ATmega2560
|
||||
* `} @tab @code{STK600-ATMEGA2560` @tab ATmega2560
|
||||
* `STK600-RC100M-18` @tab `STK600-TQFP100` @tab ATmega3250 ATmega3250P ATmega3290 ATmega3290P ATmega6450 ATmega6490
|
||||
* `STK600-RC032U-20` @tab `STK600-TQFP32` @tab AT90USB82 AT90USB162 ATmega8U2 ATmega16U2 ATmega32U2
|
||||
* `STK600-RC044U-25` @tab `STK600-TQFP44` @tab ATmega16U4 ATmega32U4
|
||||
* `STK600-RC064U-17` @tab `STK600-TQFP64` @tab ATmega32U6 AT90USB646 AT90USB1286 AT90USB647 AT90USB1287
|
||||
* `STK600-RCPWM-22` @tab `STK600-TQFP32` @tab ATmega32C1 ATmega64C1 ATmega16M1 ATmega32M1 ATmega64M1
|
||||
* `STK600-RCPWM-19` @tab `STK600-SOIC` @tab AT90PWM2 AT90PWM3 AT90PWM2B AT90PWM3B AT90PWM216 AT90PWM316
|
||||
* `STK600-RCPWM-26` @tab `STK600-SOIC` @tab AT90PWM81
|
||||
* `STK600-RC044M-24` @tab `STK600-TSSOP44` @tab ATmega16HVB ATmega32HVB
|
||||
* `} @tab @code{STK600-HVE2` @tab ATmega64HVE
|
||||
* `} @tab @code{STK600-ATMEGA128RFA1` @tab ATmega128RFA1
|
||||
* `STK600-RC100X-13` @tab `STK600-TQFP100` @tab ATxmega64A1 ATxmega128A1 ATxmega128A1_revD ATxmega128A1U
|
||||
* `} @tab @code{STK600-ATXMEGA1281A1` @tab ATxmega128A1
|
||||
* `} @tab @code{QT600-ATXMEGA128A1-QT16` @tab ATxmega128A1
|
||||
* `STK600-RC064X-14` @tab `STK600-TQFP64` @tab ATxmega64A3 ATxmega128A3 ATxmega256A3 ATxmega64D3 ATxmega128D3 ATxmega192D3 ATxmega256D3
|
||||
* `STK600-RC064X-14` @tab `STK600-MLF64` @tab ATxmega256A3B
|
||||
* `STK600-RC044X-15` @tab `STK600-TQFP44` @tab ATxmega32A4 ATxmega16A4 ATxmega16D4 ATxmega32D4
|
||||
* `} @tab @code{STK600-ATXMEGAT0` @tab ATxmega32T0
|
||||
* `} @tab @code{STK600-uC3-144` @tab AT32UC3A0512 AT32UC3A0256 AT32UC3A0128
|
||||
* `STK600-RCUC3A144-33` @tab `STK600-TQFP144` @tab AT32UC3A0512 AT32UC3A0256 AT32UC3A0128
|
||||
* `STK600-RCuC3A100-28` @tab `STK600-TQFP100` @tab AT32UC3A1512 AT32UC3A1256 AT32UC3A1128
|
||||
* `STK600-RCuC3B0-21` @tab `STK600-TQFP64-2` @tab AT32UC3B0256 AT32UC3B0512RevC AT32UC3B0512 AT32UC3B0128 AT32UC3B064 AT32UC3D1128
|
||||
* `STK600-RCuC3B48-27` @tab `STK600-TQFP48` @tab AT32UC3B1256 AT32UC3B164
|
||||
* `STK600-RCUC3A144-32` @tab `STK600-TQFP144` @tab AT32UC3A3512 AT32UC3A3256 AT32UC3A3128 AT32UC3A364 AT32UC3A3256S AT32UC3A3128S AT32UC3A364S
|
||||
* `STK600-RCUC3C0-36` @tab `STK600-TQFP144` @tab AT32UC3C0512 AT32UC3C0256 AT32UC3C0128 AT32UC3C064
|
||||
* `STK600-RCUC3C1-38` @tab `STK600-TQFP100` @tab AT32UC3C1512 AT32UC3C1256 AT32UC3C1128 AT32UC3C164
|
||||
* `STK600-RCUC3C2-40` @tab `STK600-TQFP64-2` @tab AT32UC3C2512 AT32UC3C2256 AT32UC3C2128 AT32UC3C264
|
||||
* `STK600-RCUC3C0-37` @tab `STK600-TQFP144` @tab AT32UC3C0512 AT32UC3C0256 AT32UC3C0128 AT32UC3C064
|
||||
* `STK600-RCUC3C1-39` @tab `STK600-TQFP100` @tab AT32UC3C1512 AT32UC3C1256 AT32UC3C1128 AT32UC3C164
|
||||
* `STK600-RCUC3C2-41` @tab `STK600-TQFP64-2` @tab AT32UC3C2512 AT32UC3C2256 AT32UC3C2128 AT32UC3C264
|
||||
* `STK600-RCUC3L0-34` @tab `STK600-TQFP48` @tab AT32UC3L064 AT32UC3L032 AT32UC3L016
|
||||
* `} @tab @code{QT600-AT32UC3L-QM64` @tab AT32UC3L064
|
||||
@end multitable
|
||||
|
||||
Ensure the correct socket and routing card are mounted *before*
|
||||
powering on the STK600. While the STK600 firmware ensures the socket
|
||||
and routing card mounted match each other (using a table stored
|
||||
internally in nonvolatile memory), it cannot handle the case where a
|
||||
wrong routing card is used, e. g. the routing card
|
||||
`STK600-RC040M-5` (which is meant for 40-pin DIP AVRs that have
|
||||
an ADC, with the power supply pins in the center of the package) was
|
||||
used but an ATmega8515 inserted (which uses the 'industry standard'
|
||||
pinout with Vcc and GND at opposite corners).
|
||||
|
||||
Note that for devices that use the routing card `STK600-RC008T-2`,
|
||||
in order to use ISP mode, the jumper for `AREF0` must be removed
|
||||
as it would otherwise block one of the ISP signals. High-voltage
|
||||
serial programming can be used even with that jumper installed.
|
||||
|
||||
The ISP system of the STK600 contains a detection against shortcuts
|
||||
and other wiring errors. AVRDUDE initiates a connection check before
|
||||
trying to enter ISP programming mode, and display the result if the
|
||||
target is not found ready to be ISP programmed.
|
||||
|
||||
High-voltage programming requires the target voltage to be set to at
|
||||
least 4.5 V in order to work. This can be done using
|
||||
*Terminal Mode*, see :ref:`Terminal_Mode_Operation`.
|
||||
|
||||
.. _Atmel_DFU_bootloader_using_FLIP_version_1:
|
||||
|
||||
Atmel DFU bootloader using FLIP version 1
|
||||
=========================================
|
||||
|
||||
Bootloaders using the FLIP protocol version 1 experience some very
|
||||
specific behaviour.
|
||||
|
||||
These bootloaders have no option to access memory areas other than
|
||||
Flash and EEPROM.
|
||||
|
||||
When the bootloader is started, it enters a *security mode* where
|
||||
the only acceptable access is to query the device configuration
|
||||
parameters (which are used for the signature on AVR devices). The
|
||||
only way to leave this mode is a *chip erase*. As a chip erase
|
||||
is normally implied by the *-U* option when reprogramming the
|
||||
flash, this peculiarity might not be very obvious immediately.
|
||||
|
||||
Sometimes, a bootloader with security mode already disabled seems to
|
||||
no longer respond with sensible configuration data, but only 0xFF for
|
||||
all queries. As these queries are used to obtain the equivalent of a
|
||||
signature, AVRDUDE can only continue in that situation by forcing the
|
||||
signature check to be overridden with the *-F* option.
|
||||
|
||||
A *chip erase* might leave the EEPROM unerased, at least on some
|
||||
versions of the bootloader.
|
||||
|
||||
.. _SerialUPDI_programmer:
|
||||
|
||||
SerialUPDI programmer
|
||||
=====================
|
||||
|
||||
SerialUPDI programmer can be used for programming UPDI-only devices
|
||||
using very simple serial connection.
|
||||
You can read more about the details here
|
||||
`https://github.com/SpenceKonde/AVR-Guidance/blob/master/UPDI/jtag2updi.md <https://github.com/SpenceKonde/AVR-Guidance/blob/master/UPDI/jtag2updi.md>`_
|
||||
|
||||
SerialUPDI programmer has been tested using FT232RL USB->UART interface
|
||||
with the following connection layout (copied from Spence Kohde's page linked
|
||||
above):
|
||||
|
||||
::
|
||||
|
||||
-------------------- To Target device
|
||||
DTR| __________________
|
||||
Rx |--------------,------------------| UPDI---\\/\\/---------->
|
||||
Tx---/\\/\\/\\---Tx |-------|<|---' .--------| Gnd 470 ohm
|
||||
resistor Vcc|---------------------------------| Vcc
|
||||
1k CTS| .` |__________________
|
||||
Gnd|--------------------'
|
||||
--------------------
|
||||
|
||||
|
||||
There are several limitations in current SerialUPDI/AVRDUDE integration,
|
||||
listed below.
|
||||
|
||||
At the end of each run there are fuse values being presented to the user.
|
||||
For most of the UPDI-enabled devices these definitions (low fuse, high
|
||||
fuse, extended fuse) have no meaning whatsoever, as they have been
|
||||
simply replaced by array of fuses: fuse0..9. Therefore you can simply
|
||||
ignore this particular line of AVRDUDE output.
|
||||
|
||||
In connection to the above, *safemode* has no meaning in context
|
||||
of UPDI devices and should be ignored.
|
||||
|
||||
Currently available devices support only UPDI NVM programming model 0
|
||||
and 2, but there is also experimental implementation of model 3 - not
|
||||
yet tested.
|
||||
|
||||
One of the core AVRDUDE features is verification of the connection by
|
||||
reading device signature prior to any operation, but this operation
|
||||
is not possible on UPDI locked devices. Therefore, to be able to
|
||||
connect to such a device, you have to provide *-F* to override
|
||||
this check.
|
||||
|
||||
Please note: using *-F* during write operation to locked device
|
||||
will force chip erase. Use carefully.
|
||||
|
||||
Another issue you might notice is slow performance of EEPROM writing
|
||||
using SerialUPDI 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
|
||||
#------------------------------------------------------------
|
||||
|
||||
part parent ".avrdx"
|
||||
id = "avr128db28";
|
||||
desc = "AVR128DB28";
|
||||
signature = 0x1E 0x97 0x0E;
|
||||
|
||||
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 addition 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 expected. 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 <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.
|
||||
|
||||
@appendix Platform Dependent Information
|
||||
|
||||
.. _Unix:
|
||||
|
||||
Unix
|
||||
====
|
||||
|
||||
|
||||
.. _Unix_Installation:
|
||||
|
||||
Unix Installation
|
||||
-----------------
|
||||
|
||||
To build and install from the source tarball on Unix like systems:
|
||||
|
||||
::
|
||||
|
||||
$ gunzip -c avrdude-6.99-20211218.tar.gz | tar xf -
|
||||
$ cd avrdude-6.99-20211218
|
||||
$ ./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-6.99-20211218.tar.gz | tar xf -
|
||||
$ cd avrdude-6.99-20211218
|
||||
$ ./configure --prefix=$HOME/local
|
||||
$ make
|
||||
$ make install
|
||||
|
||||
|
||||
.. _FreeBSD_Installation:
|
||||
|
||||
FreeBSD Installation
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
AVRDUDE is installed via the FreeBSD Ports Tree as follows:
|
||||
|
||||
::
|
||||
|
||||
% su - root
|
||||
# cd /usr/ports/devel/avrdude
|
||||
# make install
|
||||
|
||||
|
||||
If you wish to install from a pre-built package instead of the source,
|
||||
you can use the following instead:
|
||||
|
||||
::
|
||||
|
||||
% su - root
|
||||
# pkg_add -r avrdude
|
||||
|
||||
|
||||
Of course, you must be connected to the Internet for these methods to
|
||||
work, since that is where the source as well as the pre-built package is
|
||||
obtained.
|
||||
|
||||
.. _Linux_Installation:
|
||||
|
||||
Linux Installation
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
|
||||
On rpm based Linux systems (such as RedHat, SUSE, Mandrake, etc.), you
|
||||
can build and install the rpm binaries directly from the tarball:
|
||||
|
||||
::
|
||||
|
||||
$ su - root
|
||||
# rpmbuild -tb avrdude-6.99-20211218.tar.gz
|
||||
# rpm -Uvh /usr/src/redhat/RPMS/i386/avrdude-6.99-20211218-1.i386.rpm
|
||||
|
||||
|
||||
Note that the path to the resulting rpm package, differs from system
|
||||
to system. The above example is specific to RedHat.
|
||||
|
||||
.. _Unix_Configuration_Files:
|
||||
|
||||
Unix Configuration Files
|
||||
------------------------
|
||||
|
||||
When AVRDUDE is build using the default *--prefix* configure
|
||||
option, the default configuration file for a Unix system is located at
|
||||
`/usr/local/etc/avrdude.conf`. This can be overridden by using the
|
||||
*-C* command line option. Additionally, the user's home directory
|
||||
is searched for a file named `.avrduderc`, and if found, is used to
|
||||
augment the system default configuration file.
|
||||
|
||||
.. _FreeBSD_Configuration_Files:
|
||||
|
||||
FreeBSD Configuration Files
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
When AVRDUDE is installed using the FreeBSD ports system, the system
|
||||
configuration file is always `/usr/local/etc/avrdude.conf`.
|
||||
|
||||
.. _Linux_Configuration_Files:
|
||||
|
||||
Linux Configuration Files
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
When AVRDUDE is installed using from an rpm package, the system
|
||||
configuration file will be always be `/etc/avrdude.conf`.
|
||||
|
||||
.. _Unix_Port_Names:
|
||||
|
||||
Unix Port Names
|
||||
---------------
|
||||
|
||||
The parallel and serial port device file names are system specific.
|
||||
The following table lists the default names for a given system.
|
||||
|
||||
@multitable @columnfractions .30 .30 .30
|
||||
* @strong{System}
|
||||
@tab @strong{Default Parallel Port}
|
||||
@tab @strong{Default Serial Port}
|
||||
* FreeBSD
|
||||
@tab `/dev/ppi0`
|
||||
@tab `/dev/cuad0`
|
||||
* Linux
|
||||
@tab `/dev/parport0`
|
||||
@tab `/dev/ttyS0`
|
||||
* Solaris
|
||||
@tab `/dev/printers/0`
|
||||
@tab `/dev/term/a`
|
||||
@end multitable
|
||||
|
||||
On FreeBSD systems, AVRDUDE uses the ppi(4) interface for
|
||||
accessing the parallel port and the sio(4) driver for serial port
|
||||
access.
|
||||
|
||||
On Linux systems, AVRDUDE uses the ppdev interface for
|
||||
accessing the parallel port and the tty driver for serial port
|
||||
access.
|
||||
|
||||
On Solaris systems, AVRDUDE uses the ecpp(7D) driver for
|
||||
accessing the parallel port and the asy(7D) driver for serial port
|
||||
access.
|
||||
|
||||
.. _Unix_Documentation:
|
||||
|
||||
Unix 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 documentation
|
||||
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*.
|
||||
|
||||
.. _Windows:
|
||||
|
||||
Windows
|
||||
=======
|
||||
|
||||
|
||||
.. _Installation:
|
||||
|
||||
Installation
|
||||
------------
|
||||
|
||||
A Windows executable of avrdude is included in WinAVR which can be found at
|
||||
`http://sourceforge.net/projects/winavr <http://sourceforge.net/projects/winavr>`_. WinAVR is a suite of executable,
|
||||
open source software 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/ <http://www.cygwin.com/>`_).
|
||||
|
||||
To build and install from the source tarball for Windows (using Cygwin):
|
||||
|
||||
::
|
||||
|
||||
$ set PREFIX=<your install directory path>
|
||||
$ export PREFIX
|
||||
$ gunzip -c avrdude-6.99-20211218.tar.gz | tar xf -
|
||||
$ cd avrdude-6.99-20211218
|
||||
$ ./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/ <http://www.mingw.org/>`_) directly.
|
||||
|
||||
.. _Configuration_Files:
|
||||
|
||||
Configuration Files
|
||||
-------------------
|
||||
|
||||
|
||||
.. _Configuration_file_names:
|
||||
|
||||
Configuration file names
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
AVRDUDE on Windows looks for a system configuration file name of
|
||||
`avrdude.conf` and looks for a user override configuration file of
|
||||
`avrdude.rc`.
|
||||
|
||||
.. _How_AVRDUDE_finds_the_configuration_files.:
|
||||
|
||||
How AVRDUDE finds the configuration files.
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
AVRDUDE on Windows has a different way of searching for the system and
|
||||
user configuration files. Below is the search method for locating the
|
||||
configuration files:
|
||||
|
||||
|
||||
*
|
||||
Only for the system configuration file:
|
||||
`<directory from which application loaded>/../etc/avrdude.conf`
|
||||
|
||||
*
|
||||
The directory from which the application loaded.
|
||||
|
||||
*
|
||||
The current directory.
|
||||
|
||||
*
|
||||
The Windows system directory. On Windows NT, the name of this directory
|
||||
is `SYSTEM32`.
|
||||
|
||||
*
|
||||
Windows NT: The 16-bit Windows system directory. The name of this
|
||||
directory is `SYSTEM`.
|
||||
|
||||
*
|
||||
The Windows directory.
|
||||
|
||||
*
|
||||
The directories that are listed in the PATH environment variable.
|
||||
|
||||
|
||||
.. _Port_Names:
|
||||
|
||||
Port Names
|
||||
----------
|
||||
|
||||
|
||||
.. _Serial_Ports:
|
||||
|
||||
Serial Ports
|
||||
^^^^^^^^^^^^
|
||||
|
||||
When you select a serial port (i.e. when using an STK500) use the
|
||||
Windows serial port device names such as: com1, com2, etc.
|
||||
|
||||
.. _Parallel_Ports:
|
||||
|
||||
Parallel Ports
|
||||
^^^^^^^^^^^^^^
|
||||
|
||||
AVRDUDE will accept 3 Windows parallel port names: lpt1, lpt2, or
|
||||
lpt3. Each of these names corresponds to a fixed parallel port base
|
||||
address:
|
||||
|
||||
|
||||
|
||||
*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`).
|
||||
|
||||
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 documentation
|
||||
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*.
|
||||
|
||||
@appendix Troubleshooting
|
||||
|
||||
In general, please report any bugs encountered via
|
||||
@*
|
||||
`http://savannah.nongnu.org/bugs/?group=avrdude <http://savannah.nongnu.org/bugs/?group=avrdude>`_.
|
||||
|
||||
|
||||
*
|
||||
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 behaviour 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
|
||||
programming 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 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:
|
||||
|
||||
@multitable @columnfractions .2 .2
|
||||
* @strong{JTAG pin} @tab @strong{ISP pin}
|
||||
* 1 @tab 3
|
||||
* 2 @tab 6
|
||||
* 3 @tab 1
|
||||
* 4 @tab 2
|
||||
* 6 @tab 5
|
||||
* 9 @tab 4
|
||||
@end multitable
|
||||
|
||||
*
|
||||
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 dependent; 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 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:
|
||||
|
||||
@multitable @columnfractions .2 .2 .2 .2
|
||||
* @strong{JTAGICE} @tab @strong{Target} @tab @strong{Squid cab-} @tab @strong{PDI}
|
||||
* @strong{mkII probe} @tab @strong{pins} @tab @strong{le colors} @tab @strong{header}
|
||||
* 1 (TCK) @tab @tab Black @tab
|
||||
* 2 (GND) @tab GND @tab White @tab 6
|
||||
* 3 (TDO) @tab @tab Grey @tab
|
||||
* 4 (VTref) @tab VTref @tab Purple @tab 2
|
||||
* 5 (TMS) @tab @tab Blue @tab
|
||||
* 6 (nSRST) @tab PDI_CLK @tab Green @tab 5
|
||||
* 7 (N.C.) @tab @tab Yellow @tab
|
||||
* 8 (nTRST) @tab @tab Orange @tab
|
||||
* 9 (TDI) @tab PDI_DATA @tab Red @tab 1
|
||||
* 10 (GND) @tab @tab Brown @tab
|
||||
@end multitable
|
||||
|
||||
*
|
||||
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:
|
||||
|
||||
@multitable @columnfractions .2 .2
|
||||
* @strong{Dragon} @tab @strong{Target}
|
||||
* @strong{ISP Header} @tab @strong{pins}
|
||||
* 1 (MISO) @tab PDI_DATA
|
||||
* 2 (VCC) @tab VCC
|
||||
* 3 (SCK) @tab
|
||||
* 4 (MOSI) @tab
|
||||
* 5 (RESET) @tab PDI_CLK / RST
|
||||
* 6 (GND) @tab GND
|
||||
@end multitable
|
||||
|
||||
*
|
||||
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:
|
||||
|
||||
@multitable @columnfractions .2 .2 .2
|
||||
* @strong{AVRISP} @tab @strong{Target} @tab @strong{ATtiny}
|
||||
* @strong{connector} @tab @strong{pins} @tab @strong{pin #}
|
||||
* 1 (MISO) @tab TPIDATA @tab 1
|
||||
* 2 (VTref) @tab Vcc @tab 5
|
||||
* 3 (SCK) @tab TPICLK @tab 3
|
||||
* 4 (MOSI) @tab @tab
|
||||
* 5 (RESET) @tab /RESET @tab 6
|
||||
* 6 (GND) @tab GND @tab 2
|
||||
@end multitable
|
||||
|
||||
*
|
||||
Problem: I want to program an ATtiny4/5/9/10 device using a serial/parallel
|
||||
bitbang programmer. How to connect the pins?
|
||||
|
||||
Solution: Since TPI has only 1 pin for bi-directional data transfer, both
|
||||
`MISO` and `MOSI` pins should be connected to the `TPIDATA` pin
|
||||
on the ATtiny device.
|
||||
However, a 1K resistor should be placed between the `MOSI` and `TPIDATA`.
|
||||
The `MISO` pin connects to `TPIDATA` directly.
|
||||
The `SCK` pin is connected to `TPICLK`.
|
||||
|
||||
In addition, the `Vcc`, `/RESET` and `GND` pins should
|
||||
be connected to their respective ports on the ATtiny device.
|
||||
|
||||
*
|
||||
Problem: How can I use a FTDI FT232R USB-to-Serial device for bitbang programming?
|
||||
|
||||
Solution: When connecting the FT232 directly to the pins of the target Atmel device,
|
||||
the polarity of the pins defined in the `programmer` definition should be
|
||||
inverted by prefixing a tilde. For example, the `dasa` programmer would
|
||||
look like this when connected via a FT232R device (notice the tildes in
|
||||
front of pins 7, 4, 3 and 8):
|
||||
|
||||
::
|
||||
|
||||
programmer
|
||||
id = "dasa_ftdi";
|
||||
desc = "serial port banging, reset=rts sck=dtr mosi=txd miso=cts";
|
||||
type = serbb;
|
||||
reset = ~7;
|
||||
sck = ~4;
|
||||
mosi = ~3;
|
||||
miso = ~8;
|
||||
;
|
||||
|
||||
|
||||
Note that this uses the FT232 device as a normal serial port, not using the
|
||||
FTDI drivers in the special bitbang mode.
|
||||
|
||||
*
|
||||
Problem: My ATtiny4/5/9/10 reads out fine, but any attempt to program
|
||||
it (through TPI) fails. Instead, the memory retains the old contents.
|
||||
|
||||
Solution: Mind the limited programming supply voltage range of these
|
||||
devices.
|
||||
|
||||
In-circuit programming through TPI is only guaranteed by the datasheet
|
||||
at Vcc = 5 V.
|
||||
|
||||
*
|
||||
Problem: My ATxmega...A1/A2/A3 cannot be programmed through PDI with
|
||||
my AVR Dragon. Programming through a JTAG ICE mkII works though, as does
|
||||
programming through JTAG.
|
||||
|
||||
Solution: None by this time (2010 Q1).
|
||||
|
||||
It is said that the AVR Dragon can only program devices from the A4
|
||||
Xmega sub-family.
|
||||
|
||||
*
|
||||
Problem: when programming with an AVRISPmkII or STK600, AVRDUDE hangs
|
||||
when programming files of a certain size (e.g. 246 bytes). Other
|
||||
(larger or smaller) sizes work though.
|
||||
|
||||
Solution: This is a bug caused by an incorrect handling of zero-length
|
||||
packets (ZLPs) in some versions of the libusb 0.1 API wrapper that ships
|
||||
with libusb 1.x in certain Linux distributions. All Linux systems with
|
||||
kernel versions < 2.6.31 and libusb >= 1.0.0 < 1.0.3 are reported to be
|
||||
affected by this.
|
||||
|
||||
See also: `http://www.libusb.org/ticket/6 <http://www.libusb.org/ticket/6>`_
|
||||
|
||||
*
|
||||
Problem: after flashing a firmware that reduces the target's clock
|
||||
speed (e.g. through the `CLKPR` register), further ISP connection
|
||||
attempts fail.
|
||||
|
||||
Solution: Even though ISP starts with pulling `/RESET` low, the
|
||||
target continues to run at the internal clock speed as defined by the
|
||||
firmware running before. 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.
|
||||
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
# Configuration file for the Sphinx documentation builder.
|
||||
|
||||
# -- Project information
|
||||
|
||||
project = 'AVRDUDE'
|
||||
copyright = 'The AVRDUDE authors'
|
||||
author = '2003-2005 Brian Dean, 2006-2022 Jörg Wunsch'
|
||||
|
||||
release = '0.1'
|
||||
version = '0.1.0'
|
||||
|
||||
# -- General configuration
|
||||
|
||||
extensions = [
|
||||
'sphinx.ext.duration',
|
||||
'sphinx.ext.doctest',
|
||||
'sphinx.ext.autodoc',
|
||||
'sphinx.ext.autosummary',
|
||||
'sphinx.ext.intersphinx',
|
||||
]
|
||||
|
||||
intersphinx_mapping = {
|
||||
'python': ('https://docs.python.org/3/', None),
|
||||
'sphinx': ('https://www.sphinx-doc.org/en/master/', None),
|
||||
}
|
||||
intersphinx_disabled_domains = ['std']
|
||||
|
||||
templates_path = ['_templates']
|
||||
|
||||
# -- Options for HTML output
|
||||
|
||||
html_theme = 'sphinx_rtd_theme'
|
||||
|
||||
# -- Options for EPUB output
|
||||
epub_show_urls = 'footnote'
|
|
@ -0,0 +1,27 @@
|
|||
AVRDUDE
|
||||
=======
|
||||
|
||||
This file documents the avrdude program for downloading/uploading
|
||||
programs to Microchip AVR microcontrollers.
|
||||
|
||||
For avrdude version 6.99-20211218, 6 January 2022.
|
||||
|
||||
Send comments on AVRDUDE to avrdude-dev@nongnu.org.
|
||||
|
||||
Use https://github.com/avrdudes/avrdude/issues to report bugs.
|
||||
|
||||
Copyright (C) 2003,2005 Brian S. Dean
|
||||
|
||||
Copyright (C) 2006 Jörg Wunsch
|
||||
|
||||
.. toctree::
|
||||
:numbered:
|
||||
:maxdepth: 3
|
||||
|
||||
1-Introduction
|
||||
2-Command_Line_Options
|
||||
3-Terminal_Mode_Operation
|
||||
4-Configuration_File
|
||||
5-Programmer_Specific_Information
|
||||
6-Platform_Dependent_Information
|
||||
7-Troubleshooting
|
Loading…
Reference in New Issue