| .. _debug-probes: |
| |
| Debug Probes |
| ############ |
| |
| A *debug probe* is special hardware which allows you to control execution of a |
| Zephyr application running on a separate board. Debug probes usually allow |
| reading and writing registers and memory, and support breakpoint debugging of |
| the Zephyr application on your host workstation using tools like GDB. They may |
| also support other debug software and more advanced features such as |
| :ref:`tracing program execution <tracing>`. For details on the related host |
| software supported by Zephyr, see :ref:`flash-debug-host-tools`. |
| |
| Debug probes are usually connected to your host workstation via USB; they |
| are sometimes also accessible via an IP network or other means. They usually |
| connect to the device running Zephyr using the JTAG or SWD protocols. Debug |
| probes are either separate hardware devices or circuitry integrated into the same |
| board which runs Zephyr. |
| |
| Many supported boards in Zephyr include a second microcontroller that serves as |
| an onboard debug probe, usb-to-serial adapter, and sometimes a drag-and-drop |
| flash programmer. This eliminates the need to purchase an external debug probe |
| and provides a variety of debug host tool options. |
| |
| Several hardware vendors have their own branded onboard debug probe |
| implementations: NXP LPC boards have LPC-Link2, NXP Kinetis (former Freescale) |
| boards have OpenSDA, and ST boards have ST-LINK. Each onboard debug probe |
| microcontroller can support one or more types of firmware that communicate with |
| their respective debug host tools. For example, an OpenSDA microcontroller can |
| be programmed with DAPLink firmware to communicate with pyOCD or OpenOCD debug |
| host tools, or with J-Link firmware to communicate with J-Link debug host |
| tools. |
| |
| Some supported boards in Zephyr do not include an onboard debug probe and |
| therefore require an external debug probe. In addition, boards that do include |
| an onboard debug probe often also have an SWD or JTAG header to enable the use |
| of an external debug probe instead. One reason this may be useful is that the |
| onboard debug probe may have limitations, such as lack of support for advanced |
| debuggers or high-speed tracing. You may need to adjust jumpers to prevent the |
| onboard debug probe from interfering with the external debug probe. |
| |
| .. _lpclink2-jlink-onboard-debug-probe: |
| |
| LPC-Link2 J-Link Onboard Debug Probe |
| ************************************ |
| |
| The LPC-Link2 J-Link is an onboard debug probe and usb-to-serial adapter |
| supported on many NXP LPC and i.MX RT development boards. |
| |
| This debug probe is compatible with the following debug host tools: |
| |
| - :ref:`jlink-debug-host-tools` |
| |
| This probe is realized by programming the LPC-Link2 microcontroller with J-Link |
| LPC-Link2 firmware. Download and install `LPCScrypt`_ to get the firmware and |
| programming scripts. |
| |
| .. note:: Verify the firmware supports your board by visiting `Firmware for LPCXpresso`_ |
| |
| 1. Put the LPC-Link2 microcontroller into DFU boot mode by attaching the DFU |
| jumper, then powering up the board. |
| |
| #. Run the ``program_JLINK`` script. |
| |
| #. Remove the DFU jumper and power cycle the board. |
| |
| .. _opensda-daplink-onboard-debug-probe: |
| |
| OpenSDA DAPLink Onboard Debug Probe |
| *********************************** |
| |
| The OpenSDA DAPLink is an onboard debug probe and usb-to-serial adapter |
| supported on many NXP Kinetis and i.MX RT development boards. It also includes |
| drag-and-drop flash programming support. |
| |
| This debug probe is compatible with the following debug host tools: |
| |
| - :ref:`pyocd-debug-host-tools` |
| - :ref:`openocd-debug-host-tools` |
| |
| This probe is realized by programming the OpenSDA microcontroller with DAPLink |
| OpenSDA firmware. NXP provides `OpenSDA DAPLink Board-Specific Firmwares`_. |
| |
| Install the debug host tools before you program the firmware. |
| |
| As with all OpenSDA debug probes, the steps for programming the firmware are: |
| |
| 1. Put the OpenSDA microcontroller into bootloader mode by holding the reset |
| button while you power on the board. Note that "bootloader mode" in this |
| context applies to the OpenSDA microcontroller itself, not the target |
| microcontroller of your Zephyr application. |
| |
| #. After you power on the board, release the reset button. A USB mass storage |
| device called **BOOTLOADER** or **MAINTENANCE** will enumerate. |
| |
| #. Copy the OpenSDA firmware binary to the USB mass storage device. |
| |
| #. Power cycle the board, this time without holding the reset button. You |
| should see three USB devices enumerate: a CDC device (serial port), a HID |
| device (debug port), and a mass storage device (drag-and-drop flash |
| programming). |
| |
| .. _opensda-jlink-onboard-debug-probe: |
| |
| OpenSDA J-Link Onboard Debug Probe |
| ********************************** |
| |
| The OpenSDA J-Link is an onboard debug probe and usb-to-serial adapter |
| supported on many NXP Kinetis and i.MX RT development boards. |
| |
| This debug probe is compatible with the following debug host tools: |
| |
| - :ref:`jlink-debug-host-tools` |
| |
| This probe is realized by programming the OpenSDA microcontroller with J-Link |
| OpenSDA firmware. Segger provides `OpenSDA J-Link Generic Firmwares`_ and |
| `OpenSDA J-Link Board-Specific Firmwares`_, where the latter is generally |
| recommended when available. Board-specific firmwares are required for i.MX RT |
| boards to support their external flash memories, whereas generic firmwares are |
| compatible with all Kinetis boards. |
| |
| Install the debug host tools before you program the firmware. |
| |
| As with all OpenSDA debug probes, the steps for programming the firmware are: |
| |
| 1. Put the OpenSDA microcontroller into bootloader mode by holding the reset |
| button while you power on the board. Note that "bootloader mode" in this |
| context applies to the OpenSDA microcontroller itself, not the target |
| microcontroller of your Zephyr application. |
| |
| #. After you power on the board, release the reset button. A USB mass storage |
| device called **BOOTLOADER** or **MAINTENANCE** will enumerate. |
| |
| #. Copy the OpenSDA firmware binary to the USB mass storage device. |
| |
| #. Power cycle the board, this time without holding the reset button. You |
| should see two USB devices enumerate: a CDC device (serial port) and a |
| vendor-specific device (debug port). |
| |
| .. _stlink-v21-onboard-debug-probe: |
| |
| ST-LINK/V2-1 Onboard Debug Probe |
| ******************************** |
| |
| ST-LINK/V2-1 is a serial and debug adapter built into all Nucleo and Discovery |
| boards. It provides a bridge between your computer (or other USB host) and the |
| embedded target processor, which can be used for debugging, flash programming, |
| and serial communication, all over a simple USB cable. |
| |
| It is compatible with the following host debug tools: |
| |
| - :ref:`openocd-debug-host-tools` |
| - :ref:`jlink-debug-host-tools` |
| |
| For some STM32 based boards, it is also compatible with: |
| |
| - :ref:`pyocd-debug-host-tools` |
| |
| While it works out of the box with OpenOCD, it requires some flashing |
| to work with J-Link. To do this, SEGGER offers a firmware upgrading the |
| ST-LINK/V2-1 on board on the Nucleo and Discovery boards. This firmware makes |
| the ST-LINK/V2-1 compatible with J-LinkOB, allowing users to take advantage of |
| most J-Link features like the ultra fast flash download and debugging speed or |
| the free-to-use GDBServer. |
| |
| More informations about upgrading ST-LINK/V2-1 to JLink or restore ST-Link/V2-1 |
| firmware please visit: `Segger over ST-Link`_ |
| |
| Flash and debug with ST-Link |
| ============================ |
| |
| Using OpenOCD |
| ------------- |
| |
| OpenOCD is available by default on ST-Link and configured as the default flash |
| and debug tool. Flash and debug can be done as follows: |
| |
| .. zephyr-app-commands:: |
| :zephyr-app: samples/hello_world |
| :goals: flash |
| |
| .. zephyr-app-commands:: |
| :zephyr-app: samples/hello_world |
| :goals: debug |
| |
| |
| .. _jlink-rtt-debug-probe: |
| |
| Using Segger J-Link |
| ------------------- |
| |
| Once STLink is flashed with SEGGER FW and J-Link GDB server is installed on your |
| host computer, you can flash and debug as follows: |
| |
| Use CMake with ``-DBOARD_FLASH_RUNNER=jlink`` to change the default OpenOCD |
| runner to J-Link. Alternatively, you might add the following line to your |
| application ``CMakeList.txt`` file. |
| |
| .. code-block:: cmake |
| |
| set(BOARD_FLASH_RUNNER jlink) |
| |
| If you use West (Zephyr's meta-tool) you can modify the default runner using |
| the ``--runner`` (or ``-r``) option. |
| |
| .. code-block:: console |
| |
| west flash --runner jlink |
| |
| To attach a debugger to your board and open up a debug console with ``jlink``. |
| |
| .. code-block:: console |
| |
| west debug --runner jlink |
| |
| For more information about West and available options, see :ref:`west`. |
| |
| If you configured your Zephyr application to use `Segger RTT`_ console instead, |
| open telnet: |
| |
| .. code-block:: console |
| |
| $ telnet localhost 19021 |
| Trying ::1... |
| Trying 127.0.0.1... |
| Connected to localhost. |
| Escape character is '^]'. |
| SEGGER J-Link V6.30f - Real time terminal output |
| J-Link STLink V21 compiled Jun 26 2017 10:35:16 V1.0, SN=773895351 |
| Process: JLinkGDBServerCLExe |
| Zephyr Shell, Zephyr version: 1.12.99 |
| Type 'help' for a list of available commands |
| shell> |
| |
| If you get no RTT output you might need to disable other consoles which conflict |
| with the RTT one if they are enabled by default in the particular sample or |
| application you are running, such as disable UART_CONSOLE in menucon |
| |
| Updating or restoring ST-Link firmware |
| ====================================== |
| |
| ST-Link firmware can be updated using `STM32CubeProgrammer Tool`_. |
| It is usually useful when facing flashing issues, for instance when using |
| twister's device-testing option. |
| |
| Once installed, you can update attached board ST-Link firmware with the |
| following command |
| |
| .. code-block:: console |
| |
| s java -jar ~/STMicroelectronics/STM32Cube/STM32CubeProgrammer/Drivers/FirmwareUpgrade/STLinkUpgrade.jar -sn <board_uid> |
| |
| Where board_uid can be obtained using twister's generate-hardware-map |
| option. For more information about twister and available options, see |
| :ref:`twister_script`. |
| |
| .. _jlink-external-debug-probe: |
| |
| J-Link External Debug Probe |
| *************************** |
| |
| `Segger J-Link`_ is a family of external debug probes, including J-Link EDU, |
| J-Link PLUS, J-Link ULTRA+, and J-Link PRO, that support a large number of |
| devices from different hardware architectures and vendors. |
| |
| This debug probe is compatible with the following debug host tools: |
| |
| - :ref:`jlink-debug-host-tools` |
| - :ref:`openocd-debug-host-tools` |
| |
| Install the debug host tools before you program the firmware. |
| |
| .. _LPCScrypt: |
| https://www.nxp.com/lpcscrypt |
| |
| .. _Firmware for LPCXpresso: |
| https://www.segger.com/products/debug-probes/j-link/models/other-j-links/lpcxpresso-on-board/ |
| |
| .. _OpenSDA DAPLink Board-Specific Firmwares: |
| https://www.nxp.com/opensda |
| |
| .. _OpenSDA J-Link Generic Firmwares: |
| https://www.segger.com/downloads/jlink/#JLinkOpenSDAGenericFirmwares |
| |
| .. _OpenSDA J-Link Board-Specific Firmwares: |
| https://www.segger.com/downloads/jlink/#JLinkOpenSDABoardSpecificFirmwares |
| |
| .. _Segger J-Link: |
| https://www.segger.com/products/debug-probes/j-link/ |
| |
| .. _Segger over ST-Link: |
| https://www.segger.com/products/debug-probes/j-link/models/other-j-links/st-link-on-board/ |
| |
| .. _Segger RTT: |
| https://www.segger.com/jlink-rtt.html |
| |
| .. _STM32CubeProgrammer Tool: |
| https://www.st.com/en/development-tools/stm32cubeprog.html |