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