:orphan: .. _nxp_opensda: NXP OpenSDA ########### Overview ******** `OpenSDA`_ is a serial and debug adapter that is built into several NXP evaluation 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. The OpenSDA hardware features a Kinetis K2x microcontroller with an integrated USB controller. On the software side, it implements a mass storage device bootloader which offers a quick and easy way to load OpenSDA applications such as flash programmers, run-control debug interfaces, serial to USB converters, and more. Zephyr supports the following debug tools through OpenSDA: * :ref:`nxp_opensda_pyocd` * :ref:`nxp_opensda_jlink` .. _nxp_opensda_firmware: Program the Firmware ==================== Once you've selected which debug tool you wish to use, you need to program the associated OpenSDA firmware application to the OpenSDA adapter. Put the OpenSDA adapter into bootloader mode by holding the reset button while you power on the board. After you power on the board, release the reset button and a USB mass storage device called **BOOTLOADER** or **MAINTENANCE** will enumerate. Copy the OpenSDA firmware application binary to the USB mass storage device. Power cycle the board, this time without holding the reset button. .. _nxp_opensda_pyocd: pyOCD ***** pyOCD is an Open Source python 2.7 based library for programming and debugging ARM Cortex-M microcontrollers using CMSIS-DAP. Host Tools and Firmware ======================= Follow the instructions in `pyOCD Installation`_ to install the pyOCD flash tool and GDB server for your host computer. Select your board in `OpenSDA`_ and download the latest DAPLink firmware application binary. :ref:`nxp_opensda_firmware` with this application. Flashing ======== Use the ``make flash`` build target to build your Zephyr application, invoke the pyOCD flash tool and program your Zephyr application to flash. .. code-block:: console $ make FLASH_SCRIPT=pyocd.sh flash Using /home/maureen/zephyr/boards/arm/frdm_k64f/frdm_k64f_defconfig as base Merging /home/maureen/zephyr/tests/include/test.config Merging /home/maureen/zephyr/kernel/configs/kernel.config Merging prj.conf # # configuration written to .config # make[1]: Entering directory '/home/maureen/zephyr' make[2]: Entering directory '/home/maureen/zephyr/samples/hello_world/outdir/frdm_k64f' GEN ./Makefile scripts/kconfig/conf --silentoldconfig Kconfig Using /home/maureen/zephyr as source for kernel GEN ./Makefile CHK include/generated/version.h UPD include/generated/version.h DTC dts/arm/frdm_k64f.dts_compiled CHK include/generated/generated_dts_board.h UPD include/generated/generated_dts_board.h CHK misc/generated/configs.c UPD misc/generated/configs.c CHK include/generated/offsets.h UPD include/generated/offsets.h CC lib/libc/minimal/source/stdlib/strtol.o CC kernel/work_q.o AR kernel/lib.a CC src/main.o LD src/built-in.o AR libzephyr.a LINK zephyr.lnk IRQ isr_tables.c CC isr_tables.o LINK zephyr.elf BIN zephyr.bin Flashing frdm_k64f Flashing Target Device INFO:root:DAP SWD MODE initialised INFO:root:K64F not in secure state INFO:root:ROM table #0 @ 0xe00ff000 cidr=b105100d pidr=4000bb4c4 INFO:root:[0] WARNING:root:Invalid coresight component, cidr=0x0 INFO:root:[1] INFO:root:[2] WARNING:root:Invalid coresight component, cidr=0x1010101 INFO:root:[3] WARNING:root:Invalid coresight component, cidr=0x0 INFO:root:[4] INFO:root:[5] INFO:root:[6] INFO:root:[7] INFO:root:CPU core is Cortex-M4 INFO:root:FPU present INFO:root:6 hardware breakpoints, 4 literal comparators INFO:root:4 hardware watchpoints [====================] 100% INFO:root:Programmed 12288 bytes (3 pages) at 10.57 kB/s make[2]: Leaving directory '/home/maureen/zephyr/samples/hello_world/outdir/frdm_k64f' make[1]: Leaving directory '/home/maureen/zephyr' Debugging ========= Use the ``make debug`` build target to build your Zephyr application, invoke the pyOCD GDB server, attach a GDB client, and program your Zephyr application to flash. It will leave you at a gdb prompt. .. code-block:: console $ make DEBUG_SCRIPT=pyocd.sh debug Using /home/maureen/zephyr/boards/arm/frdm_k64f/frdm_k64f_defconfig as base Merging /home/maureen/zephyr/tests/include/test.config Merging /home/maureen/zephyr/kernel/configs/kernel.config Merging prj.conf # # configuration written to .config # make[1]: Entering directory '/home/maureen/zephyr' make[2]: Entering directory '/home/maureen/zephyr/samples/hello_world/outdir/frdm_k64f' GEN ./Makefile scripts/kconfig/conf --silentoldconfig Kconfig Using /home/maureen/zephyr as source for kernel GEN ./Makefile CHK include/generated/version.h UPD include/generated/version.h DTC dts/arm/frdm_k64f.dts_compiled CHK include/generated/generated_dts_board.h UPD include/generated/generated_dts_board.h CHK misc/generated/configs.c UPD misc/generated/configs.c CHK include/generated/offsets.h UPD include/generated/offsets.h CC lib/libc/minimal/source/stdlib/strtol.o CC kernel/work_q.o AR kernel/lib.a CC src/main.o LD src/built-in.o AR libzephyr.a LINK zephyr.lnk IRQ isr_tables.c CC isr_tables.o LINK zephyr.elf BIN zephyr.bin pyOCD GDB server running on port 3333 GNU gdb (GDB) 7.11.0.20160511-git Copyright (C) 2016 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "--host=x86_64-pokysdk-linux --target=arm-zephyr-eabi". Type "show configuration" for configuration details. For bug reporting instructions, please see: . Find the GDB manual and other documentation resources online at: . For help, type "help". Type "apropos word" to search for commands related to "word"... Reading symbols from /home/maureen/zephyr/samples/hello_world/outdir/frdm_k64f/zephyr.elf...done. INFO:root:DAP SWD MODE initialised INFO:root:K64F not in secure state INFO:root:ROM table #0 @ 0xe00ff000 cidr=b105100d pidr=4000bb4c4 INFO:root:[0] WARNING:root:Invalid coresight component, cidr=0x0 INFO:root:[1] INFO:root:[2] WARNING:root:Invalid coresight component, cidr=0x1010101 INFO:root:[3] WARNING:root:Invalid coresight component, cidr=0x0 INFO:root:[4] INFO:root:[5] INFO:root:[6] INFO:root:[7] INFO:root:CPU core is Cortex-M4 INFO:root:FPU present INFO:root:6 hardware breakpoints, 4 literal comparators INFO:root:4 hardware watchpoints INFO:root:Telnet: server started on port 4444 INFO:root:GDB server started at port:3333 Remote debugging using :3333 INFO:root:One client connected! k_cpu_idle () at /home/maureen/zephyr/arch/arm/core/cpu_idle.S:135 135 bx lr Loading section text, size 0x233e lma 0x0 Loading section devconfig, size 0xa8 lma 0x2340 Loading section rodata, size 0x5d4 lma 0x23e8 Loading section datas, size 0x14 lma 0x29bc Loading section initlevel, size 0xa8 lma 0x29d0 [====================] 100% INFO:root:Programmed 45056 bytes (3 pages) at 38.21 kB/s Start address 0x1b64, load size 10870 Transfer rate: 9 KB/sec, 1207 bytes/write. (gdb) .. _nxp_opensda_jlink: Segger J-Link ************* Segger offers firmware running on the OpenSDA platform which makes OpenSDA compatible to J-Link Lite, allowing users to take advantage of most J-Link features like the ultra fast flash download and debugging speed or the free-to-use GDB Server, by using a low-cost OpenSDA platform for developing on evaluation boards. Host Tools and Firmware ======================= Download and install the `Segger J-Link Software and Documentation Pack`_ to get the J-Link GDB server for your host computer. Select your board in `OpenSDA`_ and download the Segger J-Link firmware application binary. :ref:`nxp_opensda_firmware` with this application. Flashing ======== The Segger J-Link firmware does not support command line flashing, therefore the ``make flash`` build target is not supported. Debugging ========= Use the ``make debug`` build target to build your Zephyr application, invoke the J-Link GDB server, attach a GDB client, and program your Zephyr application to flash. It will leave you at a gdb prompt. .. code-block:: console $ make DEBUG_SCRIPT=jlink.sh debug Using /home/maureen/zephyr/boards/arm/frdm_k64f/frdm_k64f_defconfig as base Merging /home/maureen/zephyr/tests/include/test.config Merging /home/maureen/zephyr/kernel/configs/kernel.config Merging prj.conf # # configuration written to .config # make[1]: Entering directory '/home/maureen/zephyr' make[2]: Entering directory '/home/maureen/zephyr/samples/hello_world/outdir/frdm_k64f' GEN ./Makefile scripts/kconfig/conf --silentoldconfig Kconfig Using /home/maureen/zephyr as source for kernel GEN ./Makefile CHK include/generated/version.h UPD include/generated/version.h DTC dts/arm/frdm_k64f.dts_compiled CHK include/generated/generated_dts_board.h UPD include/generated/generated_dts_board.h CHK misc/generated/configs.c UPD misc/generated/configs.c CHK include/generated/offsets.h UPD include/generated/offsets.h CC lib/libc/minimal/source/stdlib/strtol.o CC kernel/work_q.o AR kernel/lib.a CC src/main.o LD src/built-in.o AR libzephyr.a LINK zephyr.lnk IRQ isr_tables.c CC isr_tables.o LINK zephyr.elf BIN zephyr.bin JLink GDB server running on port 2331 SEGGER J-Link GDB Server V6.14b Command Line Version JLinkARM.dll V6.14b (DLL compiled Mar 9 2017 08:48:20) -----GDB Server start settings----- GDBInit file: none GDB Server Listening port: 2331 SWO raw output listening port: 2332 Terminal I/O port: 2333 Accept remote connection: yes Generate logfile: off Verify download: off Init regs on start: off Silent mode: off Single run mode: on Target connection timeout: 0 ms ------J-Link related settings------ J-Link Host interface: USB J-Link script: none J-Link settings file: none ------Target related settings------ Target device: MK64FN1M0xxx12 Target interface: SWD Target interface speed: 1000kHz Target endian: little Connecting to J-Link... GNU gdb (GDB) 7.11.0.20160511-git Copyright (C) 2016 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "--host=x86_64-pokysdk-linux --target=arm-zephyr-eabi". Type "show configuration" for configuration details. For bug reporting instructions, please see: . Find the GDB manual and other documentation resources online at: . For help, type "help". Type "apropos word" to search for commands related to "word"... Reading symbols from /home/maureen/zephyr/samples/hello_world/outdir/frdm_k64f/zephyr.elf...done. J-Link is connected. Firmware: J-Link OpenSDA 2 compiled Feb 28 2017 19:27:57 Hardware: V1.00 S/N: 621000000 Checking target voltage... Target voltage: 3.30 V Listening on TCP/IP port 2331 Connecting to target...Connected to target Waiting for GDB connection...Remote debugging using :2331 Connected to 127.0.0.1 Reading all registers Read 4 bytes @ address 0x00001A04 (Data = 0xBF004770) Read 2 bytes @ address 0x000019FC (Data = 0x4040) Read 2 bytes @ address 0x000019FE (Data = 0xF380) Read 2 bytes @ address 0x00001A00 (Data = 0x8811) Read 2 bytes @ address 0x00001A02 (Data = 0xBF30) k_cpu_idle () at /home/maureen/zephyr/arch/arm/core/cpu_idle.S:135 135 bx lr Halting target CPU... ...Target halted (PC = 0x00001A04) Loading section text, size 0x233e lma 0x0 Downloading 4096 bytes @ address 0x00000000 Downloading 4096 bytes @ address 0x00001000 Downloading 830 bytes @ address 0x00002000 Loading section devconfig, size 0xa8 lma 0x2340 Downloading 168 bytes @ address 0x00002340 Loading section rodata, size 0x5d4 lma 0x23e8 Downloading 1492 bytes @ address 0x000023E8 Loading section datas, size 0x14 lma 0x29bc Downloading 20 bytes @ address 0x000029BC Loading section initlevel, size 0xa8 lma 0x29d0 Downloading 168 bytes @ address 0x000029D0 Start address 0x1b64, load size 10870 Writing register (PC = 0x641b0000) Transfer rate: 5307 KB/sec, 1552 bytes/write. Read 4 bytes @ address 0x00001B64 (Data = 0xF3802010) Resetting target Resetting target (gdb) Console ======= If you configured your Zephyr application to use a UART console (most boards enable this by default), open a serial terminal (minicom, putty, etc.) with the following settings: - Speed: 115200 - Data: 8 bits - Parity: None - Stop bits: 1 If you configured your Zephyr application to use `Segger RTT`_ console instead, open telnet: .. code-block:: console $ telnet localhost 19021 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. SEGGER J-Link V6.14b - Real time terminal output J-Link OpenSDA 2 compiled Feb 28 2017 19:27:57 V1.0, SN=621000000 Process: JLinkGDBServer .. _OpenSDA: http://www.nxp.com/opensda .. _Segger J-Link OpenSDA: https://www.segger.com/opensda.html .. _Segger J-Link Software and Documentation Pack: https://www.segger.com/downloads/jlink .. _Segger RTT: https://www.segger.com/jlink-rtt.html .. _pyOCD Installation: https://github.com/mbedmicro/pyOCD#installation