Mizar32/JTAG

= Introduction =

JTAG is a technology that allows you to debug digital hardware by reaching inside the chip on a board while they are running to read and change their contents.

You can use it to erase and reprogram the whole of the AVR32UC3A's flash memory, including the USB DFU boot loader that lives in the first 8KB.

While the AVR32 is running, you can use it to stop the program, examine the contents of CPU registers and memory, and set the program running again, as well as setting hardware breakpoint and more.

= Hardware view =

Every Mizar32 main board has a 10-pin JTAG connector. To use it you will need an external JTAG emulator such as Atmel's AVR32 JTAG ICE MKII.

= Software view =

To talk to the Mizar32 via a JTAG converter, you will also need to install some programs.

Atmel now only support JTAG if you use their graphical development environment AVR32 Studio 6.

The command-line tools,  and/or , are now hard to find.

Finding them
The ancient Atmel AVR32 GNU Toolchain version 2.4.2 contains some extra tools that were left out of the later releases. They no longer publicise it but you may still be able to download it from:
 * Debian packages for Ubuntu 9.10 (64-bit) / 9.10 / 9.04 / 8.04
 * RPMs for Suse Core 11.1 / 11.0
 * RPMs for RedHat Enterprice 5
 * RPMs for Fedora Core 12 (64-bit) / 12 / 11 / 10

Installing avr32program on Debian/Ubuntu
To be able to use a JTAG programming device, you need to install the  command. It used to be included in Atmel GNU Toolchain up to version 2.4.2 but for some reason it is omitted from later versions. Here, we show how to install it on a modern 32-bit version of Debian or Ubuntu from the Atmel's Ubuntu 9.04 bundle:

mkdir tmp; cd tmp wget http://www.atmel.com/Images/avr32_gnu_toolchain_2.4.2_ubuntu_904.zip unzip avr32_gnu_toolchain_2.4.2_ubuntu_904.zip

This creates fifteen  package files, most of which are not useful. Install the necessary packages:

sudo dpkg -i avr32program* libavr32ocd* avr32parts* libavrtools*

and if that complains about

dpkg: dependency problems prevent configuration of libavrtools: libavrtools depends on libboost-filesystem1.34.1 (>= 1.34.1-8); however: Package libboost-filesystem1.34.1 is not installed. libavrtools depends on libboost-thread1.34.1 (>= 1.34.1-8); however: Package libboost-thread1.34.1 is not installed. ... avr32program depends on libavr32ocd (>= 4.1.0); however: Package libavr32ocd is not configured yet.

fetch and install the ancient libraries it requires:

wget http://archive.debian.org/debian/pool/main/b/boost/libboost-filesystem1.34.1_1.34.1-14_i386.deb wget http://archive.debian.org/debian/pool/main/b/boost/libboost-thread1.34.1_1.34.1-14_i386.deb wget http://archive.debian.org/debian/pool/main/x/xerces-c2/libxerces-c28_2.8.0-3+lenny1_i386.deb wget http://archive.debian.org/debian/pool/main/i/icu/libicu38_3.8.1-3+lenny3_i386.deb sudo dpkg -i libboost* libxerxes* libicu*

and complete the installation:

apt-get -f install

Atmel's packages for Ubuntu 9.10 contain the same software as the ones for 9.04 but depend on obsolete library versions that are even more difficult to find.

If you have a 64-bit installation of Ubuntu, your life is even more difficult because: This leaves you two options Good luck! Let me know how it turns out...
 * Atmel only distributed 64-bit versions of their software for Ubuntu 9.10
 * and  require you to install
 * Debian never shipped libboost-1.38 and Ubuntu's boost1.38 archive is mysteriously empty
 * find the boost-1.38 packages that the programs require
 * install the 32-bit packages from 9.04 and the 32-bit versions of all the libraries that they require

Installing avr32gdbproxy on Debian/Ubuntu
Another program,  can be used with an AVR32 JTAGICE Mk.II JTAG programming device to debug C code running on the board. It needs similar magic as :

dpkg -k avr32gdbproxy* libavr32sim* libelfdwarfparser*

and, if it complains about  and   being missing, go

wget http://archive.debian.org/debian/pool/main/b/boost/libboost-date-time1.34.1_1.34.1-14_i386.deb wget http://archive.debian.org/debian/pool/main/m/mpfr/libmpfr1ldbl_2.3.1.dfsg.1-2_i386.deb dpkg -i libboost-date-time*.deb libmpfr*.deb

and finally

apt-get -f install

which should fetch and install  if it wasn't already installed.

Programming the firmware using avr32program
These days we usually use the USB DFU bootloader to reprogram the Mizar32. The last SimpleMachines firmware release to include JTAG programming commands and binaries was Mizar32 firmware release 20110320 for the 128K model but you can reuse that release's scripts and files with the eLua binaries from more recent ones.

The sequence of commands to erase and reprogram the whole device is fairly complicated, so download the above release and check

You will need to connect an AVR32 JTAG ICE MKII programmer to your PC with its USB interface and to the Mizar32 via the 10-pin JTAG interface. Apply power to both.

Install the  program (see above) then fetch and program the firmware:

wget http://mizar32.googlecode.com/files/mizar32-firmware-20110320.tgz tar xfz mizar32-firmware-20110320.tgz cd mizar32-firmware-20110320 sh program-mizar32-jtag.sh

This will reprogram the entire contents of the flash memory: the USB DFU boot loader, the ISP configuration word, the general-purpose fuse bits and the eLua interpreter. It will then start the board running.

Debugging eLua with avr32gdbproxy
You will need: and with everything connected up, turned on and running, say on the PC:
 * , as included in Atmel's GNU Toolchain releases
 * - see above
 * An  on the your PC, the same one that you programmed to the Mizar32
 * A JTAG programmer device (USB-to-JTAG converter)

$ avr32gdbproxy &   # Start the proxy daemon, listening on port 4711 $ avr32-gdb *.elf   # Whichever .elf file you programmed to the Mizar32 gdb> target extended-remote localhost:4711 gdb> run

Good luck!

= Further Reading =
 * Boundary Scan Tutorial 2007 from ASSET InterTech
 * The chapter on Flashing Firmware for other ways to reprogram the flash memory