XJAPI Software & Hardware Interface

XJAPI JTAG Boundary Scan APIThe 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 JTAG controller (XJLink2 or XJLink) 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 JTAG controller and the XJAPI.

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

Full Product Sheet  Get further info Evaluate

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
  • Demo board available
  • Runs on Windows® 10 / 8.1 / 8 / 7

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.

Ready to get started? Try XJTAG


See XJTAG in action.

Our experts will be happy to show you how the XJTAG tools can help you diagnose faults on your board as well as cutting test development and repair time.

Ask for a Demo

contact us icon

Questions? Contact us!

We're here to help.
Send us a message and one of our test specialists will get back to you shortly.

Contact us


Get a free test setup.

Evaluate the XJTAG system with full functionality for 30 days and get the first test project set up for your board – for free. No obligation to purchase.

Get started now

Join world leading companies using XJTAG Boundary Scan