物料准备
硬件
在前两次实验的基础上,需要额外再准备一个树莓派PICO 作为调试器,
以及若干杜邦线
软件
从github上获取树莓派的debugprobe源码包或者uf2文件
烧录固件
将debugprobe_on_pico.uf2文件烧录到作为调试器的pico中
将uart通信实验中使用的hello_world.uf2烧录到被调试的pico中
ps:这里注意cmake的时候需要加上-DCMAKE_BUILD_TYPE=Debug,保证编译出的
二进制文件中含有调试信息
调试器和被调试对象引脚连接
树莓派官方给出的引脚连接
我参考这个指导用杜邦线进行的连接如下:
1)Pin4(调试器PICO)-> SWCLK(被调试PICO)
2)Pin5(调试器PICO)-> SWDIO(被调试PICO)
3)Pin6(调试器PICO)-> Pin2(被调试PICO)
4)Pin7(调试器PICO)-> Pin1(被调试PICO)
5)GND-Pin8(调试器PICO)-> GND-debug(被调试PICO)
6)VBUS-Pin40(调试器PICO)-> VBUS-Pin40(被调试PICO)
7) GND-Pin38(调试器PICO)-> GND-Pin38(被调试PICO)
调试流程
将调试器pico通过usb连接到树莓派4b上
通过minicom进行串口通信
sudo minicom -D /dev/ttyACM0 -b 9600
出现循环打印的hello,world
运行openocd服务并连接调试设备
执行如下命令
sudo openocd -f interface/cmsis-dap.cfg -f target/rp2040.cfg -c "adapter speed 5000"
回显如下
使用GDB连接openocd服务调试
gdb hello_world.elf 注意是.elf偶
在gdb中输入下面的命令连接到openocd服务
target remote localhost:3333
这时我们可以通过monitor命令来下发openocd的命令比如halt/reset/reg对
被调试pico进行控制
也可以对pico中的程序通过打断点的方式进行一步步调试
比如 在hello_world.c的第七行打了断点,并成功把pico中运行的程序成功断住,后续可以用gdb命令进一步进行调试
ps:
这次实验用的第二个pico买的是没有预先焊接排针的,电烙铁的使用不怎么熟练,花了挺长时间焊接这43个引脚,还好这次实验用到的引脚没有出现虚焊,可喜可贺:)