
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工具链
1xcode-select --install
2
3# 验证安装
4xcode-select -v
5clang --version
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
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的信息
1brew install picotool
编译示例项目
以blink为例
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即可
全新的逆向题出题方向?
创建自己的项目并编译
1cd ~/pico
2mkdir my_project && cd my_project
3# ~/pico/my_project
创建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
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 文件到你的项目文件夹
1cp ../pico-sdk/external/pico_sdk_import.cmake .
创建build文件夹
1mkdir build
现在的目录结构如下:
1# ~/pico/my_project
2build
3CMakeLists.txt
4main.c
5pico_sdk_import.cmake
然后就可以像之前那样构建
1cd build
2# ~/pico/my_project/build
3export PICO_SDK_PATH=../../pico-sdk
4cmake .. -DPICO_BOARD=pico2
5make -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做出有趣的东西