Seeed Studio XIAO RP2350 con Arduino
La placa Seeed Studio XIAO RP2350 ahora admite programación mediante Arduino, gracias al arduino-pico core. Esta guía te ayudará a configurar y empezar a usar Arduino en tu placa RP2350.
Características
- Potente placa MCU: Equipada con un chip Raspberry Pi RP2350 con doble núcleo Arm Cortex-M33 simétrico a 150MHz con FPU.
- Funciones de seguridad mejoradas: El arranque seguro integrado y el bootloader cifrado garantizan la seguridad de la aplicación.
- Compatibilidad de software: Compatible con C/C++ y MicroPython, lo que garantiza un desarrollo y prototipado de proyectos sencillo.
- Ricos recursos integrados: Integra un LED RGB, 2MB de Flash, 520kB de SRAM y 19 GPIO multifunción (Analógico, Digital, I²C, UART, SPI, PWM).
- 8 nuevos IO ampliados: En comparación con las anteriores MCU XIAO, la incorporación de 8 pines IO en la parte posterior admite aplicaciones más complejas.
- Diseño de energía eficiente: Consumo de energía ultrabajo de solo 50μA en modo de suspensión, lo que permite la alimentación por batería. La medición directa del voltaje de la batería a través de un IO interno mejora el sistema de gestión de batería (BMS).
- Diseño compacto del tamaño de un pulgar: Con unas dimensiones de 21 x 17.8mm, adopta el factor de forma clásico XIAO de Seeed Studio, ideal para aplicaciones con limitaciones de espacio.
- Amigable para producción: Diseño de dispositivo de montaje superficial (SMD) con todos los componentes en la parte frontal y orificios tipo sello en ambos lados, lo que facilita una producción en masa eficiente.
Especificación
| Producto | XIAO RP2040 | XIAO RP2350 |
|---|---|---|
| Procesador | Raspberry Pi RP2040 Doble Cortex-M0+ @ 133MHz | Raspberry Pi RP2350 Doble Cortex-M33 @ 150MHz, FPU |
| RAM | 264kB SRAM | 520kB SRAM |
| Flash | 2MB integrada | 2MB Flash |
| LEDs | 1x LED de usuario 1x LED de encendido 1x LED RGB | 1x LED de usuario 1x LED de encendido 1x LED RGB |
| Interfaz | 11 pines (todos PWM): 4x Analógico 11x Digital 1x I²C 1x UART 1x SPI | 19 pines (todos PWM): 3x Analógico 19x Digital 2x I²C 2x UART 2x SPI |
| Botón | 1x botón RESET 1x botón BOOT | 1x botón RESET 1x botón BOOT |
| Seguridad | - | OTP, Secure Boot, Arm TrustZone |
| Compatibilidad de software | Soporta Micropython / Arduino / CircuitPython | Soporta Micropython / Arduino / C,C++ |
| Temperatura de trabajo | -20°C-70°C | -20°C-70°C |
| Dimensiones | 21x17.8 mm | 21x17.8 mm |
Descripción general del hardware
| Distribución de pines frontal de XIAO RP2350 |
|---|
![]() |
| Distribución de pines trasera de XIAO RP2350 |
![]() |
| Componentes de XIAO RP2350 |
![]() |
¿Necesitas más detalles sobre la distribución de pines? Navega a Assets and Resources más abajo.
Mapa de pines
| Pin XIAO | Función | Pin del chip | Funciones alternativas | Descripción |
|---|---|---|---|---|
| 5V | VBUS | Entrada/Salida de alimentación | ||
| GND | ||||
| 3V3 | 3V3_OUT | Salida de alimentación | ||
| D0 | Analógico | GPIO26 | GPIO, ADC | |
| D1 | Analógico | GPIO27 | GPIO, ADC | |
| D2 | Analógico | GPIO28 | GPIO, ADC | |
| D3 | SPI0_CSn | GPIO5 | GPIO, SPI | |
| D4 | SDA1 | GPIO6 | GPIO, datos I2C | |
| D5 | SCL1 | GPIO7 | GPIO, reloj I2C | |
| D6 | TX0 | GPIO0 | GPIO, transmisión UART | |
| D7 | RX0 | GPIO1 | GPIO, recepción UART | |
| D8 | SPI0_SCK | GPIO2 | GPIO, reloj SPI | |
| D9 | SPI0_MISO | GPIO4 | GPIO, datos SPI | |
| D10 | SPI0_MOSI | GPIO3 | GPIO, datos SPI | |
| D11 | RX1 | GPIO21 | GPIO, recepción UART | |
| D12 | TX1 | GPIO20 | GPIO, transmisión UART | |
| D13 | SCL0 | GPIO17 | GPIO, reloj I2C | |
| D14 | SDA0 | GPIO16 | GPIO, datos I2C | |
| D15 | SPI1_MOSI | GPIO11 | GPIO, datos SPI | |
| D16 | SPI1_MISO | GPIO12 | GPIO, datos SPI | |
| D17 | SPI1_SCK | GPIO10 | GPIO, reloj SPI | |
| D18 | SPI1_Csn | GPIO9 | Csn | |
| ADC_BAT | GPIO29 | Leer el valor de voltaje de la batería | ||
| ADC_BAT_EN | GPIO19 | Habilitar detección de voltaje de la batería | ||
| Reset | RUN | RUN | ||
| Boot | RP2040_BOOT | Entrar en modo Boot | ||
| CHARGE_LED | NCHG | CHG-LED_Red | ||
| RGB LED | GPIO22 | LED RGB | ||
| USER_LED | GPIO25 | Luz de usuario_Amarilla |
Requisitos previos
Para comenzar, asegúrate de tener:
- Una placa RP2350
- El Arduino IDE
- Un cable USB
Configuración del software
1. Instalar el Arduino IDE
Descarga e instala la última versión del Arduino IDE desde el sitio oficial: Arduino Software.
2. Añadir compatibilidad con la placa RP2350
-
Abre el Arduino IDE y navega a File > Preferences.
-
En el campo Additional Boards Manager URLs, añade esta URL:
https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json
-
Haz clic en OK para guardar la configuración.
-
Ve a Tools > Board > Boards Manager.
-
En el Boards Manager, busca pico y haz clic en Install.
-
Después de la instalación, ve a Tools > Board y selecciona la placa que se muestra a continuación como tu placa.
Asegúrate de instalar la versión 4.2.0 o posterior para obtener compatibilidad completa con la placa XIAO RP2350.

3. Cargar un sketch
Antes de cargar un sketch, pon tu XIAO RP2350 en modo BOOT. Usa uno de los métodos siguientes:
- Método 1: Antes de conectar al ordenador
- Método 2: Mientras está conectado al ordenador


- Abre el Arduino IDE y crea un nuevo sketch.
- Escribe tu código. Por ejemplo, usa el código de ejemplo
Blink. - Ve a Tools > Port y selecciona el puerto donde está conectado tu RP2350.

Verificación del rendimiento de bajo consumo
El diseño de la fuente de alimentación de XIAO RP2350 ofrece un rendimiento excelente en escenarios de bajo consumo y puede aplicarse ampliamente a diversas aplicaciones de baja potencia.
Conexión de la batería
El XIAO RP2350 puede alimentarse con una batería de litio de 3,7 V. Puedes consultar el siguiente diagrama para el cableado.

Ten cuidado de no cortocircuitar los terminales positivo y negativo y quemar la batería y el equipo al soldar.
Grabar el firmware
En el circuito de muestreo de batería del XIAO RP2350, se adopta una solución de muestreo de voltaje basada en el SX1801CCR. Se forma un circuito divisor de voltaje mediante dos resistencias de 470 kΩ, lo que da como resultado una relación de división de voltaje de 2. El programa utiliza 3,3 V como voltaje de referencia y el voltaje real de la batería puede calcularse mediante la fórmula de restauración de voltaje.
El siguiente ejemplo utiliza un enfoque de reinicio por watchdog para simular el modo de suspensión profunda, ya que el IDE de Arduino no puede integrar fácilmente la biblioteca pico-extras necesaria para una suspensión profunda real.
Program
#include <Arduino.h>
#include "hardware/powman.h"
#include "hardware/adc.h"
#include "hardware/watchdog.h"
// ── Pin Definitions ──────────────────────────────────────────────
#define BAT_ADC_EN 19
#define BAT_ADC_READ 29
#define SLEEP_SEC 30
#define VOLTAGE_DIVIDER_RATIO 2.0f
#define VBAT_LOW_THRESHOLD 3.5f
#define SCRATCH_MAGIC 0xDEADBEEF
// ── Global voltage storage (can be output via other methods, e.g., LED alert) ──────────
static float g_vbat = 0.0f;
static bool g_lowBat = false;
// ── Disable ADC Peripheral ──────────────────────────────────────
static void disableADC() {
adc_run(false);
hw_clear_bits(&adc_hw->cs, ADC_CS_EN_BITS);
}
// ── Read Battery Voltage ─────────────────────────────────────────
static float readVbat() {
digitalWrite(BAT_ADC_EN, HIGH);
delayMicroseconds(500);
adc_init();
adc_gpio_init(BAT_ADC_READ);
adc_select_input(3);
analogReadResolution(12);
(void)analogRead(BAT_ADC_READ); // Discard the first reading
int32_t sum = 0;
for (int i = 0; i < 5; i++) {
sum += analogRead(BAT_ADC_READ);
delayMicroseconds(200);
}
digitalWrite(BAT_ADC_EN, LOW); // ★ Disable voltage divider immediately after sampling
disableADC();
return ((float)sum / 5.0f / 4095.0f * 3.3f) * VOLTAGE_DIVIDER_RATIO;
}
// ── Shut Down All Unnecessary Peripherals ─────────────────────────
static void shutdownPeripherals() {
// ADC
digitalWrite(BAT_ADC_EN, LOW);
disableADC();
// Pull down all unused pins to eliminate floating leakage
const uint8_t unused[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 14, 15, 16, 17, 18};
for (uint8_t pin : unused) {
pinMode(pin, INPUT_PULLDOWN);
}
// Reduce frequency to 18MHz to significantly reduce dynamic power consumption
set_sys_clock_khz(18000, false);
}
// ── Low-Power Wait (Watchdog Reboot to Simulate Sleep) ───────────
static void sleepWithReboot(uint32_t seconds) {
// Start POWMAN Timer (LPOSC 1kHz)
if (!powman_timer_is_running()) powman_timer_start();
powman_timer_set_1khz_tick_source_lposc();
// Store wake-up target time in scratch registers
uint64_t wake_ms = powman_timer_get_ms() + (uint64_t)seconds * 1000ULL;
watchdog_hw->scratch[4] = SCRATCH_MAGIC;
watchdog_hw->scratch[5] = (uint32_t)(wake_ms & 0xFFFFFFFF);
watchdog_hw->scratch[6] = (uint32_t)(wake_ms >> 32);
shutdownPeripherals();
// Watchdog timeout reboot (max 8.3s), CPU waits in low-frequency WFE
rp2040.wdt_begin(8300);
while (true) {
__wfe();
}
}
// ─────────────────────────────────────────────────────────────────
void setup() {
// First action on power-up: pull ADC_EN low
pinMode(BAT_ADC_EN, OUTPUT);
digitalWrite(BAT_ADC_EN, LOW);
pinMode(BAT_ADC_READ, INPUT);
// ── Check if waking up from sleep reboot ───────────────────────
if (watchdog_hw->scratch[4] == SCRATCH_MAGIC) {
if (!powman_timer_is_running()) powman_timer_start();
powman_timer_set_1khz_tick_source_lposc();
uint64_t wake_ms = (uint64_t)watchdog_hw->scratch[5]
| ((uint64_t)watchdog_hw->scratch[6] << 32);
uint64_t now_ms = powman_timer_get_ms();
if (now_ms < wake_ms) {
// Not time to wake up yet, continue waiting
sleepWithReboot((uint32_t)((wake_ms - now_ms) / 1000 + 1));
// Will not return
}
// Time to wake up, clear flag
watchdog_hw->scratch[4] = 0;
}
// ── Restore normal frequency, execute application logic ───────
set_sys_clock_khz(125000, true);
// Sample voltage
g_vbat = readVbat();
g_lowBat = (g_vbat < VBAT_LOW_THRESHOLD);
// TODO: Process sampling results here
// Example: Turn on LED alert for low battery
// if (g_lowBat) { digitalWrite(LED_PIN, HIGH); delay(100); ... }
// Enter sleep mode 2 seconds after power-up
delay(2000);
}
void loop() {
sleepWithReboot(SLEEP_SEC);
// Will not return; restarts from setup() after wake-up
}
A continuación puedes cargar el programa.
Como alternativa, puedes utilizar nuestro firmware preescrito para la verificación y las pruebas de rendimiento.
Descarga el Firmware de prueba de bajo consumo de XIAO RP2350, y arrástralo al sistema de archivos.

Resultado
Tras las pruebas y verificaciones instrumentales, la corriente media del XIAO RP2350 es de 53 μA cuando entra en modo de bajo consumo.

- La corriente media en modo de bajo consumo medida por diferentes instrumentos puede variar. Por favor, consulta los resultados reales de la prueba.
- Este resultado de prueba se obtiene después de grabar el firmware de prueba de bajo consumo.
- Para las pruebas de consumo de energía, el cableado de prueba debe conectarse a la interfaz BAT en la parte posterior.
- Dado que el IDE de Arduino tiene dificultades para integrar la biblioteca pico-extras (que contiene pico/sleep.h, necesaria para la suspensión profunda), se recomienda utilizar el SDK de Pico o el framework PlatformIO + arduino-pico para el desarrollo de ultra bajo consumo.
Recursos y materiales
Diseño de hardware
- 📄[Datasheet] Raspberry Pi RP2350 Datasheet
- 📄[Schematic] Esquemático de XIAO RP2350
- 🗃️[PCB Design Files] Proyecto KiCad de XIAO RP2350
- 🗃️[PCB Design Libraries]
- 📄[Pinout Diagram] Hoja de pinout de XIAO RP2350
Diseño mecánico
- 📄[2D Dimensions] Dimensiones de XIAO RP2350 en DXF
- 🔗[3D Model] Modelo 3D de XIAO RP2350
Software y herramientas
- 📄[Test Firmware] Firmware de prueba de bajo consumo de XIAO RP2350
Otros
- 📄[Document] Primeros pasos con Raspberry Pi Pico-series
- Una guía completa para configurar y programar placas Raspberry Pi Pico, ideal para principiantes que deseen aprender MicroPython o C/C++.
- 📄[Document] Raspberry Pi Pico-series Python SDK
- El libro que documenta los tutoriales de configuración de MicroPython y las APIs
- 📄[Document] Raspberry Pi Pico-series C/C++SDK
- El libro que documenta las APIs del SDK de Pico en C/C++
- 📄[arduino-pico GitHub](https://github.com/earlephilhower/arduino-pico)
- 📄[Arduino-Pico Core Documentation](https://arduino-pico.readthedocs.io/en/latest/install.html)
Soporte y debate
Gracias por utilizar productos de Seeed. Ofrecemos múltiples canales para soporte y debate en la comunidad:


