使用Jlink-SWD下载与调试Raspberry Pi Pico

目标

Raspberry Pi Pico提供了除了默认通过按键-上电-枚举U盘的方式下载外,同时提供了SWD接口用来下载和单步调试,这种方式非常易于调试,可以避免频繁的拔插USB。使用环境为Windows10.

RPi官方提供的最直接的环境是使用另外一个PiPico作为USB-SWD Bridge, 烧写PicoProbe固件并用来调试其他PiPico, 但是如果已经有其他USB-SWD调试器,也是可以使用的


准备

  • 编译可执行的Pi Pico可执行文件, 假设文件位置为当前位置,文件名为testcode.elf
  • JLink(v9)一套, 接口如图,需要连接SWDIO, SWCLK, VTref和GND

安装Pi Pico OpenOCD

Win10下安装MSYS2

  • 官方提供的Windows下安装PiPico方法是首先安装MSYS2

  • 安装完成后执行

    pacman -Syu

  • 完成后窗口自动关闭,确保打开64bit版本后执行

    pacman -Su

  • 更新完后安装依赖

    pacman -S mingw-w64-x86_64-toolchain git make libtool pkg-config autoconf automake texinfo mingw-w64-x86_64-libusb

    编译安装OpenOCD

  • 安装完成后,打开MSYS MinGW x64

  • 下载安装openocd包

    git clone https://github.com/raspberrypi/openocd.git –branch rp2040 –depth=1

  • 编译

    cd openocd
    ./bootstrap
    ./configure –enable-picoprobe –disable-werror
    make -j4
    make install

  • 测试(出现错误正常)

    src/openocd.exe


JLink驱动

  • 由于使用的是OpenOCD, 所以并不能直接使用Segger提供的JLink的驱动,下载Zading
  • 打开Zading选择List All Device
  • 选取JLink对应的接口,原驱动应为jlink (vx.xx.x.x), 替换为WinUSB, 点击替换驱动按钮

通过SWD下载

在MSYS2 MinGW x64中执行

openocd -f interface/jlink.cfg -c “transport select swd” -c “adapter_khz 6000” -f target/rp2040.cfg -c “program testcode.elf verify reset exit”

其中-f interface/jlink.cfg用来选择调试器为JLink, 其后面的-c “transport select swd”用于切换调试接口为SWD,JLink默认的接口类型为JTAG,所以这个配置必须紧跟当前的-f interface/jlink.cfg

-c “adapter_khz 6000”选择当前SWD频率, 也必须位于-f interface/jlink.cfg 之后,且下一个-f xxx 之前


通过SWD调试

安装GDB Client

下载安装最新的GNU ARM GCC编译器

安装调试界面

调试界面可以是常用的Eclipse或者基于VSCode改造,我已经安装了STM32CubeIDE, 也是基于Eclipse内核的,所以就直接用STM32CubeIDE了。 如果是安装Eclipse, 可以使用C/C++版本,选择安装arm相关的调试包即可。

调试下载

  • MSYS2 MinGW x64启动OpenOCD为GDB Server:

    openocd -f interface/jlink.cfg -c “transport select swd” -c “adapter_khz 6000” -f target/rp2040.cfg

  • 打开STM32CubeIDE调试配置页面:
    • 新建GDB Hardware Debugging
    • Project: 名字随便起
    • C/C++ Application: 指向testcode.elf
    • Disable Auto Build
  • 配置Debugger Pannel:
    • GDB Command指向安装的arm gcc工具链下面的arm-none-eabi-gdb
    • 使用Remote Target
    • Remote Target类型为OpenOCD
    • Host Name: localhost
    • Port Number: 3333
  • Startup页面配置:可以根据需要调整
  • Apply & Debug