JTAG Boundary Scan Test Systems (IEEE 1149.1)

XJAPI Software & Hardware Interface

The XJAPI is a simple-to-use DLL Application Program Interface (API), designed to give you low-level access to the JTAG chain via either the XJLink or the PXI hardware, allowing easy integration with a wide range of other systems such as development/evaluation boards, test systems...

The USB to JTAG hardware and software interface is composed of a high-speed USB to JTAG hardware module (XJLink/XJLink2) and the XJAPI, allowing you to access and control the JTAG chain directly.

The PXI to JTAG hardware and software interface is composed of a high speed PXI to JTAG hardware module and the XJAPI.

We can develop bespoke end user applications using the XJAPI to meet your requirements.

Get the XJAPI datasheet  PDF  |  View all datasheets

Arrange Demo   Evaluate   Get further info

Key Benefits

  • Faster communication / download USB (480 Mbps), JTAG (60 Mbps peak)
  • USB to JTAG: Small, lightweight, portable hardware design — ideal for lab and field work
  • PXI to JTAG form factor also available: fully software compatible with the USB to JTAG version (3U/32 bit PXI/c PCI bus interface)
  • Self-contained licence allowing you to use the XJTAG system on multiple machines
  • Can be used with any pinout, ARM, Xilinx, Altera, etc.
  • Easily customisable


  • JTAG/IEEE 1149.x compliant
  • High speed USB 2.0 interface (480 Mbps), backwards compatible with USB 1.0 & 1.1
  • USB bus-powered (no external PSU)
  • Can supply power to the target board (3.3V, <100 mA)
  • TCK clock frequencies up to 60 MHz
  • Adjustable JTAG signal termination
  • Automatic signal skew control
  • Software configurable pin mapping
  • JTAG signals are +5V tolerant
  • Spare signals on JTAG connector can be used to control other items, e.g. hold a board in reset / turn on a PSU
  • Provided with all needed files, libraries and an application example
  • Designed to be used in C or C++ applications
  • XJDemo board available
  • Runs on Windows 8 / 7 / XP / Vista

XJAPI functions

  1. Initialise, set up and terminate the API.
  2. Low level functions to set up JTAG scans, perform low level JTAG accesses.
  3. High level JTAG functionality.

The full C header file is available for download: XJAPI.h

The following is a summary of the functions:

Initialising / Terminating Functions

Function to set up the hardware and the pin mapping. Specify the desired frequency in Hertz (XJAPI will set to the nearest MHz), the required pin mapping and whether the power should be applied to the board.

XJAPI_HardwareSetup( frequency, pinMap, powerOn );

Function to release the hardware. Must be called before exiting.

XJAPI_HardwareRelease( );

Function to set the pin map - This function takes a parameter which is an array of 20 elements, corresponding to the 20 pins. Each value i should be the type of pin i+1, with the exception of the fixed pins:

  • pin 1 - VCC
  • pin 2 - NC
  • pin 4 - GND
  • pin 20 - GND

N.B. The array starts at 0 but the pins at 1, so the setting for pin 10 would be written in array[9].

XJAPI_SetPinMap( pinMapping, pinTypes[20], powerOn );

Low Level JTAG Access

Function to set the frequency - must be between 100 KHz and 60 MHz.

XJAPI_SetFrequency( frequency );

Function to apply TMS reset.

XJAPI_TmsReset( );

Function to go to a specific JTAG state.

XJAPI_GotoState( state );

Function to set the final state that the system goes to after a DR or IR scan operation. By default, both scans go to the JTAG_IDLE state.

XJAPI_SetEndState( endir, enddr );

Function to clock the JTAG chain a specific number of times.

XJAPI_ClockChain( count );

High Level Scan Functions

Function to execute a JTAG DR/IR scan cycle. By default, it will leave the system in the JTAG_IDLE state after the scan. To specify a different end state, use XJAPI_SetEndState.

The type of scan (DR or IR) is specified, the number of bits to scan, and the addresses of data buffers: "outData" is the data to be shifted out, bit 0 of byte 0 first; "inData" is the data shifted in, bit 0 of byte 0 first.

XJAPI_Scan( scanType, length, outData, inData );

Function to implement multiple scanning. This function is used to scan multiple (nScans) chains of mixed type (DR and IR scans) and of mixed length.

N.B. "scanTypes", "length", "outData" and "inData" are all arrays of length "nScans".

XJAPI_ScanMultiple( nScans, scanTypes, length, outData, inData );

For support, or for a quote on any part of the XJTAG system, please contact us.