Timmy's Blog

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

1.0千字 预计阅读 4 分钟 - 次浏览


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 --version
Shell
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烧录。

参考阅读

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

评论

评论加载中…