https://www.hackster.io/grisaficarlo/programming-a-raspberry-pi-pico-remotely-e23db5
通过Balena使用Raspberry Pi 4和Pico轻松更新Pico上的固件。
此项目中使用的东西
硬件组件
软件应用程序和在线服务
故事
本指南是代表 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,以便稍后轻松地连接到它。
- 转到此存储库 https://github.com/COTASPAR/microcontroller-rig
- 单击"deploy with Balena"按钮
- 填写如下选项:
- 填写选项(包括您的Wi-Fi凭据,以便Pi知道如何连接到internet,然后连接到Balena云):
- 下载balenaOS image
- 使用Etcher将固件烧录到sd卡上
- 将树莓派Pico连接到树莓派4
- 根据 Pico文档上显示的调试引脚连线
https://datasheets.raspberrypi.org/pico/getting-started-with-pico.pdf#page=21
随着树莓派4准备就绪和Pico连接,我们可以研究如何远程烧录。
第 2 部分:代码空间
- Fork 这个代码仓库 https://github.com/COTASPAR/fade
- 为您刚刚Fork的代码仓库创建一个代码空间
- 在代码空间终端上运行chmod +x pico_setup.sh
- 运行。/pico_setup.sh
- 运行 export PICO_SDK_PATH="/workspaces/fade/pico/pico-sdk"
现在,您应该能够构建一个Pico项目,例如本repo中包含的LED淡入淡出示例:
- 运行以下项目以构建淡出项目(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,实际上,从我们的代码空间环境远程烧录它。
- 运行 balena devices --app MCU-remote 远程查找运行应用程序的设备的 UUID。
>>>https://dashboard.balena-cloud.com/devices/<YOUR_DEVICE_UUID>/summary
- 运行balena tunnel <YOUR_DEVICE_UUID> -p 22222:4321 以确保我们能够通过防火墙。
- 单击+符号以打开另一个终端窗口
从这里开始,我们需要停留在您刚刚在代码空间中打开的第二个终端窗口中。下面是将我们的pwm_led.elf文件放到Pico上的手动步骤。不过,与之前的编译脚本类似,我还提供了一个自动执行此步骤的上载脚本,因此如果时间紧迫,可以跳过这一部分。
- 查找您的容器 ID 并记下它,这将允许我们直接将文件复制到 RPi4 上运行的容器:
ssh -Tp 4321 root@127.0.0.1 balena ps -aqf "name=flashing"
>>> <YOUR_CONTAINER_ID>
- 将文件添加到 RPi4 主机操作系统:
scp -P 4321./build/pwm_led.elf root@127.0.0.1:/mnt/data/
- 将文件以 /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
- 运行此系统以插入您的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 以查看板的内存内容,因为它正在通过我们的代码。敬请期待更新!