JTAG adapter build by schematics originated by JTAG-ARM9 project and had to be pin-compatible Wiggler device from Macraigor Systems LLS.
Note: for some inexplainable reason, DLink DI604 router don't work properly when JTAG implements nTRST connection. If you face such problem - simply disconnect this pin.
Check FAQ for alternatives.
Using benefits of compatibility with a Wiggler, I used following free software from Macraigor Systems:
During GNU tools installation, files are placed in the following directories:
/usr/local/bin - binary GNU tools + LibRemote + OCDemon binaries
/usr/local/arm-elf/OCDemon-arm7-example - example source & Makefile
/usr/local/arm-elf/bin -
/usr/local/lib/gcc-lib/arm-elf/ -
windows/system - OCDemon support binaries
The arm-elf tools are added to /usr/local/bin each has "ARM-ELF-" added to the tool CAPITALISED name (ie ARM-ELF-GDB and ARM-ELF-GCC) to differentiate it from the x86 versions of the same commands.
Several example gdb.ini files are provided.See /usr/local/bin/readme.txt for more information on GDB JTAG-specific configuration and commands.
To read flash memory content, I used a very popular armtool from open source arm-boot project. Unfortunately, original pointer (http://kabel.home.at:5880/cgi-bin/viewcvs.cgi/arm-boot/) is not working any more.
A newest sources may be obtained from http://home.at/cgi-bin/viewcvs.cgi/midori/sources/armtool/ and we have fresh compile/usage instructions available.
To accommodate Wiggler compatible adapter, following definitions had to be made in jtag_io.c file (old version from arm-boot project, it is not needed to newer armtool):
#define MASK_TMS_BIT 0x02 //2 //0x04
#define MASK_TCK_BIT 0x04 //1 //0x02
#define MASK_TDI_BIT 0x08 //4 //0x01
#define MASK_RST_BIT 0x01 //8
#define MASK_TDO_BIT 0x80 //0x10
/* Polarity of signals */
#define INVERT_TMS 0 // 0
#define INVERT_TCK 0 // 0
#define INVERT_TDI 0 // 0
#define INVERT_RST 0
#define INVERT_TDO 1 // 1
In general, following definitions could be used to use Wiggler adapter with other open source JTAG software.
/*
* data D[7:0] (pins 9:2)
*/
#define TDI 3
#define TCK 2
#define TMS 1
#define TRST 0
/*
* 7 - BUSY (pin 11)
* 6 - ACK (pin 10)
* 5 - PE (pin 12)
* 4 - SEL (pin 13)
* 3 - ERROR (pin 15)
*/
#define TDO 7 //(inverted)
You'll need a level shifter like this one in case your board have a serial (3.3V) UART
Please note that this make a RS232C COM PORT, so you'll need a cross-over cable to connect it to a serial port i.e. on a PC (another approach would be crossover pins 2 & 3 and use a female DB9 connector)
Dissassembler is a must to have tool when you reverse engineering original firware or flash memeory image.
objdump -b binary -m arm7tdmi -D file_name
Precompiled GNU toolkit for ARM for CYGWIN environment could be downloaded from OpenWinCE project (see http://sourceforge.net/projects/openwince/ ).
Package arm-elf-3.0.4-2.cygwin.tar.bz2 include GCC with following parameters:
$ /usr/local/tools-3.0.4-2/bin/arm-elf-gcc.exe -v
Reading specs from /usr/local/tools-3.0.4-2/bin/../lib/gcc-lib/arm-elf/3.0.4/specs
Configured with: ../gcc-3.0.4/configure --target=arm-elf
--prefix=/devel/tools-3.0.4-2 --with-gnu-as --with-gnu-ld --enable-languages=c,c++
Thread model: single
gcc version 3.0.4
$ /usr/local/tools-3.0.4-2/bin/arm-elf-objdump.exe -i
BFD header file version 2.13
elf32-littlearm
(header little endian, data little endian)
arm
elf32-bigarm
(header big endian, data big endian)
arm
elf32-little
(header little endian, data little endian)
arm
elf32-big
(header big endian, data big endian)
arm
srec
(header endianness unknown, data endianness unknown)
arm
symbolsrec
(header endianness unknown, data endianness unknown)
arm
tekhex
(header endianness unknown, data endianness unknown)
arm
binary
(header endianness unknown, data endianness unknown)
arm
ihex
(header endianness unknown, data endianness unknown)
arm
elf32-littlearm elf32-bigarm elf32-little elf32-big srec
arm elf32-littlearm elf32-bigarm elf32-little elf32-big srec
symbolsrec tekhex binary ihex
arm symbolsrec tekhex binary ihex
Openwince JTAG instructions (Linux)
You can compile your own ARM cross-compile enviroment using the instructions here: Snapgear arm-elf-gcc build . You may download a precompiled binaries from Snapgear web site.
Oscilloscope for Windows is a Windows application that converts your PC into a powerful dual-trace oscilloscope. Oscilloscope uses your PC's sound card as an Analog-to-Digital Converter (ADC) to digitize any input waveform (speech, music, electric signal, etc.) and then presents it on the monitor in real time, allowing the user to control the display in the same way as on a conventional "standalone" scope, for example change gain, timebase or plot Lissajous patterns.