Raspberry Pi Pico 2 是一款低成本、高性能的微控制器板,具有灵活的数字接口。主要功能包括

  • 处理器:RP2350,2× Arm Cortex-M33(带FPU)RISC-V Hazard3,40nm工艺,默认频率 150MHz
    • 也就是说,实际上有四个核心,可以启用其中任意两个
    • 我实测可稳定超频至250MHz,网络上也有升压超频至700MHz甚至1GHz的新闻,但这样不具备实践意义
  • 存储:
    • 520KB SRAM
    • 4MB QSPI外部Flash
    • 16KB片上XIP缓存
  • GPIO与接口:
    • 26× 多功能 GPIO 引脚(3.3V逻辑电平)
    • 4× 12位ADC通道,500ksps采样率
    • 24× PWM通道
    • 2× SPI、2× I2C、2× UART
    • 3× 可编程 IO (PIO) 块,共 12 个状态机(可模拟SD卡、VGA等接口)
  • USB与通信
    • USB 1.1控制器和PHY,支持Device和Host模式
    • 调试:3-pin ARM Serial Wire Debug (SWD)端口
  • 电源系统:输入电压 1.8V-5.5V DC,内置buck-boost SMPS稳压器
    • 支持低功耗睡眠和休眠模式
      • 但是经过测试,在深度睡眠模式下,pico的电流远大于esp32
  • 环境规格
    • 工作温度: -20°C至+85°C
    • MTBF: 182,000小时(常温)
    • 生产寿命: 至少持续工作至2040年1月
  • 安全特性
    • 安全架构: 基于Arm TrustZone for Cortex-M
    • 安全启动: 支持签名启动
    • 存储: 8KB antifuse OTP用于密钥存储
    • 加密: SHA-256加速器
    • 随机数: 硬件TRNG
    • 防护: 快速毛刺检测器

<!-- ![](image-3.png) -->

出于成本考虑,我建议使用国产的pico2,售价~12元

需要注意的是,除了pico-sdk之外,pico还支持许多别的方式开发。您可以根据需求和情况选择合适的开发方式。

语言评价
c/cpp(pico-sdk)官方,支持pico所有特性
c(arduino)基于pico-sdk封装,适合熟悉arduino的
rust内存安全,对于不会rust的学习曲线陡峭
micropython/circuitpython慢得没边了

本文介绍Pico SDK的开发环境搭建

安装CMake工具链

sh
1xcode-select --install
2
3# 验证安装
4xcode-select -v
5clang --version
sh
1brew install cmake
2brew install gcc-arm-embedded
3# 注意不要安装网络上教程的 arm-none-eabi-gcc 包,它缺少 nosys.specs 文件
4
5# 验证安装
6cmake --version
7arm-none-eabi-gcc -v

安装Pico SDK

sh
1# ~
2mkdir pico
3cd pico
4# ~/pico
5git clone https://github.com/raspberrypi/pico-examples.git --branch master --depth=1
6git clone https://github.com/raspberrypi/pico-sdk.git --branch master --depth=1
7cd pico-sdk
8# ~/pico/pico-sdk
9git submodule update --init --depth=1

可选安装picotool,可以查看固件和pico的信息

sh
1brew install picotool

编译示例项目

以blink为例

sh
1cd ~/pico/pico-examples
2mkdir build && cd build
3# ~/pico/pico-examples/build
4export PICO_SDK_PATH=../../pico-sdk
5# 建议把pico sdk的绝对路径写入path中
6cmake .. -DPICO_BOARD=pico2
7cd blink_simple
8# ~/pico/pico-examples/build/blink_simple
9make -j

然后将生成的.uf2固件写入pico即可

全新的逆向题出题方向?

创建自己的项目并编译

sh
1cd ~/pico
2mkdir my_project && cd my_project
3# ~/pico/my_project

创建main.c

c main.c
 1#include <stdio.h>
 2#include "pico/stdlib.h"
 3#include "hardware/gpio.h"
 4#include "pico/binary_info.h"
 5
 6const uint LED_PIN = 25;
 7
 8int main()
 9{
10    bi_decl(bi_program_description("This is a test binary."));
11    bi_decl(bi_1pin_with_name(LED_PIN, "On-board LED"));
12    stdio_init_all();
13    gpio_init(LED_PIN);
14    gpio_set_dir(LED_PIN, GPIO_OUT);
15    while (1)
16    {
17        gpio_put(LED_PIN, 0);
18        sleep_ms(250);
19        gpio_put(LED_PIN, 1);
20        puts("Hello World\n");
21        sleep_ms(1000);
22    }
23}

创建CMakeLists.txt

text CMakeLists.txt
 1cmake_minimum_required(VERSION 3.13)
 2include(pico_sdk_import.cmake)
 3project(test_project C CXX ASM)
 4set(CMAKE_C_STANDARD 11)
 5set(CMAKE_CXX_STANDARD 17)
 6pico_sdk_init()
 7add_executable(main
 8  main.c
 9)
10pico_enable_stdio_usb(main 1)
11pico_enable_stdio_uart(main 1)
12pico_add_extra_outputs(main)
13target_link_libraries(main pico_stdlib)

然后从 pico‑sdk 安装目录的external文件夹中复制 pico_sdk_import.cmake 文件到你的项目文件夹

sh
1cp ../pico-sdk/external/pico_sdk_import.cmake .

创建build文件夹

sh
1mkdir build

现在的目录结构如下:

text
1# ~/pico/my_project
2build
3CMakeLists.txt
4main.c
5pico_sdk_import.cmake

然后就可以像之前那样构建

sh
1cd build
2# ~/pico/my_project/build
3export PICO_SDK_PATH=../../pico-sdk
4cmake .. -DPICO_BOARD=pico2
5make -j

后续改动代码重新编译时,只需要重新执行make命令,然后将产物.uf2烧录。

参考阅读

祝大家用pico2做出有趣的东西