J-Link debug probes are the most popular choice for optimizing the debugging and flash programming experience. Benefit from record-breaking flashloaders, up to 3 MiB/s RAM download speed and the ability to set an unlimited number of breakpoints in the flash memory of MCUs.
J-Link also supports a wide range of CPUs and architectures. Everything from single 8051 to mass market Cortex-M to high-end cores like Cortex-A (32- & 64-bit).
J-Link supports directly interfacing SPI flashes, without the need of a CPU between J-Link and the SPI flash (directly communicating via the SPI protocol). J-Link is further supported by all major IDEs, from free Eclipse based ones (directly or via GDB) up to commercial ones, including SEGGER Embedded Studio. See a complete list of supported IDEs here, a complete list of supported devices here and a list of SPI Flashes here.
J-Link makes Flash memory feel almost like RAM. Since it comes with a set of speed-optimized, built-in flashloaders it can easily and quickly be downloaded into flash memory. Take a look below to find out more information.
The J-Link Software and Documentation Package available for download includes a significant number of tools that make a developer's job easier and extend the capabilities of J-Link. Almost all J-Link tools have cross platform support and run on Windows, Linux and macOS.
Ozone is a full-featured graphical debugger for embedded systems – and so much more. Thanks to features such as trace, code profiling and code coverage analysis, it is also an extremely powerful performance analyzer. Ozone allows for the debugging of any embedded application on C/C++ source and assembly level, load applications built with any toolchain/IDE or even debug the target’s resident application without any source.
Ozone includes all well-known debug controls and information windows, making use of the best performance of J-Link and J-Trace debug probes. The user interface is highly intuitive, yet fully configurable. Each window can be moved, re-sized and docked to fit every developer’s needs.
SystemView ensures that systems perform as they are designed. It is a real-time recording and visualization tool for embedded systems, revealing the true runtime behavior of an application. In fact, it even goes far deeper than system insights provided by standard debuggers.
And that’s exactly what is needed when working with complex embedded systems. SystemView tracks down inefficiencies, shows unintended interactions and resource conflicts: all with a focus on the details of every single system click.
Embedded Studio is a complete, all-in-one solution for managing, building, testing, and deploying embedded applications. It is the best solution for embedded C programming: with a Visual Studio-like appearance, embedded engineers get the same intuitive usage PC developers enjoy.
With Embedded Studio, developers get a powerful project generator for an easy start with common microcontrollers. Included is also a project manager, a source code editor, C/C++ compiler and integrated debugger.
No matter the use case, the SEGGER J-Link product family has a device for each and everyone. Take a look at the models below. For more information (such as feature comparison), go to the J-Link model overview.
J-Link PLUS Compact
J-Link BASE Compact
J-Link EDU Mini
J-Link doesn’t just support SEGGER’s own software. It also supports a host of 3rd party software which aids embedded system development. To find out more, have a look at the overview of supported IDEs and the 3rd party applications.
J-Link can be used with GDB based setups. The GNU Debugger (GBD) is the de facto debugger for development on Linux systems. However, it has now found its way into embedded development (even without Linux running on the target system). GDB provides a standardized interface / API that can be used by an IDE.
It also specifies a standardized protocol (GDB remote protocol) which allows GDB to communicate with a GDBServer which knows how to handle the debug probe connected to the target. The J-Link software package comes with the J-Link GDBServer which allows using J-Link in GDB based setups.
J-Link can be used with LLDB. Originally, GNU toolchains provided GCC as a compiler and GDB as a debugger. Since Clang’s introduction as a compiler, LLDB was introduced (which was essentially a GDB successor). In terms of protocol, it is backward compatible to GDB whilst the API for the IDE is slightly different.
J-Link can be used with OpenOCD (Open On-Chip Debugger).
OpenOCD is an open-source software that can interface basically any debug probe. It provides a standardized API, allowing an IDE to support OpenOCD. There are several tutorials on the internet that describe how to use J-Link with OpenOCD.
Note: OpenOCD is a 3rd party software, so SEGGER cannot provide any guarantees etc. Using J-Link with OpenOCD bypasses all J-Link specific features like flash programming, unlimited flash breakpoints and the J-Link high debugging speed. OpenOCD will handle J-Link as a simple sequence generator which will affect debug performance. Please also note that using J-Link with OpenOCD is not covered by the standard J-Link support. Support for OpenOCD is provided by the OpenOCD community.
No more guessing! The J-Link Control Panel provides full transparency about J-Link’s current activities. The Control Panel is available on all platforms (Windows, Linux, macOS). No additional utility for installation required. It is available through a standard web browser.
Consider the following scenario: An IDE has been chosen and the developer has started working with it. Then, a new and useful feature is introduced to the J-Link software, but the IDE itself hasn’t adopted it yet. Perhaps even worse, the IDE cannot be updated due to certification reasons. This is where the J-Link control panel provides the opportunity to make use of new J-Link features; without even touching the IDE itself.
J-Link's software provides for a more efficient programming experience. Find out how easy it can be by taking a look at the video demonstrations below.
SEGGER J-Link Flash Breakpoint Introduction
SEGGER J-Flash Introduction
Ultra high speed flash programming
So, it’s time to get started: To use J-Link for the first time, install the J-Link related software and documentation pack. Among other things, the pack includes J-Flash software and connects J-Link to the host PC via USB.
Connecting to the target system: Make sure J-Link is powered on before you connect it to the target device. To power it on, connect J-Link to the host system via USB. Next, connect it with the target device. Switch on the device after connecting J-Link to it.
Using J-Link PRO with Ethernet? Just power it on with an external power supply.
If the USB driver is working properly and your J-Link is connected with the host system, you can connect J-Link to your target hardware. Now start the J-Link command line tool Jlink.exe. This should display the normal J-Link related information. Next, type “connect” and specify your target and the target interface. It will report a J-Link connected to an STM32F205 along with the related information.
Start using J-Link with your favorite toolchain: To connect your J-Link with your development project, please consult the guide for your favourite tool-chain.
J-Link comes with built-in virtual COM port (VCOM) functionality. This means that in addition to the regular J-Link debug functionality, J-Link will also show up as a COM port in the device manager of the operating system.
Most modern computers don’t have a physical COM port anymore. However, many hardware setups still use UARTs for logging, diagnostics and application control. That’s why a separate COM to USB adapter is needed to get full COM functionality of the target hardware, while debugging at the same time.
With J-Link, there’s no need for an additional adapter since J-Link already provides this adaption functionality.
The J-Link VCOM functionality is implemented via SEGGER emUSB-Device, using the CDC-ACM class.
For more information, please refer to the emUSB-Device pages.
J-Link models are shipped with VCOM functionality disabled. It can be enabled via the J-Link Configurator utility. For more information about how to enable VCOM on a J-Link, please refer to the J-Link user guide.
The following pins on the stadard 20-pin 0.1" connector on J-Link are used for VCOM functionality:
- 5: J-Link Tx
- 17: J-Link Rx
- VCOM functionality is not available for the J-Link EDU Mini model
- VCOM functionality is not available when using the traditional 4-wire JTAG interface for target communication, as Pin 5 is needed as TDI for this interface
What is the advantage of J-Link versus simple probes such as FTDI-based systems?
A: J-Link has numerous advantages: the actual J-Link software supplied by SEGGER (which enables use with common IDEs), the availability of unlimited flash breakpoints for the debugging of software which runs in the flash of microcontrollers, it’s high speed and it’s simple, fast download into flash memory.
In contrast to most simple probes, J-Link supports adaptive clocking as well as SWD and SWO. It also functions more stably, since it is not just a dump USB to JTAG converter. Instead, it uses the intelligence of the built-in CPU which provides more robust communication. This is especially so in situations where the target CPU runs at low clock speeds.
Can I write my own application with J-Link?
A: Yes. We offer a dedicated Software Developer Kit (SDK). This enables the use of full J-Link functionality. Find out more about SDKs here.
The core of my target system could not be recognized automatically. Is there a way to configure my device in order to communicate with J-Link?
A: Yes! In most cases, J-Link autodetection works fine and recognizes the core of a device automatically. In some cases however, J-Link’s auto-detection may not work (i.e., if the core is not present in the JTAG chain by default and needs to be enabled by sending a command to another device in the JTAG-chain). In these cases, the connection sequence of J-Link can be customized by using a J-Link script file which is executed before the communication between J-Link and the target system starts. The script file allows maximum flexibility, so almost any target initialization that is necessary can be supported.
What is adaptive clocking and when and why would I use it?
A: If the target provides the RTCK signal, select the adaptive clocking function to synchronize the JTAG clock (TCK) to the processor clock outside the core. This ensures there are no synchronization problems over the JTAG interface. If you use the adaptive clocking feature, transmission delays, gate delays, and synchronization requirements result in a lower maximum clock frequency than with nonadaptive clocking. This is the recommended JTAG speed used to connect to ARM7/9 -S cores.
I have multiple ARM cores in my JTAG chain. How can I debug them (simultaneously) with J-Link?
A: Simple: Two or more debuggers can use the same J-Link simultaneously. Multi-core debugging requires multiple debuggers or multiple instances of the same debugger. You need to tell your debugger which device in the scan chain you want to debug. Additional special settings are not required.
May I work with more than one J-Link at the same time, on the same machine?
A: Yes, you can connect an unlimited number of J-Links to your PC. No special configuration required; each J-Link is registered with its unique serial number on the PC. This enables you to have multiple J-Links connected at once.
Which CPUs are supported by J-Link?
A: J-Link works with ARM7/9/11, Cortex-A5/A8/A9, Cortex-M0/M0+/M1/M3/M4/M7, Cortex-R4/R5, Microchip PIC32 and Renesas RX100/RX200/RX600 series CPUs.
Here is a detailed list of supported CPUs and devices.
Can J-Link read back the status of the JTAG pins?
A: Yes, the status of all pins can be read. This includes the outputs of J-Link as well as the supply voltage, which can be useful to detect hardware problems on the target system.
Does J-Link support the Embedded Trace Buffer (ETB)?
A: Yes. J-Link supports ETB on Cortex-M3/M4/M7 and Cortex-A/R (if implemented by target device).
Does J-Link support the Micro Trace Buffer (MTB)?