If you're new to JTAG, I recommend the JTAG FAQ to start.
Wiggler is a simple JTAG adapter for the PC parallel port, which became a de-facto standard. It is available from Macraigor Systems LLC.
The schematic of a Wiggler compatible circuit is available here.
A device driver such as giveio.sys is required to access the Wiggler compatible JTAG adapter on a Windows NT/2000 system. The driver is available free of charge from Dr. Dobb's Journal and many other places.
This JTAG programmer is based on an AVR ATmega8 chip and connects to the PC serial port. It had been developed for the Ethernut Boards, an embedded hardware platform for AVR and ARM7 CPUs.
Louis Beaudoin kindly permitted us to publish the
Schematics of the Turtelizer Hardware. The circuit is quite
simple, using an ATmega8L CPU, an RS232 level shifter and an
LED. By default, the following port bits are used for the JTAG
interface.
Signal | Port Bit |
---|---|
Reset | PORTC Bit 5 |
TCK | PORTC Bit 1 |
TMS | PORTC Bit 2 |
TDO | PINC Bit 3 |
TDI | PORTC Bit 0 |
The firmware for the Turtelizer is distributed with the JTAG-O-MAT
package, located in subdirectory adapter/turtelizer/firmware
.
To compile the code on Linux, you need to install the AVR GCC toolchain before
configuring and installing the JTAG-O-MAT source package.
On Windows you will find pre-compiled binaries in the bin directory.
To re-build them, change to the firmware directory, make sure that
the WinAVR directories are included in the PATH environment and
enter
$ make -f Makefile.avr-gcc clean $ make -f Makefile.avr-gcc
In order to easily upgrade (or downgrade) the firmware, a simple
boot loader is available, which allows to upload new firmware
using the JTAG-O-MAT utility. The source code of the bootloader
is located in the subdirectory adapter/turtelizer/boot
.
Like with the firmware, the AVR GCC toolchain is required to compile
the code.
The Turtelizer firmware uses a simple STX/ETX protocol with a longitudinal parity byte to communicate with JTAG-O-MAT running on the PC. The layout of a command telegram from the PC to the Turtelizer is as follows.
<STX> <Cmd Byte> <Cmd Param> <ETX> <LRC>The number of bytes used for the command parameters is optional and may be zero. The Turtelizer will respond with
<ACK>if the command had been received without error or
<NAK>otherwise. In the latter case JTAG-O-MAT will repeat the transmission of the command telegram up to three times before giving up.
The Turtelizer will then process the command and return a response telegram, which optionally contains one or more result values.
<STX> <Error Byte> <Result Values> <ETX> <LRC>JTAG-O-MAT will answer with
<ACK>if the response telegram had been received without error or
<NAK>otherwise.
If an <STX>, <ETX>, <ACK>, <NAK> or <DLE> character appears in the telegram data, then a <DLE> will be prepended.
At the time of this writing, Turtelizer is at version 1.2 and understands the following commands.
Command | Parameters | Result Value | Description |
---|---|---|---|
O | FW Version (4) | Open JTAG, activates the JTAG signals. | |
C | Close JTAG, deactivates the JTAG signals. | ||
Z | Resets the target. | ||
E | Enter debug mode. Will stop the target CPU. | ||
X | Exit debug mode. The CPU will continue with the current register settings. | ||
I | ID Code (4) | Return target's JTAG identifier. | |
r | Register (1) | Value (4) | Read specified register. |
w | Register (1) Value (4) |
Write value to specified register. | |
R | Address (4) | Value (4) | Read memory location. |
W | Address (4) Value (4) |
Write memory location. | |
M | Address (4) 1. Value (4) .. n-th Value (4) |
Write multiple memory locations. Currently n is fixed to 12. | |
i | Value (4) | Read comm data. | |
o | Value (4) | Write comm data. | |
0 | Start firmware update. This will invoke the bootloader. | ||
1 | Address (4) | Erase firmware. Processed by the bootloader. | |
2 | Address (4) Data... |
Write firmware. Processed by the bootloader. | |
3 | Address (4) | Length (4) Data... |
Read firmware. Processed by the bootloader. |
4 | End firmware update. Exits the bootloader and jumps back to the fimrware. |