DAPLink+VSCode调试nrf52_moderate

本文以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或以上版本的情况下:

pip install --pre -U pyocd

配置 链接到标题

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

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

DAPLink set

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

内容为

SUBSYSTEM=="usb", ATTR{idVendor}=="c251", ATTR{idProduct}=="f001", MODE:="666"
  • 测试 重新插拔DAPLink执行
pyocd-flashtool -l

看到如下说明成功了 DAPLink link

PUTTY 链接到标题

putty作为串口终端用

安装 链接到标题

sudo apt-get install putty

运行 链接到标题

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,修改文件如下

{
    // 使用 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/