Phyduino Board Support - Boards - Phyduino Pico (RP2040)
Phyduino Pico board, top view

FQBN phyduino:rp2:phyduino_pico. Hardware design: ../phyduino_pico (KiCad, rev D/E).

Core parts

MCURP2040 (U4), 125 MHz
FlashW25Q128JV (U9), 16 MB; boot stage 2 = SDK W25Q080 (works for the whole W25Q family)
Crystal12 MHz (Y1)
LEDGPIO5, active high (LED_BUILTIN, Arduino pin 22)
Boot modeSlide switch SW1: 3.3 V = normal, GND = BOOTSEL (UF2 drive). No BOOTSEL button.
ResetSW2 (also header power pin 3)
DebugJ1, 3-pin JST-SH SWD

Pin map

The authoritative table is the comment at the top of platform/variants/phyduino_pico/pins_arduino.h. Summary:

Arduino pinHeaderRP2040Notes
0 / 1D0 RX / D1 TXGPIO1 / GPIO0Serial1 (UART0)
2–9D2–D9GPIO6,7,8,9,10,15,16,17D4/D5 = Serial2 (UART1)
10–13D10 SS, D11 MOSI, D12 MISO, D13 SCKGPIO13, 11, 12, 14SPI (SPI1)
14–16A0–A2GPIO26–28RP2040 ADC, 3.3 V full scale; also usable as digital pins
17–19A3–A5—MAX11635 ADC, 2.048 V full scale, analog only
20 / 21SDA / SCLGPIO24 / GPIO25Wire (I2C0); silkscreen D18/D19
22(LED)GPIO5LED_BUILTIN

Numbering follows the Uno (A0–A5 = 14–19, so for (p = A0; p <= A5; p++) works). The silkscreen's D18/D19 names for SDA/SCL are not Arduino pin numbers here; use SDA/SCL (ADR 004).

On-board peripherals (not on the header)

ChipBus / pinsUsed by
MAX11635 12-bit ADC (U5)SPI0: SCK 22, MOSI 23, MISO 20, CS 21, EOC 19, CNVST 18analogRead(A3..A5) (ch 0–2); ch 3 = VBUS ÷ (100k/10.2k)
LM4040 2.048 V reference (U7)AREF header pinMAX11635 reference only
STUSB4500 USB-PD sink (U6)I2C1: SDA 2, SCL 3, ALERT 4, RESET 29; address 0x28power profiles at start-up; #include <stusb4500.h>

USB Power Delivery

VBUS feeds the on-board regulator and the VIN pin, so VIN carries whatever voltage the USB-PD charger supplies. Tools > USB-PD Power (VIN) sets the highest voltage the board asks for; at start-up initVariant() loads the matching sink profiles into the STUSB4500 (variant.cpp). The 10 W limit (schematic) sets the current of the top profile:

Menu optionProfilesVIN on a USB-PD charger
5 V only (default)5 V/2 A5 V
Up to 9 V5 V/2 A, 9 V/1 A9 V (POK2 lit)
Up to 12 V5 V/2 A, 9 V/1 A, 12 V/0.83 A12 V, or 9 V if the charger has no 12 V (common)
Up to 15 V5 V/2 A, 9 V/1 A, 15 V/0.66 A15 V (POK3 lit)
Up to 20 V5 V/2 A, 9 V/1 A, 20 V/0.5 A20 V (POK3 lit)
Use chip's stored settings (NVM)left as loaded at power-up5 V on a Phyduino board

An ordinary USB port always gives 5 V. A charger supplies the highest profile it can. The menu writes the chip's working registers only, never its NVM, and the board renegotiates only if they differ from what the chip already holds. A sketch can change them with stusb4500::setProfiles() and read the contract and measured VBUS (see stusb4500.h and tests/sketches/usbpd_status).

At plug-in, before any sketch runs (and during uploads), the chip negotiates from its NVM. ST's factory NVM asks for up to 20 V at 1 A, so Phyduino boards have their NVM set to 5 V only, once per board, with tests/sketches/usbpd_nvm (hardware checklist item 19). The NVM is good for about 1000 writes, which is why only that tool writes it.

The register addresses come from ST's register map, not the datasheet; tests/hardware-checklist.md item 14 checks them.

Things to know