首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >nanoFramework 正式支持 Raspberry Pi Pico RP2040

nanoFramework 正式支持 Raspberry Pi Pico RP2040

作者头像
桑榆肖物
发布2026-05-25 10:09:32
发布2026-05-25 10:09:32
1450
举报

期待已久!nanoFramework 社区终于在近期正式合并了对树莓派 RP2040 及其 Wi-Fi 版本的底层支持。另外,RP2350 开发板的支持也在规划中。

1. 背景

Raspberry Pi Pico 是树莓派基金会推出的一款基于 RP2040 双核微控制器的开发板,因其低成本、丰富的 GPIO 和强大的性能而备受嵌入式开发者欢迎。

nanoFramework 作为一个开源的 .NET 运行时环境,长期以来一直受到社区的热切期待,希望能在 Pico 上运行 .NET 应用。

相关的 GitHub 议题 #687 "Support for Raspberry Pi Pico"[1] 已于 2026年4月23日 完成并关闭,标志着官方对 RP2040 的支持正式到位。

2. 快速上手

官方的 nanoff 工具已经支持 RP2040 和 其 Wifi 版本的最新固件,直接使用 nanoff 命令行工具即可一键秒刷。

按住开发板上的 BOOT/BOOTSEL 键不放,插入 USB 线连上电脑,识别为 U 盘后松开按键,然后在终端执行:

代码语言:javascript
复制
# 针对普通 RP2040 开发板
nanoff --platform rpi_pico --target RP_PICO_RP2040 --update

# 针对带 Wi-Fi 的版本
nanoff --platform rpi_pico --target RP_PICO_W_RP2040 --update
固件烧录
固件烧录

固件烧录

关于 nanoff 相关使用和 nanoFramework 快速入门,可以参考官方文档,或我之前的 nanoFramework 系列文章。

如果你不想用命令行工具,也可以去 Cloudsmith[2] 仓库下载 uf2 固件,将下载的 uf2 文件拖放到设备中即可完成烧录。

刷入完成后,打开 Visual Studio 的 nanoFramework 插件,就可以看到设备了。

设备在线
设备在线

设备在线

3. 运行测试

对于这个设备的测试,如果想快速的在物理世界看到控制结果,那么你可能会兴奋的打开 VS,准备写一段控制板载 LED 闪烁,或者读取板载 BOOT 按键的代码。

不过,你大概率会碰壁,因为我就是这样过来的。特别是测试未焊接的板子。

3.1 为什么不能直接点亮板载 LED

我这边测试的是微雪 RP2040-Zero 迷你开发板,板载 LED 是一颗连接在 GPIO 16 上的 WS2812。

这种灯需要极其严格的纳秒级时序,通常依赖 RP2040 独有的 PIO 外设。

但目前因为刚刚支持 nanoFramework 的 RP2040 底层尚未实现 PIO 支持,也没有类似 ESP32 那种傻瓜式的 RMT 驱动。所以,目前还无法直接通过 GPIO API 来控制板载 LED。

RP2040-Zero
RP2040-Zero

RP2040-Zero

如果自己来实现,就需要费很大的功夫了,还是等官方后续更新吧。

3.2 如何测试

这块板子上的 RESET 是必然不能用的,虽说还有一个 BOOT 按键,但连接的是 QSPI_SS_N 引脚,不像 ESP32 那样直接把 BOOT 键当普通按钮用,如果想用需要费上一番功夫。

这样看起来想快速做个简单测试,这两条路都不太好走。那么如何快速测试呢?其实思路也很简单,我们只需要额外一根杜邦线,或是回形针,金属镊子即可。

然后,挑一个边缘的 GPIO,将其配置为“带有内部上拉的输入模式”。这样它默认是高电平,只要将它和 GND 短接一下,就会产生一个完美的低电平信号,来测试 GPIO 输入功能。

不过,需要注意的是,针对这个板子来说,GNG 在左边,而且前面是 5v,GNG,3v3,GP29 挨着,而且丝印位置容易误读,搞错直接设备报废,是极其危险的。

为了防止手抖误触,我们可以使用右边的逻辑引脚,GP0、GP1、GP2、GP3 这四个引脚都在右侧边缘位置,误触的风险较小。

这样测试思路就很清晰了:

  • 在代码里配置 GP0 为输出模式,并拉低,扮演 GND 的角色
  • 配置 GP1 为输入模式,带上内部上拉,默认是高电平

这样,只要把 GP0 和 GP1 短接一下,就会看到 GP1 变为低电平,具体的事件触发代码如下:

代码语言:javascript
复制
public static void Main()
{
    Debug.WriteLine("RP2040 C# 极简测试启动!");

    GpioController gpio = new GpioController();

    // 设置 GP0 为输出,并拉低,扮演 GND 的角色
    GpioPin fakeGndPin = gpio.OpenPin(0);
    fakeGndPin.SetPinMode(PinMode.Output);
    fakeGndPin.Write(PinValue.Low);

    // 设置 GP1 为带有内部上拉的输入模式
    GpioPin testPin = gpio.OpenPin(1);
    testPin.SetPinMode(PinMode.InputPullUp);

    // 监听 GP1 的引脚电平变化事件
    testPin.ValueChanged += (sender, e) => {
        // 当 GP1 被短接到 GP0 时,触发事件
        if (e.ChangeType == PinEventTypes.Falling)
        {
            Debug.WriteLine("⚡ 触发了点击事件!(GP1 与 GP0 短接)");
        }
    };

    // 保持主线程运行,等待事件触发
    Thread.Sleep(Timeout.Infinite);
}
测试结果
测试结果

测试结果

4. 最后

总的来说,nanoFramework 对 RP2040 的支持是一个非常令人兴奋的消息,虽然目前还处于初期阶段,但基础功能已经到位。未来随着官方对 PIO 等功能的支持,我们将能够在 Pico 上实现更多丰富的 .NET 应用,敬请期待!

References

[1] #687 "Support for Raspberry Pi Pico": https://github.com/nanoframework/Home/issues/687?wt.mc_id=DT-MVP-5005195 [2] Cloudsmith: https://cloudsmith.io/~net-nanoframework/repos/nanoframework-images/packages/detail/raw/RP_PICO_RP2040/#versions

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-05-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 桑榆肖物 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 背景
  • 2. 快速上手
  • 3. 运行测试
    • 3.1 为什么不能直接点亮板载 LED
    • 3.2 如何测试
  • 4. 最后
    • References
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档