🛠 Pico SDK 2.x sur une carte RP2350 générique : CMake, board header et PICO_BOARD
Objetivos
El Pico C/C++ SDK (rama 2.x) es la herramienta oficial para explotar el RP2350 en C: GPIO, PIO, HSTX, doble arquitectura. Trampa conocida de las tarjetas genéricas: el SDK master proporciona los encabezados pico2/pico2_w pero ningún encabezado «generic RP2350» — o bien tu tarjeta está admitida por un repositorio de terceros que proporciona su header, o bien escribes el tuyo (pico-sdk README). Este tutorial: montar un proyecto CMake limpio, apuntar a PICO_BOARD=pico2 para una tarjeta compatible con Pico-2, y crear un board header mínimo para un módulo exótico.
Material
- 1 × tarjeta RP2350 genérica + cable USB de datos
- pico-sdk 2.x, CMake ≥ 3.13, toolchain arm-none-eabi-gcc (o riscv32 para el tutorial ARCHSEL)
- pico-examples como referencia de compilación
- Herramienta picotool para inspeccionar el UF2 generado
Comandos completos
# 1) Toolchain + SDK (Linux ; sous Windows : WSL ou l'installateur officiel)
git clone https://github.com/raspberrypi/pico-sdk.git --branch master
export PICO_SDK_PATH=$PWD/pico-sdk
# 2) Projet minimal
mkdir clignot && cd clignot
cat > CMakeLists.txt <<'EOF'
cmake_minimum_required(VERSION 3.13)
include($ENV{PICO_SDK_PATH}/pico_sdk_init.cmake)
project(clignot C CXX ASM)
pico_sdk_init
add_executable(clignot main.c)
target_link_libraries(clignot pico_stdlib)
pico_add_extra_executables(clignot) # génère .uf2
EOF
cat > main.c <<'EOF'
#include "pico/stdlib.h"
#define LED 25
int main(void) {
stdio_init_all;
gpio_init(LED); gpio_set_dir(LED, GPIO_OUT);
for (;;) { gpio_put(LED, !gpio_get(LED)); sleep_ms(250); }
}
EOF
# 3) Configurer pour une carte compatible Pico 2, puis compiler
mkdir build && cd build
cmake -DPICO_BOARD=pico2 ..
make -j
picotool info clignot.uf2 # affiche le nom de board embarqué
Board header propio (módulo genérico)
Copia pico-sdk/src/boards/include/boards/pico2.h a mes_boards/generic_rp2350.h, luego ajusta según el pinout de TU tarjeta: #define NUM_BANK0_GPIOS 30 (RP2350A) o 48 (RP2350B), el pin del LED, el oscilador de 12 MHz, y pasa la carpeta de encabezados a CMake con -DPICO_BOARD=generic_rp2350 y la variable de búsqueda de encabezados de board.
Verificación esperada
make produce clignot.uf2; picotool info muestra «Program information» con el board pico2. Deposita el UF2 en modo BOOTSEL: el LED parpadea. El mismo binario funciona en cualquier tarjeta con pinout Pico-2 (PicoPlus2, Tiny2350, etc.) ya que la compatibilidad es a nivel de board/SDK, no de silicio — el encapsulado QFN-60/80 del RP2350 no es, de hecho, pin-compatible con el QFN-56 del RP2040.
Errores frecuentes
Could not find PICO_BOARD=xxx: el header no existe ni en el SDK ni en tus carpetas — este es EL problema de las tarjetas genéricas; añade la carpeta de encabezados o toma el header del repositorio del fabricante (el core Arduino-Pico incluye uno por tarjeta, incluido un «Generic RP2350»).- Olvidar
pico_sdk_initdespués deproject: las funcionespico_*son desconocidas — el orden de include/init del SDK 2.x es estricto. - Compilar en ARM creyendo apuntar a RISC-V: por defecto
PICO_PLATFORM=rp2350= Arm Cortex-M33; para Hazard3,PICO_PLATFORM=rp2350-riscv+ toolchain riscv32 de pico-sdk-tools. - UF2 ausente en la carpeta de build: falta
pico_add_extra_executables— sin esta línea, solo existen el .bin/.elf. - Reutilizar un CMakeLists de un tutorial de RP2040 pre-SDK 2.0: el SDK 2.x ha reorganizado el bootstrap y los nombres de plataformas — parte de la plantilla oficial, no de una vieja entrada de blog.
- Descuidar el XOSC de 12 MHz en el header: un board header que declara un cristal incorrecto produce un timer erróneo — los
sleep_ms(250)no duran 250 ms. - Olvidar que el SDK debe conocer el número de GPIO:
NUM_BANK0_GPIOSincorrecto (30 vs 48) y los pines altos de un RP2350B permanecen inaccesibles.
Otros tutoriales para esta placa
- Flasher MicroPython sur une carte RP2350 générique et faire clignoter la première LED
- Console série sur RP2350 : USB CDC natif et UART0 de secours
- Lire l'ADC 12 bits et le capteur de température interne du RP2350
- Exploiter les 3 blocs PIO et 12 machines d'état du RP2350 (avec IRQ dédiées)
- Basculer les cœurs de Arm Cortex-M33 à Hazard3 RISC-V avec ARCHSEL
- Secure boot et TrustZone-M sur RP2350 : signer son firmware sans se faire avoir
Ejemplos de código para esta placa
clignotante.pyPythonbouton-interruption.pyPythonpwm-servo.pyPythonlecture-adc.pyPythonneopixel.pyPythonoled-i2c.pyPython