在本教程中,我们将学习如何使用SWD将程序上传到树莓派Pico,并使用SWD进行调试。到目前为止,我们一直使用拖放的方式上传程序到Pico。但如果您想使用Pico的SWD接口进行编程和调试,那么本教程非常适合您。学习用SWD编程树莓派Pico的步骤,以及用SWD、OpenOCD和GDB调试代码。
社会福利署简介
你曾经开发过嵌入式系统应用程序吗?如果答案是肯定的,那么您可能对“调试”这个术语很熟悉。在嵌入式系统中,调试和测试过程是非常关键的,因为我们经常在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板上RP2040的2线SWD接口可以实现以下功能:
- 上传程序到外部闪存或内部SRAM。
- 控制处理器的执行状态,如运行、暂停、步进、设置断点等。
- 通过系统总线访问处理器内存和IO外设(内存映射)。
安装树莓派系统下的Tools
如前所述,调试任何ARM Cortex Processor都需要GDB和OpenOCD。所以,我们现在将安装这两个在我们的主机系统,在我的情况下是一个运行最新的树莓派操作系统的树莓派。
OpenOCD
要理解SWD协议并控制ARM Cortex处理器(在RP2040情况下是两个),您需要一个名为OpenOCD的特殊转换器。现在让我们看看如何在树莓派中安装OpenOCD。
注意:以下步骤将在/home/pi/pico/ OpenOCD中安装OpenOCD
这将安装OpenOCD所需的所有工具。接下来,我们将把OpenOCD克隆到我们的主机上并安装OpenOCD。依次输入以下命令。
我将花一些时间来构建和安装OpenOCD。坐好放松。
广东发展银行
下一步是安装GDB。要安装GDB Multi-Arch,使用以下命令:
在下一节中,我们将了解如何使用OpenOCD和GDB进行调试。
连接树莓派和树莓派
在了解如何使用SWD编程树莓派Pico之前,您必须首先正确地连接树莓派Pico。
重要提示:我不知道确切的原因,但在连接之前,我不得不关闭树莓派,以成功地使用SWD编程树莓派。我在树莓派论坛上读到,树莓派和目标,即树莓派Pico在这种情况下必须在连接SWD引脚之前关机。
因为树莓派的Pico是通过USB连接到树莓派的(给它充电),我所要做的就是关闭树莓派,建立SWD连接,然后给树莓派上电。
下表显示了您需要在树莓派和树莓派Pico之间建立的所有必要连接。
覆盆子π皮科 |
覆盆子π |
SWDIO | Gpio 24(引脚18) |
社署接地 |
接地(销20) |
SWCLK | Gpio 25(引脚22) |
用SWD编程树莓派
让我们以“Blink”程序为例来理解树莓派Pico SWD编程是如何工作的。如果你还记得在“用C编程树莓派Pico”教程中,我们已经构建了Blink程序,这导致了一些目标文件。
对于通过USB进行拖放编程,我们使用了.uf2文件。但是OpenOCD使用。elf文件上传程序。
使用以下命令用SWD编程树莓派Pico。
上面的命令将调用OpenOCD来编程闪烁。elf文件到树莓派Pico,复位单板并退出OpenOCD。如果一切正常,你的终端应该会显示类似这样的东西,树莓派的LED应该会开始闪烁。
调试树莓派Pico与SWD
现在让我们看看如何调试使用SWD、OpenOCD和GDB的代码。我们已经在前面的步骤中安装了GDB。现在,要在构建文件中包含调试相关的设置,您必须使用CMake指令'-DCMAKE_BUILD_TYPE =调试”。
但在此之前,你需要从' pico-examples '目录中删除' build '目录,并创建一个新的' build '目录。使用以下命令构建带有Debug信息的示例。
让我们使用' 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目录并构建它。
使用OpenOCD打开GDB Server。
保持这个终端不变,打开另一个终端窗口,浏览到构建目录中的UART Serial目录。
打开GDB并连接到OpenOCD服务器。
使用load命令将程序加载到树莓派Pico的闪存中。
开始运行代码。
如果您熟悉GDB命令,那么可以对它们进行研究。
结论
使用SWD编程和调试树莓派Pico的完整教程。了解树莓派Pico SWD接口的工作原理,树莓派Pico和树莓派SWD之间的必要连接,用SWD编程树莓派Pico,使用GDB调试树莓派Pico使用SWD。
5的反应
感谢。
只是想让你知道在表格中有一个拼写错误关于如何连接SWD和Pico。
GPIO 24 (PIN 18)和GPIO 25 (PIN 18)
我更新了别针。谢谢你!
社署可否使用ST-LINK ?我身边碰巧没有树莓派。
技术上,这应该是可能的,但不是直接与st链接固件。你必须闪光一个不同的固件(Segger’s J Link或Black Magic Probe)。我个人还没试过。
这是一个很好的程序,我遇到的问题之一是,社会福利署的连接对我来说只是偶尔有效。我通过找到和之间最短的线来解决这个问题。这是可能的,也许我原来的电线是一个问题,但它似乎合理使用短电线,因为高带宽。我已经看到了其他设置,使用缎带连接器,也许双绞线会更好的工作,以及。我现在的电线大约3英寸,连接起来没有任何问题。