🛠 Console série sur RP2350 : USB CDC natif et UART0 de secours
Objetivos
El RP2350 integra un único controlador USB: dispositivo USB 2.0 Full-Speed (12 Mb/s) y host Full/Low-Speed con PHY 1.1 integrado (hoja de datos RP2350, §12 USB). En MicroPython, la consola utiliza este USB CDC nativo — no existe ningún chip serie en la placa. Pero cuando el USB está ocupado (modo HID, alimentación por batería) o los pines USB no están cableados (Pro Micro mal soldada, módulo desnudo), necesitas el UART: el RP2350 dispone de 2 UART mapeables a cualquier GPIO. Este tutorial configura ambas vías de respaldo.
Material
- 1 × placa RP2350 genérica + MicroPython rp2 (tutorial anterior)
- 1 × adaptador USB↔TTL (CP2102, CH340, FTDI…) a 3,3 V — los E/S del RP2350 funcionan con IOVDD 1,8–3,3 V: 5 V en un pin puede destruirlo
- 3 × cables: GP0 (TX0) → RX del adaptador, GP1 (RX0) → TX, GND ↔ GND (masa común obligatoria)
- No conectes el VCC del adaptador a la placa si ya está alimentada
Código completo
# main.py — printf sur USB CDC ET trace sur UART0 (GP0/GP1, 115200 8N1)
import sys
from machine import UART, Pin
import time
# 1) La console par défaut est l'USB CDC natif du RP2350 :
print('Bonjour depuis USB CDC') # visible dans Thonny / mpremote
# 2) Console de secours indépendante sur UART0 :
uart = UART(0, baudrate=115200, tx=Pin(0), rx=Pin(1))
uart.write('RP2350 pret (UART0 115200 8N1)\r\n')
n = 0
while True:
n += 1
msg = 'tick %d uptime_ms=%d\r\n' % (n, time.ticks_ms)
sys.stdout.write(msg) # USB CDC
uart.write(msg) # UART0 physique
if uart.any: # écho de ce que le PC envoie
uart.write('recu: ' + uart.read.decode(errors='replace') + '\r\n')
time.sleep_ms(500)
Verificación esperada
Dos ventanas, mismas líneas: Thonny (puerto CDC de la placa) y tu terminal serie en el adaptador (115200 8N1 — picocom -b 115200 /dev/ttyUSB0, o el puerto COM en Windows). Un carácter tecleado desde el adaptador vuelve en eco. Desconecta el USB de la placa manteniéndola alimentada a 5 V en VREG_VIN (2,7–5,5 V): el registro UART continúa — tienes una consola desacoplada del USB, indispensable para depurar un programa que bloquea la enumeración USB.
Errores frecuentes
- TX conectado a TX: siempre se cruzan — TX placa → RX adaptador.
- Masa común olvidada: nada, o bytes parásitos.
- Adaptador a 5 V: el RP2350 no es tolerante a 5 V en E/S (rango 1,8–3,3 V según IOVDD) — verifica el selector del adaptador.
- Confundir los dos: el USB CDC es un puerto serie virtual (ttyACM/COM) creado por la placa; el adaptador TTL es un segundo puerto (ttyUSB…). Ambos pueden coexistir.
- GP0/GP1 ya ocupadas por tu montaje: el UART del RP2350 se enruta a cualquier GPIO —
UART(1, tx=Pin(4), rx=Pin(5))libera el bus. - REPL silencioso en UART: en MicroPython rp2, el REPL permanece en USB CDC; si quieres el REPL en UART, debes configurarlo (
machine.UART+ reasignación del stdio) o usar el C SDK constdio_init_uart. - Solo cable de alimentación: el USB CDC solo existe si los pines de datos están conectados — otra vez el cable.
Otros tutoriales para esta placa
- Flasher MicroPython sur une carte RP2350 générique et faire clignoter la première LED
- 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)
- Pico SDK 2.x sur une carte RP2350 générique : CMake, board header et PICO_BOARD
- 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