I needed a JTAG programmer for an ARM7 project, so I checked the
web on possibilities. There are a lot of USB-based programmers to
choose from, but I opted to build my own parallel-port programmer
instead. Thanks to a well-stocked junk box, this project cost me
nothing but my time.
I started with a design that I found on the web here (Eagle schematic):
I modified this schematic to use a 74AHC125 quad-buffer. This
chip has a single buffer-enable pin that lets me tristate all outputs
on demand, effectively removing the JTAG programmer from the circuit
without having to disconnect it physically. Here is my modified
schematic as a PDF
. Note that the
connections to the PC printer port assumes a 26-pin ribbon
connector. If you are wiring directly to a DB-25 connector, use
the pin numbers shown in parentheses instead.
The JTAG programmer connects to the target board using a standard
20-pin ribbon connector. This connector is standard on boards
such as the Olimex SAM7-H256, which I use. If you need to use a
10-pin JTAG connector, check the web for details on the wiring for that
connector; you will need to route the signals on my connector to the
corresponding pins on the 10-pin connector.
I wired the circuit onto a small Radio Shack prototyping board, then
mounted the board into an empty Altoids box; see the photo below.
Based on info I found on the web, you should probably keep the ribbon
cable between the adapter and the target board to less than ten
inches. I haven't had any problems during downloads, but others
report download problems if the cable is too long.
Next up, I needed software that could push my ARM7 object code into the
target using my JTAG adapter. I chose to use the H-JTAG suite of
tools, available here:
Installing the tools will generate several icons on your desktop.
After downloading and installing the tools, connect power to your
adapter and connect the adapter to your PC. Double-click the
H-JTAG icon (large H), which starts the H-JTAG server; this server must
be active before any of the other H-JTAG tools you use will work.
The H-JTAG server will automatically try to connect to your
target. If the connection succeeds, you will see a window
identifying the target MCU detected. In my case, the target shows
up as ARM7DTMI.
In the server window, click Settings
and select LPT Jtag Setting
This opens a window allowing you to customize the H-JTAG software for
your specific programmer. Refer to the image below for the
settings I used.
Click OK to save these settings.
Now double-click the H-JTAG flasher icon (large F) to start the flasher
utility. Click the Flash
item in the Programming Wizard column and make sure
the correct device is selected; in my case, it's AT91SAM7S256 under the
AT91SAM device group. Click the Programming
item in the Programming Wizard column to access the programming
tools. If you click the Reset button, the tool will try to reset
the target by toggling the nTRST line. This is a quick check to
make sure your adapter is properly wired to the target.
Finally, you can modify the settings in the Programming item to control
what kind of object file you send to the target and where the tool
should look to find that object file.
Note that I have not used this adapter for debugging, only for code
loads. Theoretically, this adapter should work with any
customizeable GDB JTAG debugger, but I cannot confirm this. If
you use this or a similar parallel programmer for GDB debugging, please
drop me an email with details.