首页

学习如何用SWD编程和调试树莓派Pico

在本教程中,我们将学习如何使用SWD将程序上传到树莓派Pico,并使用SWD进行调试。到目前为止,我们一直使用拖放的方式上传程序到Pico。但如果您想使用Pico的SWD接口进行编程和调试,那么本教程非常适合您。学习用SWD编程树莓派Pico的步骤,以及用SWD、OpenOCD和GDB调试代码。

Program-Raspberry-Pi-Pico-with-SWD-Image-1

社会福利署简介

你曾经开发过嵌入式系统应用程序吗?如果答案是肯定的,那么您可能对“调试”这个术语很熟悉。在嵌入式系统中,调试和测试过程是非常关键的,因为我们经常在CPU寄存器级别下工作。

有几种用于调试嵌入式系统的硬件和软件解决方案。其中一种产品被称为串行线路调试,简称SWD。SWD是嵌入到大多数现代ARM微控制器和微处理器芯片中的调试和跟踪端口。

使用SWD探头(一种小型硬件,通常连接到微控制器的SWD端口,并将它们映射到USB),您可以用两根线编程微控制器的Flash,调试固件,添加断点,步进代码等。

SWD、GDB (GNU调试器)和OpenOCD(一个支持嵌入式系统调试、系统内编程和边界扫描的片上调试器)的组合是一个非常强大的调试设置,特别是对于ARM Cortex系列处理器。

树莓派picd编程和调试

像所有的ARM Cortex处理器一样,树莓派Pico也有专门的硬件通过SWD接口进行调试。SWD调试所需的两根电线称为SWDIO(双向SWD数据)和SWCLK (SWD时钟)。

在树莓派Pico上,SWD引脚与其他GPIO引脚分离,位于板的底部。

Raspberry-Pi-Pico-SWD-Pins

Raspberry Pi Pico板上RP2040的2线SWD接口可以实现以下功能:

  • 上传程序到外部闪存或内部SRAM。
  • 控制处理器的执行状态,如运行、暂停、步进、设置断点等。
  • 通过系统总线访问处理器内存和IO外设(内存映射)。

安装树莓派系统下的Tools

如前所述,调试任何ARM Cortex Processor都需要GDB和OpenOCD。所以,我们现在将安装这两个在我们的主机系统,在我的情况下是一个运行最新的树莓派操作系统的树莓派。

OpenOCD

要理解SWD协议并控制ARM Cortex处理器(在RP2040情况下是两个),您需要一个名为OpenOCD的特殊转换器。现在让我们看看如何在树莓派中安装OpenOCD。

注意:以下步骤将在/home/pi/pico/ OpenOCD中安装OpenOCD

cd ~
cd皮科
Sudo apt install automake autoconf build-essential texinfo libtool libftdi-dev libusb-1.0-0- dev

Pico-SWD-1

这将安装OpenOCD所需的所有工具。接下来,我们将把OpenOCD克隆到我们的主机上并安装OpenOCD。依次输入以下命令。

Git克隆https://github.com/raspberrypi/openocd.git -recursive -branch rp2040 -depth =1
cd openocd
。/引导
./configure -enable-ftdi -enable-sysfsgpio -enable-bcm2835gpio ./
让阁下
sudo make install

我将花一些时间来构建和安装OpenOCD。坐好放松。

广东发展银行

下一步是安装GDB。要安装GDB Multi-Arch,使用以下命令:

Sudo安装gdb-multiarch

Pico-SWD-2

在下一节中,我们将了解如何使用OpenOCD和GDB进行调试。

连接树莓派和树莓派

在了解如何使用SWD编程树莓派Pico之前,您必须首先正确地连接树莓派Pico。

重要提示:我不知道确切的原因,但在连接之前,我不得不关闭树莓派,以成功地使用SWD编程树莓派。我在树莓派论坛上读到,树莓派和目标,即树莓派Pico在这种情况下必须在连接SWD引脚之前关机。

因为树莓派的Pico是通过USB连接到树莓派的(给它充电),我所要做的就是关闭树莓派,建立SWD连接,然后给树莓派上电。

下表显示了您需要在树莓派和树莓派Pico之间建立的所有必要连接。

覆盆子π皮科

覆盆子π
SWDIO

Gpio 24(引脚18)

社署接地

接地(销20)
SWCLK

Gpio 25(引脚22)

Program-Raspberry-Pi-Pico-with-SWD-Image-2

用SWD编程树莓派

让我们以“Blink”程序为例来理解树莓派Pico SWD编程是如何工作的。如果你还记得在“用C编程树莓派Pico”教程中,我们已经构建了Blink程序,这导致了一些目标文件。

对于通过USB进行拖放编程,我们使用了.uf2文件。但是OpenOCD使用。elf文件上传程序。

使用以下命令用SWD编程树莓派Pico。

cd ~
cd皮科
cd pico-examples /构建/
使眨眼

Pico-SWD-3

Openocd -f interface/raspberrypi-swd.cfg -f target/rp2040.cfg -c " program blink/blink. cfg "精灵验证重置退出"

Pico-SWD-4

上面的命令将调用OpenOCD来编程闪烁。elf文件到树莓派Pico,复位单板并退出OpenOCD。如果一切正常,你的终端应该会显示类似这样的东西,树莓派的LED应该会开始闪烁。

Pico-SWD-5

调试树莓派Pico与SWD

现在让我们看看如何调试使用SWD、OpenOCD和GDB的代码。我们已经在前面的步骤中安装了GDB。现在,要在构建文件中包含调试相关的设置,您必须使用CMake指令'-DCMAKE_BUILD_TYPE =调试”。

但在此之前,你需要从' pico-examples '目录中删除' build '目录,并创建一个新的' build '目录。使用以下命令构建带有Debug信息的示例。

cd ~ / pico / pico-examples /
rm射频构建
mkdir构建
cd构建
出口PICO_SDK_PATH = . . / . . / pico-sdk
cmake -DCMAKE_BUILD_TYPE =调试. .

Pico-SWD-6

让我们使用' hello_world '示例并构建串行变体。您不能使用基于USB的串行连接进行SWD调试,因为在调试中停止处理器核心时USB设备将被断开。

此外,树莓派和树莓派之间的连接,以查看树莓派的输出UART树莓派的串行输出如下:

覆盆子π皮科

覆盆子π
GPIO 0 (UART0_TX)

Gpio 15 (uart_rx0) pin 10

GPIO 1 (UART0_RX)

Gpio 14 (uart_tx0) pin 8
接地

接地(销14)

建立连接之后,打开hello_world UART目录并构建它。

cd hello_world /串行
让阁下

使用OpenOCD打开GDB Server。

Openocd -f interface/raspberrypi-swd.cfg -f target/rp2040.cfg

Pico-SWD-7

保持这个终端不变,打开另一个终端窗口,浏览到构建目录中的UART Serial目录。

cd ~
cd pico pico-examples /构建/ hello_world /串行/

打开GDB并连接到OpenOCD服务器。

gdb-multiarch hello_serial.elf
(gdb)目标远程本地主机:3333

Pico-SWD-8

使用load命令将程序加载到树莓派Pico的闪存中。

(gdb)负载

开始运行代码。

(gdb)监视器重置初始化
(gdb)继续

Pico-SWD-9

如果您熟悉GDB命令,那么可以对它们进行研究。

结论

使用SWD编程和调试树莓派Pico的完整教程。了解树莓派Pico SWD接口的工作原理,树莓派Pico和树莓派SWD之间的必要连接,用SWD编程树莓派Pico,使用GDB调试树莓派Pico使用SWD。

5的反应

  1. 感谢。

    只是想让你知道在表格中有一个拼写错误关于如何连接SWD和Pico。

    GPIO 24 (PIN 18)和GPIO 25 (PIN 18)

    1. 技术上,这应该是可能的,但不是直接与st链接固件。你必须闪光一个不同的固件(Segger’s J Link或Black Magic Probe)。我个人还没试过。

  2. 这是一个很好的程序,我遇到的问题之一是,社会福利署的连接对我来说只是偶尔有效。我通过找到和之间最短的线来解决这个问题。这是可能的,也许我原来的电线是一个问题,但它似乎合理使用短电线,因为高带宽。我已经看到了其他设置,使用缎带连接器,也许双绞线会更好的工作,以及。我现在的电线大约3英寸,连接起来没有任何问题。

留下一个回复

您的电邮地址将不会公布。

Electronicshub图标
Baidu
map