ref: 0ce98c7ac7ba66acaf504be9bb042796e12f2733
doc/openOCD.md
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# OpenOCD and STLink OpenOCD (**Open O**n **C**hip **D**ebugger) is an open source tool that interfaces with many SWD/JTAG debugger to provide debugging and *in-system* programming for embedded target devices. It supports the **NRF52** (the CPU of the PineTime) and the **STLinkV2**, a cheap SWD debugger. It works on X86 computers, as well as ARM/ARM64 computers and SBC (like the RaspberryPi and Pine64 Pinebook Pro) ! ## Installation We will build OpenOCD from sources, as packages from Linux distributions are most of the time outdated and do not support the NRF52 correctly. - Fetch the sources from GIT, and build and install it: ``` git clone https://git.code.sf.net/p/openocd/code openocd-code cd openocd-code ./bootstrap ./configure --enable-stlink make -j 4 sudo make install ``` - Configure UDEV to allow OpenOCD to open the interface to your STLinkV2: ``` sudo cp contrib/60-openocd.rules /etc/udev/rules.d/ sudo udevadm control --reload-rules ``` - You can now plug your STLinkV2 in a USB port and run OpenOCD to see if it's working correctly: ``` $ openocd -f interface/stlink.cfg -f target/nrf52.cfg Open On-Chip Debugger 0.10.0+dev-01411-g051e80812-dirty (2020-09-28-20:16) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html Info : auto-selecting first available session transport "hla_swd". To override use 'transport select <transport>'. Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD nRF52 device has a CTRL-AP dedicated to recover the device from AP lock. A high level adapter (like a ST-Link) you are currently using cannot access the CTRL-AP so 'nrf52_recover' command will not work. Do not enable UICR APPROTECT. Info : Listening on port 6666 for tcl connections Info : Listening on port 4444 for telnet connections Info : clock speed 1000 kHz Info : STLINK V2J34S7 (API v2) VID:PID 0483:3748 Info : Target voltage: 3.294340 Error: init mode failed (unable to connect to the target) ``` Ok, OpenOCD is running and it detects my STLinkV2. The last error shows that I've not connected the STLinkV2 to the PineTime. ## Configuration files OpenOCD is configured using configuration files. First, we need a common configuration file for the project : **openocd-stlink.ocd**: ``` source [find interface/stlink.cfg] gdb_flash_program enable gdb_breakpoint_override hard source [find target/nrf52.cfg] ``` This file specifies to OpenOCD which debugger and target it will be connected to.. Then, we use various *user files* to use OpenOCD to flash InfiniTime binary files. This files flashes the bootloader and the application firmware : **flash_bootloader_app.ocd**: ``` init program <build directory>/bootloader.bin verify 0x00000000 program <build directory>/image-0.8.2.bin verify 0x00008000 reset ``` And this one flashes the graphics flasher (it writes the bootloader graphics into the SPI NOR flash memory) : **flash_graphics.ocd**: ``` init program <build directory>/pinetime-graphics-0.8.2.bin verify 0x00000000 reset ``` ## Examples ### Flash bootloader and application ``` openocd -f ./openocd-stlink.ocd -f ./flash_bootloader_app.ocd ``` ### Flash graphics flasher ``` openocd -f ./openocd-stlink.ocd -f ./flash_graphics.ocd ``` ## Connect the STLinkV2 to the PineTime Here is an example using the pogo pins: ![SWD pinout](../images/swd_pinout.jpg) ![Pogo pins](../images/pogopins.jpg) You can find more information about the SWD wiring [on the wiki](https://wiki.pine64.org/index.php?title=PineTime_devkit_wiring). |