Raspberry Pi Pico2 在 macOS 上的 C/C++ 开发环境 (Pico SDK) 搭建

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
- 防护: 快速毛刺检测器
出于成本考虑,我建议使用国产的pico2,售价~12元
需要注意的是,除了pico-sdk之外,pico还支持许多别的方式开发。您可以根据需求和情况选择合适的开发方式。
| 语言 | 评价 |
|---|---|
| c/cpp(pico-sdk) | 官方,支持pico所有特性 |
| c(arduino) | 基于pico-sdk封装,适合熟悉arduino的 |
| rust | 内存安全,对于不会rust的学习曲线陡峭 |
| micropython/circuitpython | 慢得没边了 |
本文介绍Pico SDK的开发环境搭建
安装CMake工具链
Shell
xcode-select --install
# 验证安装
xcode-select -v
clang --versionShell
brew install cmake
brew install gcc-arm-embedded
# 注意不要安装网络上教程的 arm-none-eabi-gcc 包,它缺少 nosys.specs 文件
# 验证安装
cmake --version
arm-none-eabi-gcc -v安装Pico SDK
Shell
# ~
mkdir pico
cd pico
# ~/pico
git clone https://github.com/raspberrypi/pico-examples.git --branch master --depth=1
git clone https://github.com/raspberrypi/pico-sdk.git --branch master --depth=1
cd pico-sdk
# ~/pico/pico-sdk
git submodule update --init --depth=1可选安装picotool,可以查看固件和pico的信息
Shell
brew install picotool编译示例项目
以blink为例
Shell
cd ~/pico/pico-examples
mkdir build && cd build
# ~/pico/pico-examples/build
export PICO_SDK_PATH=../../pico-sdk
# 建议把pico sdk的绝对路径写入path中
cmake .. -DPICO_BOARD=pico2
cd blink_simple
# ~/pico/pico-examples/build/blink_simple
make -j
然后将生成的.uf2固件写入pico即可
全新的逆向题出题方向?
创建自己的项目并编译
Shell
cd ~/pico
mkdir my_project && cd my_project
# ~/pico/my_project创建main.c
C
#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/gpio.h"
#include "pico/binary_info.h"
const uint LED_PIN = 25;
int main()
{
bi_decl(bi_program_description("This is a test binary."));
bi_decl(bi_1pin_with_name(LED_PIN, "On-board LED"));
stdio_init_all();
gpio_init(LED_PIN);
gpio_set_dir(LED_PIN, GPIO_OUT);
while (1)
{
gpio_put(LED_PIN, 0);
sleep_ms(250);
gpio_put(LED_PIN, 1);
puts("Hello World\n");
sleep_ms(1000);
}
}创建CMakeLists.txt
Text
cmake_minimum_required(VERSION 3.13)
include(pico_sdk_import.cmake)
project(test_project C CXX ASM)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
pico_sdk_init()
add_executable(main
main.c
)
pico_enable_stdio_usb(main 1)
pico_enable_stdio_uart(main 1)
pico_add_extra_outputs(main)
target_link_libraries(main pico_stdlib)然后从 pico‑sdk 安装目录的external文件夹中复制 pico_sdk_import.cmake 文件到你的项目文件夹
Shell
cp ../pico-sdk/external/pico_sdk_import.cmake .创建build文件夹
Shell
mkdir build现在的目录结构如下:
Text
# ~/pico/my_project
build
CMakeLists.txt
main.c
pico_sdk_import.cmake然后就可以像之前那样构建
Shell
cd build
# ~/pico/my_project/build
export PICO_SDK_PATH=../../pico-sdk
cmake .. -DPICO_BOARD=pico2
make -j后续改动代码重新编译时,只需要重新执行make命令,然后将产物.uf2烧录。
参考阅读
- pico-sdk主页:https://github.com/raspberrypi/pico-sdk
- pico-sdk快速开始文档:https://rptl.io/pico-get-started
- 编写
CMakeLists.txt:https://cmake.org/cmake/help/book/mastering-cmake/chapter/Writing%20CMakeLists%20Files.html - pico-sdk文档:https://rptl.io/pico-c-sdk
- pico-sdk示例:https://github.com/raspberrypi/pico-examples
祝大家用pico2做出有趣的东西