Click diagram for larger resolution images. There is also a PrettyPins PDF on GitHub.
Power Inputs
- USB C connector - This is used for power and data. Connect to your computer via a USB C cable to update firmware and edit code.
- GND - This is the common ground for all power and logic.
- DC barrel jack - The DC Jack is a 5.5mm/2.1mm center-positive DC connector, which is the most common available. Provide about 6V-17V here to power the Metro. Great for when you have a wall adapter power supply. Don't use a center-negative adapter, it won't work (the On green LED will not light). NOTE: The silkscreen on early versions of the Metro RP2350 says 6-20V, that is incorrect, maximum voltage is 17 volts.
Power Control
- On/Off switch - This switch controls the DC jack power only. If you plug in your board and nothing happens, make sure the switch is flipped to "ON"!
Power Outputs
- 3V - This is the output pin from the 3.3V regulator. It can supply up to around 400mA.
- 5V - This is the output pin from the 5V regulator (when DC jack is used), or from USB. It can supply up to around 500mA peak from USB and up to 800mA peak from DC.
- GND - This is the common ground for all power and logic.
- VIN - This is the higher of the DC jack or USB voltage. So if the DC jack is plugged in and 9V, VIN is 9V. If only USB connected, this will be 5V.
UART, I2C and SPI on RP2350
The RP2350 is capable of handling I2C, SPI and UART on many pins. However, there are really only two peripherals each of I2C, SPI and UART: I2C0 and I2C1, SPI0 and SPI1, and UART0 and UART1. So while many pins are capable of I2C, SPI and UART, you can only do two at a time, and only on separate peripherals, 0 and 1. I2C, SPI and UART peripherals are included and numbered below.
PWM on RP2350
The RP2350 supports PWM on all pins. However, it is not capable of PWM on all pins at the same time. In the standard pin headers there are 9 PWM "slices" available, each with two outputs, A and B. Each pin on the Metro is assigned a PWM slice and output. For example, D23 is PWM3 B, which means it is the second output of the third slice. You can have up to 18 PWM objects on this Metro. The important thing to know is that you cannot use the same slice and output more than once at the same time. So, if you have a PWM object on pin D23, you cannot also put a PWM object on D7, because they are both PWM3 B. The PWM slices and outputs are indicated below.
Analog Pins
The RP22350 has six ADCs. These pins are the only pins capable of handling analog, and they can also do digital.
- A0/GPIO41 - This pin is ADC1. It is also SPI1 CS, UART1 RX, I2C0 SCL and PWM8 B.
- A1/GPIO42 - This pin is ADC2. It is also SPI1 SCK, I2C1 SDA and PWM9 A.
- A2/GPIO43 - This pin is ADC3. It is also SPI1 MOSI, I2C1 SCL and PWM9 B.
- A3/GPIO44 - This pin is ADC4. It is also SPI1 MISO, UART0 TX, I2C0 SDA and PWM10 A.
- A4/GPIO45 - This pin is ADC5. It is also SPI1 CS, UART0 RX, I2C0 SCL and PWM10 B.
- A5/GPIO46 - This pin is ADC6. It is also SPI1 SCK, I2C1 SDA and PWM11 A.
Digital Pins
These are the digital I/O pins. They all have multiple capabilities.
- SCL/GPIO21 - The main I2C0 clock pin. It is also SPI0 CS, UART1 RX, and PWM2 B.
- SDA/GPIO20 - The main I2C0 data pin. It is also SPI0 MISO, UART1 TX, and PWM2 A.
- D23/GPIO23 - Digital I/O pin 23. It is also SPI0 MOSI, I2C1 SCL, and PWM3 A.
- D22/GPIO22 - Digital I/O pin 22. It is also SPI0 SCK, I2C1 SDA, and PWM3 A.
- D11/GPIO11 - Digital I/O pin 11. It is also SPI1 MOSI, I2C1 SCL, and PWM5 B.
- D10/GPIO10 - Digital I/O pin 10. It is also SPI1 SCK, I2C1 SDA, and PWM 5 A.
- D9/GPIO9 - Digital I/O pin 9. It is also SPI1 CS, UART1 RX, I2C0 SCL, and PWM4 B.
- D8/GPIO9 - Digital I/O pin 8. It is also SPI1 MISO, UART1 TX, I2C0 SDA, and PWM4 A.
- D7/GPIO7 - Digital I/O pin 7. It is also SPI0 MOSI, I2C1 SCL, and PWM3 B.
- D6/GPIO6 - Digital I/O pin 6. It is also SPI0 SCK, I2C1 SDA, and PWM3 A.
- D5/GPIO5 - Digital I/O pin 5. It is also SPI0 CS, UART1 RX, I2C0 SCL, and PWM2 B.
- D4/GPIO4 - Digital I/O pin 4. It is also SPI0 MISO, UART1 TX, I2C0 SDA, and PWM2 A.
- D3/GPIO3 - Digital I/O pin 3. It is also SPI0 MOSI, I2C1 SCL, and PWM1 B.
- D2/GPIO2 - Digital I/O pin 2. It is also SPI0 SCK, I2C1 SDA, and PWM1 A.
- TX/GPIO0 - The main UART0 TX pin. It is also SPI0 MISO, I2C0 SDA, and PWM0 A.
- RX/GPIO1 - The main UART0 RX pin. It is also SPI0 CS, I2C0 SCL, and PWM0 B.
- MISO/GPIO28 - The main SPI1 MISO pin. It is also UART0 TX, I2C0 SDA, and PWM6 A.
- SCK/GPIO30 - The main SPI1 SCK pin. It is also I2C1 SDA, and PWM7 A.
- MOSI/GPIO31 - The main SPI1 MOSI pin. It is also I2C1 SCL, and PWM7 B.
CircuitPython I2C, SPI and UART
Note that in CircuitPython, there is a board object each for STEMMA QT, I2C, SPI and UART that use the connector and pins labeled on the Metro. You can use these objects to initialize these peripherals in your code.
-
board.STEMMA_I2C()
uses the STEMMA QT connector (in this case, SCL/SDA pins) -
board.I2C()
uses SCL/SDA pins (GPIO20 and GPIO21) -
board.SPI()
uses SCK/MO/MI pins (GPIO30, GPIO31 and GPIO28) -
board.UART()
uses TX/RX pins (GPIO0 and GPIO1)
Arduino I2C, SPI and UART
I2C, SPI and UART can be accessed with these objects in Arduino:
-
Wire
is used for the default I2C and STEMMA QT connector (GPIO21 and GPIO20). -
SPI
is used for the default SPI pins (GPIO30, GPIO31 and GPIO28). -
Serial1
is used for the default UART pins (GPIO0 and GPIO1).
The peripheral order is defined in the board support definition for Arduino. For example, you'll notice that even though the default SPI (GPIO30, GPIO31, and GPIO28) is located on SPI1, it is defined as SPI
rather than SPI1
.
RP2350 A2 E9 Erratum
The Adafruit Metro RP2350 comes with the A2 version of the RP2350, which is affected by the E9 erratum. This errata affects some uses of GPIO and PIO such as high-impedance inputs and the internal pulldowns. You may need to use 8.2K or smaller resistors if pull-downs are required. At this time, Feb 2025, there is no other version of the RP2350 available - only the A2 version.
The switch located at the top right corner of the board near the Boot button is the RX/TX switch.
When the switch is to the left, the pins are as follows:
- "TX" = Digital 1 and UART RX
- "RX" = Digital 0 and UART TX
When the switch is to the right, the pins are as follows:
- "TX" = Digital 0 and UART TX
- "RX" = Digital 1 and UART RX
The switch on your Metro RP2350 may arrive in either position. If you're running into issues with RX and TX, verify that the switch is in the position you expect it to be.
You may be wondering about the RX-TX switch: we added this because traditional Arduino boards start counting the GPIO for the digital pins with 0-7 and then 8-13. However, the D0/D1 pins are also traditionally the hardware UART Serial1, where D0 is RX and D1 is TX. On the RP2350, however, the UART pins are the other around: D0 is TX and D1 is RX.
Thus a DPDT switch: flip one way to have the GPIO go in order of 0-7, flip the other way to have the logical locations of the hardware UART correct but now the pin order is 1, 0, 2, 3..7. Of course, it's also handy if, like us, you often swap the pins - now you don't need to rewire or cut and solder traces!
The large square towards the middle is the RP2350 microcontroller, the "brains" of this Metro board. It has dual M33 cores with 150 MHz clock rate. It has 520KB of SRAM and 8KB OTP memory, which means that MicroPython/CircuitPython runs great and also IoT projects that need a lot of memory buffer space will run better. Other features include 3 PIO blocks, a TrustZone secure boot, and a special High Speed Transmit (HSTX) peripheral that drives 4 lanes of differential data transmission such as DVI output without needing to overclock or use PIO.
The square towards the right-middle is the 16 MB QSPI Flash. It is connected to 6 pins that are not brought out on the GPIO pads. It is used for storing files and MicroPython/CircuitPython code storage.
The spot for the PSRAM is located between the flash chip and the 6-pin AVR-ICSP header. Advanced hackers can solder their own onto the board.

PSRAM was discussed on Ask an Engineer:
The RP2350 has a new built-in peripheral called the High Speed Transmit (HSTX) peripheral. It can drive 4 lanes of differential data transmission such as DVI output without needing to overclock or use PIO. Between the USB C connector and DC Barrel Jack is a 22-pin port for accessing the 8 consecutive HSTX peripheral pins (GPIO12-19), a few additional GPIO, 3.3V power and GND. The following pins are available via the HSTX port:
- 3.3V - Output from the 3.3V regulator, it can supply 500mA peack.
- GND - Common ground for power and logic.
- SCL/GPIO21 - The main I2C0 clock pin. It is also SPI0 CS, UART1 RX, and PWM2 B.
- SDA/GPIO20 - The main I2C0 data pin. It is also SPI0 MISO, UART1 TX, and PWM2 A.
- D26/GPIO26 - Digital I/O pin 26. It is also SPI1 SCK, I2C1 SDA, and PWM5 A.
- D27/GPIO27 - Digital I/O pin 27. It is also SPI1 MOSI, I2C1 SCL, and PWM5 B.
- CKN/GPIO15 - Digital I/O pin 15 and one of the 8 HSTX peripheral pins. It is also SPI1 MOSI, I2C1 SCL, and PWM7 B.
- CKP/GPIO14 - Digital I/O pin 14 and one of the 8 HSTX peripheral pins. It is also SPI1 SCK, I2C1 SDA, and PWM7 A.
- D0N/GPIO19 - Digital I/O pin 19 and one of the 8 HSTX peripheral pins. It is also SPI0 MOSI, I2C1 SCL, and PWM1 B.
- D0P/GPIO18 - Digital I/O pin 18 and one of the 8 HSTX peripheral pins. It is also SPI0 SCK, I2C1 SDA, and PWM1 A.
- D1N/GPIO17 - Digital I/O pin 17 and one of the 8 HSTX peripheral pins. It is also SPI0 CS, UART0 RX, I2C0 SCL, and PWM0 B.
- D1P/GPIO16 - Digital I/O pin 16 and one of the 8 HSTX peripheral pins. It is also SPI0 MISO, UART0 TX, I2C0 SDA, and PWM0 A.
- D2N/GPIO13 - Digital I/O pin 13 and one of the 8 HSTX peripheral pins. It is also SPI1 CS, UART0 RX, I2C0 SCL, and PWM6 B.
- D2P/GPIO12 - Digital I/O pin 12 and one of the 8 HSTX peripheral pins. It is also SPI1 MISO, UART0 TX, I2C0 SDA, and PWM6 A.
The Boot button is on end opposite from the USB C connector. It is used to enter the bootloader. To enter the bootloader, press and hold Boot and then power up the board (either by plugging it into USB or pressing Reset). The bootloader is used to install/update CircuitPython.
The Reset button is next to the USB C connector. It restarts the board and helps enter the bootloader. You can click it to reset the board without unplugging the USB cable or battery.
The Rst pin can be used to reset the board. Tie to ground manually to reset the board.
Below the SCL and SDA pins is the status NeoPixel LED. It is connected to GPIO25. In CircuitPython, the NeoPixel is available at board.NEOPIXEL
and the library for it is available in the bundle. In Arduino, it is accessible at PIN_NEOPIXEL
. The NeoPixel is powered by the 3.3V power supply but that hasn't shown to make a big difference in brightness or color. In CircuitPython, the LED is used to indicate the runtime status.
Below the USB C connector is the #23 LED, connected to GPIO23. This little red LED is controllable in CircuitPython code using board.LED
, and in Arduino as PIN_LED
.
In the top corner of the board, near the reset button, is the STEMMA QT connector! This means you can connect up all sorts of I2C sensors and breakouts, no soldering required! This connector uses the SCL and SDA pins for I2C, which end up being the RP2350's I2C0 peripheral. In CircuitPython, you can initialize the STEMMA connector with board.STEMMA_I2C()
(as well as with board.SCL
board.SDA
). In Arduino it is Wire
.

The Metro RP2350 comes with a microSD card slot. It is wired up for SPI interfacing.
It also has extra pins connected for advanced-user SDIO interfacing (note: that there's no released usage code for SDIO in Arduino/Python, so this is a super-cutting-edge setup for programmers to roll their own).
These are the pins for the MicroSD card slot.
- SD_CARD_DETECT/GPIO40 - This is the card detect pin. It is also SPI1 MISO, UART1 TX, I2C0 SDA, and PWM8 A
- SD_CS/GPIO39 - This is the chip select pin. It is also SPI0 MOSI, I2C1 SCL, and PWM11 B.
- SDIO_DATA2/GPIO38 - This is the SDIO data2 pin. It is also SPI0 SCK, I2C1 SDA, and PWM11 A.
- SDIO_DATA1/GPIO37 - This is the SDIO data1 pin. It is also SPI0 CS, UART1 RX, I2C0 SCL, and PWM10 B.
- SD_MISO/GPIO36 - This is the main SPI0 MISO pin. It is also UART1 TX, I2C0 SDA, and PWM10 A.
- SD_MOSI/GPIO35 - This is the main SPI0 MOSI pin. It is also I2C1 SCL, and PWM9 B.
- SD_SCK/GPIO34 - This is the main SPI0 SCK pin. It is also I2C1 SDA, and PWM9 A.
Between the RP2350 microcontroller and the HSTX connector, there a 4 pins broken out for USB Host connection.
- GND - Common ground for power and logic.
- USB_HOST_DATA_PLUS/GPIO32 - The D+ pin for USB Host. It is also SPI0 MISO, UART0 TX, I2C0 SDA, and PWM8 A.
- USB_HOST_DATA_MINUS/GPIO33 - The D- pin for USB Host. It is also SPI0 CS, UART0 RX, I2C0 SCL, and PWM8 B.
- USB_HOST_5V_POWER/GPIO29 - The 5V pin for USB Host. It is also SPI1 CS, UART0 RX, I2C0 SCL, and PWM6 B.
Next to the microSD Card slot is the JST 3-pin Debug port for SWD debugging. This port matches the Raspberry Pi 3-pin Debug Connector Specification for use with the Debug Probe Kit. It breaks out the following serial debug pins:
- Pin 1: SWCLK (serial clock)
- Pin 2: GND
- Pin 3: SWDIO (bidirectional serial data)

Page last edited February 26, 2025
Text editor powered by tinymce.