DAPLink+VSCode调试nrf52_moderate

Creative Commons
本作品采用知识共享署名

本文以CoreBoard为例,基于ubuntu18.04说明如何搭建DAPLink+VSCode环境来调试nrf52_moderate。

概述

zephyr提供的debug功能是基于gdb cli的,不方便调试.在ubuntu环境下DAPlink+pyocd可以开启gdbserver,因此可以通过VSCode调用gdb连接gdbserver进行gui的调试。

硬件

DAPLink是ARM在embed上的一个开源的调试器,其前身为CMSIS-DAP.DAPLink支援以下功能:

  • MSC: 拖拽下载
  • CDC: 虚拟串口
  • HID: 基本调试口
    Interface可以找到参考电路,在DAPLink可以找到源代码和释放的image。
    我目前使用的是STM32方案的:可能是资源不足无法支援MSC,仅有CDC和HID功能,不过也足够用了。由于法律上的问题DAPLink的官方github并不提供STM32的image,代码可以参考x893/CMSIS-DAP

    硬件连接

    DAPLink和CoreBoard的连接方式参考nrf52-moderate-CoreBoard说明

安装和配置

pyOCD

DAPLink在Ubuntu18.04下使用pyOCD作为调试的客户端软件,具体部署方法如下

安装

已经安装了python2.7或以上版本的情况下:

1
pip install --pre -U pyocd

配置

pyocd操作DAPLink是需要sudo权限的,为了方便之后VSCode能直接使用pyocd,这里为DAPLink添加权限。

  • 插入DAPLink执行下面命令查看vendor&product id为idVendor=c251, idProduct=f001
    1
    dmesg | tail

DAPLink set

  • 创建rule文件
    1
    sudo vim /etc/udev/rules.d/50-cmsis-dap.rules

内容为

1
SUBSYSTEM=="usb", ATTR{idVendor}=="c251", ATTR{idProduct}=="f001", MODE:="666"

  • 测试
    重新插拔DAPLink执行
    1
    pyocd-flashtool -l

看到如下说明成功了
DAPLink link

PUTTY

putty作为串口终端用

安装

1
sudo apt-get install putty

运行

1
sudo putty

配置

打开串口就可以了,我这边DAPLink虚拟串口设备是/dev/ttyACM0,CoreBorad串口波特率为115200配置如下,然后点Open即可
putty

VSCode

安装

VSCode的安装参考Ubuntu上使用VSCode
然后多安装一个插件Cortex Debug该插件可以让VSCode使用pyOCD
cortex debug

配置

建立要调试的app

参考Zephyr添加nrf52-moderate
然后在VSCode资源管理器的工作区右键选项添加~/work/project/nrf52_moderate到工作区
work

创建调试配置文件

在调试区选择要添加配置文件的项目
debug create
此时会自动创建出launch.json,然后在提示中选择pyocd,修改文件如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"cwd": "${workspaceRoot}",
"executable": "/home/frank/work/project/nrf52_moderate/apps/basetest/build/zephyr/zephyr.elf",
"name": "Debug Microcontroller",
"request": "launch",
"type": "cortex-debug",
"servertype": "pyocd",
"targetId":"nrf52",
"armToolchainPath": "/opt/gcc-arm-none-eabi-7-2017-q4-major/bin/",
"svdFile": "/home/frank/work/project/zephyr/ext/hal/nordic/nrfx/mdk/nrf52.svd",
"showDevDebugOutput": true
}
]
}

需要根据项目修改的说明如下:

  • executable: 要调试elf的路径
  • request: 请求方法,launch会先下载elf文件,然后启动程序并pause到第一条指令,attach则是直接用gdbserver对当前正在运行的程序进行attach
  • targetId: pyocd支持的target,具体有那些选项可以执行pyocd-flashtool –help查看
  • armToolchainPath: 使用的gdb所在路径
  • svdFile: svd是ARM CMSIS为外围器件定义的一个xml描述文件,里面定义了外设寄存器的地址,添加了这个文件就可以在调试的时候方便的查看对应外设寄存器的值。svd文件一般都是由芯片厂商提供,具体格式可以参考CMSIS-SVD

调试运行

使用launch的方式调试由于会先下载elf,因此启动会比较慢。点击VSCode调试的三角符号既可启动到调试界面
debug
可以看到调试启动会停在第一句指令处,VSCode调试支持单步,断点,查看变量,调用堆栈等,因为是GUI调试,基本一看就明了这里不再做详述,可以参考使用VSCode调试Zephyr一文。

参考

https://os.mbed.com/handbook/DAPLink
https://github.com/armmbed/DAPLink/
https://pypi.org/project/pyOCD/
https://arm-software.github.io/CMSIS_5/General/html/index.html
https://marcelball.ca/projects/cortex-debug/