Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
avarice(1)		     General Commands Manual		      avarice(1)

NAME
     avarice  - Provides an interface from avr-gdb to Atmel's AVR in-circuit de-
     bugging 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 pro-
     grams 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 per-
	   formed 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  con-
     tained 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 lib-
	    hidapi 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 pro-
	    gram. (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,tar-
	    get_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 us-
	    ing 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 fol-
	    lowed 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  hex-
	    idecimal 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 --en-
	    able-target-programming configuration option.

     -R, --reset-srst
	    Apply nSRST signal (external reset) when connecting.  This can over-
	    ride 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. In-
	 stead 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 al-
     low  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 connec-
     tion  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 re-
     quires 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 us-
     ing 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  im-
     plemented	as software breakpoints by rewriting flash pages using BREAK in-
     structions.  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 com-
     munication 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 pro-
     tocol (see Atmel appnote AVR067), as well as the JTAGICE3 protocol.

				October 15, 2018		      avarice(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=avarice&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>

home | help