Supports Concurrent Access to CPU by Multiple Applications
J-Link allows multiple applications to access a CPU at the same time. This has numerous applications. For example: Utilities like Systemview, RTT-Viewer, embosView, J-Scope, can be run in parallel to the IDE.
Intelligence in the Emulator Firmware
For most emulators, the CPU communication handling is completely done from the PC side while the emulator simply outputs some PC-generated sequences. This makes special handling for scenarios like "low-power" and "very slow CPU speed at very high debug interface speed" almost impossible to handle.
In contrast to other emulators (low-end FTDI-based emulators as well as some "high-end" emulators), J-Link has intelligence for different CPU cores in the emulator firmware. Having an intelligent emulator firmware which is able to handle such cases itself, makes J-Link more robust in these situations.
Supports Multiple Target Interfaces
J-Link comes with support for multiple target interfaces. Currently, the following target interfaces are supported:
ARM7/9 devices only support the JTAG interface. With the introduction of the ARM Cortex devices, the SWD debug interface has been introduced and the number of devices supporting SWD is growing. SWD is a low-pin-count (actually 2 pins are needed) alternative debug interface to JTAG. FINE is a similar single wire interface introduced by Renesas. SPD is a single wire interface introduced by Infineon, ICSP a 2-wire JTAG interface introduced by Microchip.
Crossplatform Support (Runs on Windows, Linux and macOS)
The MAC and Linux versions are fully usable and contain the following components:
- J-Link Commander
- J-Link GDB Server (command line version)
- J-Link RTT Logger
- J-Link RTT Client
- J-Link Remote Server (command line version)
- J-Link Unlock STM32
- J-Flash SPI (command line version)
- J-Link JTAG Load
- Shared library (DLL-equivalent)
J-Link fully supports ARM's SWV/SWO feature which is available for most devices which support the SWD interface. SWO is a single pin output from the core which can be used to transfer terminal data (printf) as well as for data tracing (monitor variable read/write accesses).