麦斯科技 · 2021年05月15日

远程编程树莓派Pico

https://www.hackster.io/grisaficarlo/programming-a-raspberry-pi-pico-remotely-e23db5

通过Balena使用Raspberry Pi 4和Pico轻松更新Pico上的固件。

_b9l3a518jE.jpg

此项目中使用的东西

硬件组件

微信图片_20210515170156.png

软件应用程序和在线服务

微信图片_20210515170235.png

故事

本指南是代表 Arm 软件开发团队创建的,请关注我们的推特:@ArmSoftwareDev和 YouTube:Arm软件开发人员 以获得更多资源!

关于

如果您正在维护一个开源的嵌入式项目,可能很难安装新的dev,因为特定设置的复杂性和个性化可能会有很大的不同。此外,如果您要接收来自社区的贡献,您可能需要一种通过自动化测试来确保其有效性的方法。出于这个原因,我已经着手寻找一个工作流,它允许我远程闪存嵌入式硬件(最初只是一个Raspberry Pi Pico),并将社区PRs与GitHub操作集成到一个测试框架中。这将自动确保它们在合并更改之前通过一系列测试,从而减少为嵌入式项目开发的摩擦。

概述

本指南将重点介绍如何使用GitHub代码空间设置远程flash rig,它允许我们远程处理现有的嵌入式项目,更改代码,然后直接从在线环境中用新代码flash我们的Raspberry Pi Picos。这是由运行balenaOS的Raspberry Pi 4实现的,我们从代码空间连接到balenaOS。

好处:

  • 可重复设置
  • 轻松上开发板
  • 目标设备上的自动测试

缺点:

  • -需要额外的硬件

第 1 部分:balenaOS

首先,用balenaOS设置一个Raspberry Pi 4,以便稍后轻松地连接到它。

  1. 转到此存储库 https://github.com/COTASPAR/microcontroller-rig
  2. 单击"deploy with Balena"按钮
  3. 填写如下选项:
  4. 填写选项(包括您的Wi-Fi凭据,以便Pi知道如何连接到internet,然后连接到Balena云):
  5. 下载balenaOS image
  6. 使用Etcher将固件烧录到sd卡上
  7. 将树莓派Pico连接到树莓派4
  8. 根据 Pico文档上显示的调试引脚连线

https://datasheets.raspberrypi.org/pico/getting-started-with-pico.pdf#page=21

随着树莓派4准备就绪和Pico连接,我们可以研究如何远程烧录。

第 2 部分:代码空间

  1. Fork 这个代码仓库 https://github.com/COTASPAR/fade
  2. 为您刚刚Fork的代码仓库创建一个代码空间
  3. 在代码空间终端上运行chmod +x pico_setup.sh
  4. 运行。/pico_setup.sh
  5. 运行 export PICO_SDK_PATH="/workspaces/fade/pico/pico-sdk"

现在,您应该能够构建一个Pico项目,例如本repo中包含的LED淡入淡出示例:

  1. 运行以下项目以构建淡出项目(pwm_led.c):

mkdir build
cd build
cmake..
make

或者,我还包含了一个名为compile.sh的bash脚本,它将在您对其进行更改后再次编译您的pwmèled.c文件。这样,您就不必每次都重新执行上述步骤。

第 3 部分:balena CLI

接下来,使用balena CLI 轻松地隧道进入树莓派设备发送我们刚刚制作的编译文件 (/build/pwm_led.elf) 远程烧录我们的 Pico。

要添加balena CLI ,运行以下命令:

export PATH="$PATH:/workspaces/fade/balena-cli"
balena login

然后选择凭据选项并登录到您的balena帐户。

现在,我们有balena CLI可用,我们应该能够隧道到我们的树莓派4(它有Pico连接到它),并直接烧录.elf文件到Pico,实际上,从我们的代码空间环境远程烧录它。

  1. 运行 balena devices --app MCU-remote 远程查找运行应用程序的设备的 UUID。
>>>https://dashboard.balena-cloud.com/devices/<YOUR_DEVICE_UUID>/summary
  1. 运行balena tunnel <YOUR_DEVICE_UUID> -p 22222:4321 以确保我们能够通过防火墙。
  2. 单击+符号以打开另一个终端窗口

从这里开始,我们需要停留在您刚刚在代码空间中打开的第二个终端窗口中。下面是将我们的pwm_led.elf文件放到Pico上的手动步骤。不过,与之前的编译脚本类似,我还提供了一个自动执行此步骤的上载脚本,因此如果时间紧迫,可以跳过这一部分。

  1. 查找您的容器 ID 并记下它,这将允许我们直接将文件复制到 RPi4 上运行的容器:

ssh -Tp 4321 root@127.0.0.1 balena ps -aqf "name=flashing"
>>> <YOUR_CONTAINER_ID>
  1. 将文件添加到 RPi4 主机操作系统:
scp -P 4321./build/pwm_led.elf root@127.0.0.1:/mnt/data/
  1. 将文件以 /mnt/data/pwm_led.elf(主机操作系统)复制到烧录的容器中:
ssh -Tp 4321 root@127.0.0.1 balena cp /mnt/data/pwm_led.elf <YOUR_CONTAINER_ID>:/pico_flashing/pwm_led.elf
  1. 运行此系统以插入您的RPi4容器,并执行抓取.elf文件的命令,然后使用开放式文件将其烧录到您的Pico:
ssh -p 4321 root@127.0.0.1 'balena exec <YOUR_CONTAINER_ID> openocd -f interface/raspberrypi-swd.cfg -f target/rp2040.cfg -c "program /pico_flashing/pwm_led.elf verify reset exit"'

要自动执行所有上传步骤,只需运行 ./upload.sh 脚本。

作为回顾,您已将固件部署到连接到树莓派Pico的树莓派 4 上,然后使用 GitHub 代码空间更改该存储库上的代码,并通过运行./编译.sh和./上传.sh脚本远程重新翻转板。

现在,您可以使用此项目作为样板模板,以便在嵌入式设备上轻松远程运行代码(任何由 openocd 支持的设备都应该工作),在这种情况下,树莓派Pico。更改pwm_led.c文件上的代码(或添加您自己的 C/C++ Pico项目),并运行编译器和上传脚本,以单步远程烧录Pico。

我希望你发现这有助于你的嵌入式项目,特别是如果你要加入新的贡献者。我还计划另一个教程,介绍如何在收到 PR 后集成 GitHub 操作,以便自动运行Pico本身的测试,以及能够远程运行 GDB 以查看板的内存内容,因为它正在通过我们的代码。敬请期待更新!

完整的视频在这里:

https://youtu.be/_FXMx1rImZI

微信图片_20210515172921.png

推荐阅读
关注数
5845
内容数
525
定期发布Arm相关软件信息,微信公众号 ArmSWDevs,欢迎关注~
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息