XJDirect — Programming on-chip flash in your processor

XJDirect is an advanced and innovative method for programming the internal flash of your processor and implementing some aspects of board test through JTAG when traditional boundary scan techniques cannot be used.

In most circumstances XJTAG can be used to create systems offering excellent test coverage using JTAG boundary scan, as described in the IEEE standard 1149.x. There are, however, some situations where boundary scan cannot provide all of the functionality required, in these situations XJDirect allows you to use JTAG to go beyond boundary scan.

Contact us now

  • Full speed testing
  • On-chip flash programming
  • High-speed flash programming
  • Internal ASIC testing

Main situations where XJDirect may be required:

  • Testing interfaces at their functional speeds.
  • High-speed programming of internal/external flash memory.
  • Testing interfaces where there is no or insufficient boundary scan access.

These situations are addressed using three subtly different aspects of XJDirect:

  • Processor Emulated Test
  • Processor Emulated Programming
  • Processor Accelerated Programming

Processor Emulated Test (PET)

PET can be used when an interface needs to be operated at its functional speed, or there is insufficient boundary scan access to a device.

Some examples of where PET might be used are:

  1. A processor has a DRAM interface but the clock cannot be accessed using boundary scan.
    The internal registers of the processor are accessed to configure the interface to the DRAM and the interface is tested by issuing reads and writes from the processor.
  2. A processor has a 1-wire interface which is accessible from boundary scan but the timing requirements are such that the interface cannot be tested using boundary scan. The internal registers of the processor are accessed to configure the 1-wire interface and the processor interface is used to read and write using the 1-wire interface.
  3. A processor has a pin which can be configured either in analogue or a digital mode. Boundary scan uses the pin in digital mode but the interface needs to be tested in analogue mode. Using the processor’s internal registers, the pin is configured in analogue mode and then, again using the processor’s internal registers, an analogue value can be read and checked.
  4. A processor has a DDR interface which needs to be exercised at speeds greater than can be achieved using boundary scan. The processor’s internal DDR controller is configured and the interface is tested using high speed read and writes which are issued through the processor.
  5. The pull-ups and pull-downs of the processor’s I/O pins have to be enabled for the connection test to run correctly. The pins are configured by accessing the internal registers of the processor.

Processor Emulated Programming (PEP)

PEP is used to program both flash internal to a processor and externally connected as a peripheral.

  1. Programming internal flash
    In a very similar way to the PET solutions above, the internal registers of the device are accessed and the flash erased, programmed and verified.
  2. Programming external flash
    Whilst it may be possible to program external flash using boundary scan, the serial nature of boundary scan can make this time-consuming particularly if the external device is itself a serial device. By accessing the internal registers of a processor, the external peripheral interface can be configured and then used to access the external flash. The external flash can then be programmed and verified at speeds that cannot be achieved using boundary scan.

Processor Accelerated Programming (PAP)

In most cases PET and PEP will give very acceptable performance. However in some cases it is desirable to achieve even faster performance.

Many processors provide mechanisms for communicating with executing code using the JTAG interface. Many also provide very efficient mechanisms for reading and writing memory using the JTAG interface. XJDirect can utilise these facilities to provide very efficient flash programming. XJDirect configures the processor with a temporary application image – effectively turning it into a dedicated flash programmer.  The efficient mechanisms provided by the processor are then used to transfer the programming data to the processor thereby dramatically improving the programming speed.


Listed below are some of the devices that XJDirect can handle. This list is being updated regularly, if your device is not listed please contact XJTAG as it may have been added more recently.

  • Altera – Cyclone V
  • Ambarella – A288S, S2
  • ARM – ARM7, ARM9, ARM11, Cortex Ax, Cortex Mx
  • Cypress – PSoC4
  • Infineon – TC1798 (TriCore), XMC4500, TC29x(TriCore)
  • Microchip (ATMEL) – AT91, MEGA, XMEGA, UC3, SAM3U, ATSAME70/S70/V70/V71, PIC16LF1936, PIC12F609, PIC32MX
  • MicroVision – MV6410
  • Nordic Semiconductor – nRF52832
  • NXP (Freescale) – Kinetis MK66, MKE06, MK24, MK10, MKL02, MK64, MKE02, MK60, MK22, MKW21, iMX6, iMX8 , iMX25, Vybrid VF3xxR, Vybrid VF5xxR
  • NXP – LPC17xx, LPC18xx, LPC43xx, LPC24xx, LPC15xx, LP17xx, LPC408x/7x, MC56F8346
  • OKI – ML674001, ML675001
  • Renesas – RZ/A1H, RZ/A1M
  • Samsung – S3C2440
  • STMicroelectronics – STM32F0, STM32F1, STM32F2, STM32F3, STM32F4, STM32H7, STM32L1, STM32L4, STR71x, SPEAr1300
  • TI – TMS570, AM335x, AM3703, AM/DM37xx, RM48, AM1808, AM1810, AM5729, DRA7xx (Jacinto) , MSP430, OMAP35xx, OMAP543x, Stellaris LM3S2948, TMS320F2803x, TMS320F2812, TMS320DM814x(DaVinci), TM4C129x(Tiva)
  • Xilinx – Zynq, Zynq Ultrascale, Zynq Ultrascale+

Frequently asked questions


How can XJDirect be many times faster than programming with conventional boundary scan?

With conventional boundary scan each signal change requires one complete test vector to be scanned through the JTAG chain. The debug facilities of most processor provide efficient ways of reading and writing memory using the JTAG interface. XJDirect uses these facilities to send the programming data to the processor and the processor itself then programs the flash.

I use a fast flash programmer already, why should I consider using XJDirect?

Using XJDirect means it is possible to use a single JTAG tool to boundary scan test the board and program it in one step, making it faster than swapping between tools on the production line. Furthermore, using in-system programming removes the need to pre-program flash devices, allowing the latest flash image to always be used and allowing the same tools to be used during development, production, and repair.

Technical questions

What flash devices are supported?

XJDirect supports a wide range of NAND and NOR devices both parallel and serial.

What if I want to program a type of device that's not listed?

The range of devices programmable using XJDirect is continuing to grow, so if you want to program a device that is not currently listed then let us know.

What processors are supported?

XJDirect has already been used on a wide range of devices but any device which has a documented debug interface can be used.

Can I use XJDirect on boards I’ve already designed?

Yes. Provided the JTAG port and other debug related pins have been brought to a header on the board, the flash can be programmed.

My flash is not connected directly to the processor on my board, might I still be able to use XJDirect?

Yes. Provided the processor can access the flash, the flash can be programmed.

Can I simultaneously program multiple PCBs, each with their own flash devices?

Yes – because XJDirect can be added to a sequence of production tests, concurrent programming can be implemented in exactly the same way as concurrent boundary scan testing.

Can I use XJDirect both in high-volume and low-volume/high-mix production situations?

Yes – because XJDirect can be incorporated in your production tests and it uses the processor built on to the board, there are very few time overheads and no hardware modifications required when switching between different board designs.

Do you support fast Flash programming attached to FPGAs?

Yes – please check out XJFlash for more details.

Can I program the internal flash of my processor using XJDirect?

Yes – XJDirect can be adapted to program the internal flash of a wide range of processors, as long as the relevant information (normally contained in the reference manual for the device) is available.


Does XJDirect cost extra?

Due to the wide range of processors and the requirement to configure them differently for each application there may be a small extra charge to configure XJDirect for your application. Please contact us for a quote.

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