| :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 with ``OPENSDA_FW=daplink`` to build your |
| Zephyr application, invoke the pyOCD flash tool and program your Zephyr |
| application to flash. |
| |
| .. code-block:: console |
| |
| $ make OPENSDA_FW=daplink flash |
| Using /home/maureen/zephyr/boards/arm/frdm_k64f/frdm_k64f_defconfig as base |
| Merging /home/maureen/zephyr/tests/include/test.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 |
| |
| <snip> |
| |
| 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]<e000e000:SCS-M4 cidr=b105e00d, pidr=4000bb00c, class=14> |
| WARNING:root:Invalid coresight component, cidr=0x0 |
| INFO:root:[1]<e0001000: cidr=0, pidr=0, component invalid> |
| INFO:root:[2]<e0002000:FPB cidr=b105e00d, pidr=4002bb003, class=14> |
| WARNING:root:Invalid coresight component, cidr=0x1010101 |
| INFO:root:[3]<e0000000: cidr=1010101, pidr=101010101010101, component invalid> |
| WARNING:root:Invalid coresight component, cidr=0x0 |
| INFO:root:[4]<e0040000: cidr=0, pidr=0, component invalid> |
| INFO:root:[5]<e0041000:ETM-M4 cidr=b105900d, pidr=4000bb925, class=9, devtype=13, devid=0> |
| INFO:root:[6]<e0042000:ETB cidr=b105900d, pidr=4003bb907, class=9, devtype=21, devid=0> |
| INFO:root:[7]<e0043000:CSTF cidr=b105900d, pidr=4001bb908, class=9, devtype=12, devid=28> |
| 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 with ``OPENSDA_FW=daplink`` 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 OPENSDA_FW=daplink debug |
| Using /home/maureen/zephyr/boards/arm/frdm_k64f/frdm_k64f_defconfig as base |
| Merging /home/maureen/zephyr/tests/include/test.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 |
| |
| <snip> |
| |
| 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 <http://gnu.org/licenses/gpl.html> |
| 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: |
| <http://www.gnu.org/software/gdb/bugs/>. |
| Find the GDB manual and other documentation resources online at: |
| <http://www.gnu.org/software/gdb/documentation/>. |
| 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]<e000e000:SCS-M4 cidr=b105e00d, pidr=4000bb00c, class=14> |
| WARNING:root:Invalid coresight component, cidr=0x0 |
| INFO:root:[1]<e0001000: cidr=0, pidr=0, component invalid> |
| INFO:root:[2]<e0002000:FPB cidr=b105e00d, pidr=4002bb003, class=14> |
| WARNING:root:Invalid coresight component, cidr=0x1010101 |
| INFO:root:[3]<e0000000: cidr=1010101, pidr=101010101010101, component invalid> |
| WARNING:root:Invalid coresight component, cidr=0x0 |
| INFO:root:[4]<e0040000: cidr=0, pidr=0, component invalid> |
| INFO:root:[5]<e0041000:ETM-M4 cidr=b105900d, pidr=4000bb925, class=9, devtype=13, devid=0> |
| INFO:root:[6]<e0042000:ETB cidr=b105900d, pidr=4003bb907, class=9, devtype=21, devid=0> |
| INFO:root:[7]<e0043000:CSTF cidr=b105900d, pidr=4001bb908, class=9, devtype=12, devid=28> |
| 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 with ``OPENSDA_FW=jlink`` 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 OPENSDA_FW=jlink debug |
| Using /home/maureen/zephyr/boards/arm/frdm_k64f/frdm_k64f_defconfig as base |
| Merging /home/maureen/zephyr/tests/include/test.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 |
| |
| <snip> |
| |
| 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 <http://gnu.org/licenses/gpl.html> |
| 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: |
| <http://www.gnu.org/software/gdb/bugs/>. |
| Find the GDB manual and other documentation resources online at: |
| <http://www.gnu.org/software/gdb/documentation/>. |
| 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 |