Provided by: avarice_2.14+svn392-1_amd64 bug

NAME

       avarice - Provides an interface from avr-gdb to Atmel's AVR in-circuit debugging tools

SYNOPSIS

       avarice [OPTIONS]... [[HOST_NAME]:PORT]

DESCRIPTION

       AVaRICE  runs  on a POSIX machine and connects to gdb via a TCP socket and communicates via gdb's "serial
       debug protocol". This protocol allows gdb to send commands like "set/remove breakpoint"  and  "read/write
       memory".

       AVaRICE translates these commands into the Atmel protocol used to control the AVR JTAG ICE. Connection to
       the AVR JTAG ICE is via a serial port on the POSIX machine.

       Because the GDB <---> AVaRICE connection is via a TCP socket, the two programs do not need to run on  the
       same  machine.  In  an  office environment, this allows a developer to debug a target in the lab from the
       comfort of their cube (or even better, their home!)

       NOTE: Even though you can run avarice and avr-gdb on different systems, it is not recommended because  of
             the  security  risk  involved.  avarice  was  not  designed  to  be  a  secure  server. There is no
             authentication performed when a client connects to avarice when it is running in gdb server mode.

   Supported Devices
       avarice currently has support for the following devices:
           at90can128
           at90can32 (o)
           at90can64 (o)
           at90pwm2 (o) (+)
           at90pwm216 (o) (+)
           at90pwm2b (o) (+)
           at90pwm3 (o) (+)
           at90pwm316 (o) (+)
           at90pwm3b (o) (+)
           at90usb1287 (o)
           at90usb162 (o) (+)
           at90usb646 (o)
           at90usb647 (o)
           atmega128
           atmega1280 (o)
           atmega1281 (o)
           atmega1284p (o)
           atmega128rfa1 (o)
           atmega16
           atmega162
           atmega164p (o)
           atmega165 (o)
           atmega165p (o)
           atmega168 (o) (+)
           atmega168p (o) (+)
           atmega169
           atmega16hva (o)
           atmega16m1 (o) (+)
           atmega2560 (o)
           atmega2561 (o)
           atmega32
           atmega323
           atmega324p (o)
           atmega325 (o)
           atmega3250 (o)
           atmega3250p (o)
           atmega325p (o)
           atmega328p (o) (+)
           atmega329 (o)
           atmega3290 (o)
           atmega3290p (o)
           atmega329p (o)
           atmega32c1 (o) (+)
           atmega32hvb (o) (+)
           atmega32m1 (o) (+)
           atmega32u4 (o)
           atmega406 (o)
           atmega48 (o) (+)
           atmega48p (o) (+)
           atmega64
           atmega640 (o)
           atmega644 (o)
           atmega644p (o)
           atmega645 (o)
           atmega6450 (o)
           atmega649 (o)
           atmega6490 (o)
           atmega64c1 (o) (+)
           atmega64m1 (o) (+)
           atmega88 (o) (+)
           atmega88p (o) (+)
           attiny13 (o) (+)
           attiny167 (o) (+)
           attiny2313 (o) (+)
           attiny24 (o) (+)
           attiny25 (o) (+)
           attiny261 (o) (+)
           attiny4313 (o) (+)
           attiny43u (o) (+)
           attiny44 (o) (+)
           attiny45 (o) (+)
           attiny461 (o) (+)
           attiny48 (o) (+)
           attiny84 (o) (+)
           attiny85 (o) (+)
           attiny861 (o) (+)
           attiny88 (o) (+)
           atxmega128a1 (o) (*)
           atxmega128a1revd (o) (*)
           atxmega128a3 (o) (*)
           atxmega192a3 (o) (*)
           atxmega256a3 (o) (*)
           atxmega32a4 (o) (*)
           atxmega16d4 (o) (*)
           atxmega128b1 (o) (*)
           atxmega128b3 (o) (*)
           atxmega64b1 (o) (*)
           atxmega64b3 (o) (*)

       o - Not supported by JTAG ICE mkI
       * - Xmega device, requires firmware version of at least 7.x (as shipped with AVR Studio 5)
       + - debugWire, see below

   Supported File Formats
       avarice uses libbfd for reading input files. As such, it can handle any file format  that  libbfd  knowns
       about.  This  includes the Intel Hex, Motorola SRecord and ELF formats, among others. If you tell avarice
       to read an ELF file, it will automatically handle programming all of the sections contained in  the  file
       (e.g. flash, eeprom, etc.).

OPTIONS

       -h, --help
              Print this message.

       -1, --mkI
              Connect  to  original  JTAG  ICE (default).  This is sometimes also called "mkI" to distinguish it
              from the more recent versions.  Some simple clones are also around talking this protocol version.

       -2, --mkII
              Connect to JTAG ICE mkII.

       -3, --jtag3
              Connect to JTAGICE3 running firmware 2.x.

       -4, --edbg
              Connect to an AtmelICE, or JTAGICE3 running firmware 3+, or embedded  debugger  (EDBG).   Requires
              that avarice has been compiled with libhidapi support.

       -B, --jtag-bitrate <rate>
              Set the bitrate that the JTAG box communicates with the AVR target device.  This must be less than
              1/4 of the frequency of the target. Valid values are 1 MHz, 500 kHz, 250 kHz or 125  kHz  for  the
              JTAG  ICE  mkI,  anything  between  22  kHz  through approximately 6400 kHz for the JTAG ICE mkII.
              (default: 250 kHz)

       -C, --capture
              Capture running program.
              Note: debugging must have been enabled prior to starting the program. (e.g.,  by  running  avarice
              earlier)

       -c, --daisy-chain <ub,ua,bb,ba>
              Setup JTAG daisy-chain information.
              Four  comma-separated  parameters need to be provided, corresponding to units before, units after,
              bits before, and bits after.

       -D, --detach
              Detach once synced with JTAG ICE

       -d, --debug
              Enable printing of debug information.

       -e, --erase
              Erase target.  Not possible in debugWire mode.

       -E, --event <eventlist>
              List of events  that  do  not  interrupt.   JTAG  ICE  mkII  and  AVR  Dragon  only.   Default  is
              "none,run,target_power_on,target_sleep,target_wakeup"

       -f, --file <filename>
              Specify  a  file  for use with the --program and --verify options. If --file is passed and neither
              --program or --verify are given then --program is implied.   NOTE:  deprecated  feature,  must  be
              enabled using the --enable-target-programming configuration option.

       -g, --dragon
              Connect to an AVR Dragon.  This option implies the -2 option.

       -I, --ignore-intr
              Automatically step over interrupts.

       -j, --jtag <devname>
              Serial  port  attached to JTAG box (default: /dev/avrjtag). If the JTAG_DEV environmental variable
              is set, avarice will use that as the default instead.
              If avarice has been configured with libusb support, the JTAG ICE mkII  can  be  connected  through
              USB.   In that case, the string usb is used as the name of the device.  If there are multiple JTAG
              ICE mkII devices connected to the system through USB, this string may be followed by the (trailing
              part of the) ICE's serial number, delimited from the usb by a colon.
              The  AVR  Dragon,  JTAGICE3,  AtmelICE, and EDBG can only be connected through USB, so this option
              defaults to "usb" in that case.

       -k, --known-devices
              Print a list of known devices.

       -L, --write-lockbits <ll>
              Write lock bits. The lock byte data must be given  in  two  digit  hexidecimal  format  with  zero
              padding if needed.

       -l, --read-lockbits
              Read the lock bits from the target. The individual bits are also displayed with names.

       -P, --part <name>
              Target  device  name  (e.g.  atmega16).   Normally,  avarice  autodetects  the  device via JTAG or
              debugWIRE.  If this option is provided, it overrides the result from the autodetection.

       -p, --program
              Program the target. Binary filename must be specified  with  --file  option.     NOTE:  deprecated
              feature, must be enabled using the --enable-target-programming configuration option.

       -R, --reset-srst
              Apply  nSRST signal (external reset) when connecting.  This can override applications that set the
              JTD bit.

       -r, --read-fuses
              Read fuses bytes.

       -V, --version
              Print version information.

       -v, --verify
              Verify program in device against file specified with --file option.    NOTE:  deprecated  feature,
              must be enabled using the --enable-target-programming configuration option.

       -w, --debugwire
              Connect to JTAG ICE mkII, JTAGICE3, or AVR Dragon, talking debugWire protocol to the target.  This
              option implies the -2 option.  See the DEBUGWIRE section below.

       -W, --write-fuses <eehhll>
              Write fuses bytes. ee is the extended fuse byte, hh is the high fuse byte and ll is the  low  fuse
              byte.  The  fuse  byte  data  must  be  given in two digit hexidecimal format with zero padding if
              needed. All three bytes must currently be given.
              NOTE: Current, if the target device doesn't have an extended fuse byte (e.g.  the  atmega16),  the
              you should set ee==ll when writing the fuse bytes.

       -x, --xmega
              The  target  device  is an ATxmega part, using JTAG transport.  Since the ATxmega uses a different
              JTAG communication than other AVRs, the normal device autodetection based on the JTAG ID does  not
              work.   If  the  device has been explicitly selected through the -P option, it is not necessary to
              also specify the -x option.

       -X, --pdi
              The target device is an ATxmega part, using PDI transport.

       HOST_NAME defaults to 0.0.0.0 (listen on any interface) if not given.

       :PORT is required to put avarice into gdb server mode.

EXAMPLE USAGE

       avarice --erase --program --file test.bin --jtag /dev/ttyS0 :4242

       Program the file test.bin into the JTAG ICE (mkI) connected to /dev/ttyS0 after erasing the device,  then
       listen in GDB mode on the local port 4242.  This functionality is deprecated, and no longer configured by
       default.  Use GDB's "load" command instead.

       avarice --jtag usb:1234 --mkII :4242

       Connect to the JTAG ICE mkII attached to USB which serial number ends in 1234, and listen in GDB mode  on
       local port 4242.

DEBUGGING WITH AVARICE

       The JTAG ICE debugging environment has a few restrictions and changes:

       •   No  "soft"  breakpoints,  and  only  three  hardware  breakpoints.  The  break  command sets hardware
           breakpoints. The easiest way to deal with this restriction is to enable and  disable  breakpoints  as
           needed.

       •   Two 1-byte hardware watchpoints (but each hardware watchpoint takes away one hardware breakpoint). If
           you set a watchpoint on a variable which takes more than one byte, execution will be abysmally  slow.
           Instead it is better to do the following:

             watch *(char *)&myvariable

           which watches the least significant byte of myvariable.

       •   The  Atmel  AVR processors have a Harvard architecture (separate code and data buses). To distinguish
           data address 0 from code address 0, avr-gdb adds 0x800000 to all data addresses. Bear  this  in  mind
           when examining printed pointers, or when passing absolute addresses to gdb commands.

DEBUGWIRE

       The  debugWire  protocol  is  a  proprietary  protocol  introduced  by Atmel to allow debugging small AVR
       controllers that don't offer enough pins (and  enough  chip  resources)  to  implement  full  JTAG.   The
       communication takes place over the /RESET pin which needs to be turned into a debugWire connection pin by
       programming  the  DWEN  fuse  (debugWire  enable),  using  a  normal  programmer  connection   (in-system
       programming,   high-voltage   programming).   Note  that  by  enabling  this  fuse,  the  standard  reset
       functionality of that pin will be lost, so any in-system programming will cease to work as it requires  a
       functional /RESET pin.  Thus it should be made absolutely sure there is a way back, like a device (as the
       STK500, for example) that can handle high-voltage programming of the AVR.  Currently, avarice  offers  no
       option to turn off the DWEN fuse.  However, avrdude offers the option to turn it off either through high-
       voltage programming, or by using the JTAG ICE mkII to first turn the target into an ISP-compatible  mode,
       and then using normal ISP commands to change the fuse settings.
       Note  that  the  debugWire  environment is further limited, compared to JTAG.  It does not offer hardware
       breakpoints, so all breakpoints have to be implemented as software breakpoints by rewriting  flash  pages
       using  BREAK  instructions.   Some  memory  spaces  (fuse  and  lock bits) are not accessible through the
       debugWire protocol.

SEE ALSO

       gdb(1), avrdude(1), avr-gdb(1), insight(1), avr-insight(1), ice-gdb(1), ice-insight(1)

AUTHORS

       Avarice (up to version 1.5) was originally written by Scott Finneran with help from  Peter  Jansen.  They
       did  the  work of figuring out the jtagice communication protocol before Atmel released the spec (appnote
       AVR060).

       David Gay made major improvements bringing avarice up to 2.0.

       Joerg Wunsch reworked the code to abstract the JTAG  ICE  communication  from  the  remainder,  and  then
       extended  the  code  to  support  the  JTAG  ICE mkII protocol (see Atmel appnote AVR067), as well as the
       JTAGICE3 protocol.

                                                October 15, 2018                                      avarice(1)