Future of UrJTAG
UrJTAG is software which implements a common interface to utilize different JTAG adapters. The new code will use a stacked layout, so new adapters of varying complexity (LPT, USB, etc.) can be easily added. It can be used as a library, console tool or via TCP/IP.
Current work concentrates on reviving the proven openwince jtag tools. However, in parallel, I'm collecting ideas for the interfaces in the "stack". Some notes are written down on the Internals page. The communication protocol "URFP" is being worked on. I've created a subproject "UrJTAG library" to organize the tasks that'll lead to working code...
A problem with the current JTAG tools code is that it is licensed only under GPL. For widespread acceptance even in commercial devices (e.g. JTAG adapters, other applications), it must be allowed to use the library part without disclosing source code.
This problem can be approached from two perspectives, still utilizing the JTAG Tools code base. The key is the definition of a flexible interface between hardware and application layer.
- On the low level side, a separate "server" package could be created that provides low-level access to hardware (parport and cable drivers) and exports its functionality using the well-defined interface.
- For the application side, an "api" package could be created that implements access to the JTAG tools via TCP or local sockets, so that no actual linking against JTAG tools is done.
Both packages should be released using a more relaxed license, preferably the MIT License. The original JTAG tools can be extended with a cable driver to communicate with the "server" package, and on the other side a replacement for the jtag shell could turn the JTAG tools themselves into a server that could then be contacted over TCP/IP.
At least all features of UrJTAG 0.6 (post-openwince jtag tools) should be available in the future UrJTAG, even a compatible command line interface.
- Common API to access various JTAG adapters, from simple parallel port bit banging adapters to complex target specific intelligent devices.
- Should support at least the following "standard" devices:
- Bit-banging parallel port adapters
- Some parallel port adapters with deserializing logic such as MacRaigor Raven(?)
- Simple custom USB adapters such as Altera USB-Blaster and my usb_jtag
- Simple USB adapters built around FT2232 with JTAG api
- Complex USB adapters based on Cypress FX2 (e.g. Lattice HW-USB-2A, usb_jtag, Xilinx Platform Cable USB, Actel FlashPro3, FS2 System Navigator)
- Other complex USB adapters as far as documentation is available (e.g. AVR JTAG ICE)
- Ethernet adapters and remote JTAG daemons, as far as documentation is available (e.g. Xilinx Cable Server, Altera jtagd)
- Device driver "stack" with flexible interfacing between various layers of functionality.
- Ability to read and use BSDL files
- Interface to openwince jtag tools, OpenOCD and possibly further existing JTAG applications
- Interface to other programming languages, especially scripting languages like Perl, Python, ...
- TCP/IP listener that allows multiple connections, optionally with encryption and authentification. A locking mechanism should be there, but it should be possible for multiple clients to access the same chain (almost) concurrently (e.g. polling a JTAG UART and reading from memory at the same time).
- Could be able to emulate other existing adapters. Could itself run embedded in a cable (e.g. a Ethernet-JTAG-"cable")
- Maybe at some time even a GUI front end for boundary scan, firmware updates etc...
- Licensed so that it can be used in embedded device firmware without forcing the user to release all the firmware source code.
- Licensed so that vendors are encouraged to use it even for proprietary adapters and development environments. Maybe even allow binary modules?