The Feather RP2040 has many pins, ports and features. This page takes you on a tour of the board!

PrettyPins PDF on GitHub.

Power Pins and Connections

  • 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.
  • LiPoly Battery connector - This 2-pin JST PH connector allows you to plug in lipoly batteries to power the Feather. The Feather is also capable of charging batteries plugged into this port via USB.
  • GND - This is the common ground for all power and logic.
  • BAT - This is the positive voltage to/from the 2-pin JST jack for the optional Lipoly battery.
  • USB - This is the positive voltage to/from the USB C jack, if USB is connected.
  • EN - This is the 3.3V regulator's enable pin. It's pulled up, so connect to ground to disable the 3.3V regulator.
  • 3.3V - These pins are the output from the 3.3V regulator, they can supply 500mA peak.

Logic Pins

I2C and SPI on RP2040

The RP2040 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 RP2040

The RP2040 supports PWM on all pins. However, it is not capable of PWM on all pins at the same time. There are 8 PWM "slices", each with two outputs, A and B. Each pin on the Feather is assigned a PWM slice and output. For example, A0 is PWM5 A, which means it is first output of the fifth slice. You can have up to 16 PWM objects on the Feather RP2040. 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 A0, you cannot also put a PWM object on D10, because they are both PWM5 A. The PWM slices and outputs are indicated below. Note that PWM7 A and PWM7 B are not available on the Feather RP2040 because not all pins are broken out.

Analog Pins

The RP2040 has four ADCs. These pins are the only pins capable of handling analog, and they can also do digital.

  • A0/GP26 - This pin is ADC0. It is also SPI1 SCK, I2C1 SDA and PWM5 A.
  • A1/GP27 - This pin is ADC1. It is also SPI1 MOSI, I2C1 SCL and PWM5 B.
  • A2/GP28 - This pin is ADC2. It is also SPI1 MISO, I2C1 SDA and PWM6 A.
  • A3/GP29 - This pin is ADC3. It is also SPI1 CS, I2C0 SCL and PWM6 B.

Digital Pins

These are the digital I/O pins. They all have multiple capabilities.

  • D24/GP24 - Digital I/O pin 24. It is also UART1 TX, I2C0 SDA, and PWM4 A.
  • D25/GP25 - Digital I/O pin 25. It is also UART1 RX, I2C0 SCL, and PWM4 B.
  • SCK/GP18 - The main SPI0 SCK. It is also I2C1 SDA and PWM1 A.
  • MO/GP19 - The main SPI0 MOSI. It is also I2C1 SCL and PWM1 B.
  • MI/GP20 - The main SPI0 MISO. It is also UART1 TX, I2C0 SDA and PWM2 A.
  • RX/GP01 - The main UART0 RX pin. It is also I2C0 SDA, SPI0 CS and PWM0 B.
  • TX/GP00 - The main UART0 TX pin. It is also I2C0 SCL, SPI0 MISO and PWM0 A.
  • D4/GP06 - Digital I/O pin 4. It is also SPI0 SCK, I2C1 SDA and PWM3 A.
  • D13/GP13 - Digital I/O pin 13. It is also SPI1 CS, UART0 RX, I2C0 SCL and PWM6 B.
  • D12/GP12 - Digital I/O pin 12. It is also SPI1 MISO, UART0 TX, I2C0 SDA and PWM6 A.
  • D11/GP11 - Digital I/O pin 11. It is also SPI1 MOSI, I2C1 SCL and PWM5 B.
  • D10/GP10 - Digital I/O pin 10. It is also SPI1 SCK, I2C1 SDA and PWM5 A.
  • D9/GP09 - Digital I/O pin 9. It is also SPI1 CS, UART1 RX, I2C0 SCL and PWM4 B.
  • D6/GP08 - Digital I/O pin 6. It is also SPI1 MISO, UART1 TX, I2C0 SDA and PWM4 A.
  • D5/GP07 - Digital I/O pin 5. It is also SPI0 MOSI, I2C1 SCL and PWM3 B.
  • SCL/GP03 - The main I2C1 clock pin. It is also SPI0 MOSI, I2C1 SCL and PWM1 B.
  • SDA/GP02 - The main I2C1 data pin. It is also SPI0 SCK, I2C1 SDA and PWM1 A.

CircuitPython Pins vs GPxx Pins

There are pin labels on both sides of the Feather RP2040. Which should you use? In CircuitPython, use the pin labels on the top of the board (such as A0, D4, SCL, RX, etc.). If you're looking to work with this board and the RP2040 SDK, use the pin labels on the bottom of the board (GP00 and GP01, etc.).

CircuitPython I2C, SPI and UART

Note that in CircuitPython, there is a board object each for I2C, SPI and UART that use the pins labeled on the Feather. You can use these objects to initialise these peripherals in your code.

  • board.STEMMA_I2C() uses SCL/SDA
  • board.SPI() uses SCK/MO/MI
  • board.UART() uses RX/TX

Arduino I2C

Arduino for the Feather RP2040 provides two I2C ports.

  • Wire - Pins SCL (clock) and SDA (data), and the STEMMA QT connector, are available as Wire.
  • Wire1 - Pins D24 (data) and D25 (clock) are available as Wire1.

GPIO Pins by Pin Functionality

Primary pins based on Feather RP2040 silk are bold.

I2C Pins

  • I2C0 SCL: A3, D25, RX, D13, D9
  • I2C0 SDA: A2, D24, MISO, TX, D12, D6
  • I2C1 SCL: SCL, A1, MOSI, D11, D5
  • I2C1 SDA: SDA, A0, SCK, D4, D10

SPI Pins

  • SPI0 SCK: SCK, D4, SDA
  • SPI0 CS: RX
  • SPI1 SCK: A0, D10
  • SPI1 MOSI: A1, D11
  • SPI1 MISO: A2, D24, D12, D6
  • SPI1 CS: A3, D25, D13, D9


  • UART0 TX: TX, A2, D12
  • UART0 RX: RX, A3, D13
  • UART1 TX: D24, MISO, D6
  • UART1 RX: D25, D9

PWM Pins

  • PWM0 A: TX
  • PWM0 B: RX
  • PWM1 A: SCK, SDA
  • PWM2 A: MISO
  • PWM2 B: (none)
  • PWM3 A: D4
  • PWM3 B: D5
  • PWM4 A: D24, D6
  • PWM4 B: D25, D9
  • PWM5 A: A0, D10
  • PWM5 B: A1, D11
  • PWM6 A: A2, D12
  • PWM6 B: A3, D13

Microcontroller and Flash

The square towards the middle is the RP2040 microcontroller, the "brains" of the Feather RP2040 board.

The square near the BOOTSEL button is the QSPI Flash. It is connected to 6 pins that are not brought out on the GPIO pads. This way you don't have to worry about the SPI flash colliding with other devices on the main SPI connection.

QSPI is neat because it allows you to have 4 data in/out lines instead of just SPI's single line in and single line out. This means that QSPI is at least 4 times faster. But in reality is at least 10x faster because you can clock the QSPI peripheral much faster than a plain SPI peripheral

Buttons and RST Pin

The Feather RP2040 has two buttons.

The BOOTSEL used to enter the bootloader. To enter the bootloader, press and hold BOOTSEL and then power up the board (either by plugging it into USB or pressing RESET). The bootloader is used to install/update CircuitPython.

On Revision D and later of the Feather RP2040, the BOOTSEL button is connected to GPIO4 for use in your code. The revision letter is in a circle on the bottom of the board. 

The RESET button 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 is can be used to reset the board. Tie to ground manually to reset the board.


Above the pin labels for A0 and A1 is the status NeoPixel LED. In CircuitPython, the NeoPixel is board.NEOPIXEL and the library for it is here and in the bundle. 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 CHG LED. This indicates the charge status of a connected lipoly battery, if one is present and USB is connected. It is amber while charging, and green when fully charged. Note, it's normal for this LED to flicker when no battery is in place, that's the charge circuitry trying to detect whether a battery is there or not.

Above the USB C connector is the D13 LED. This little red LED is controllable in CircuitPython code using board.LED. Also, this LED will pulse when the board is in bootloader mode.


The Feather RP2040 comes with a built in 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 ends up being the RP2040's I2C1 peripheral. In CircuitPython, you can use the STEMMA connector with board.SCL and board.SDA, or board.STEMMA_I2C(). In Arduino it is Wire.

Angled shot of STEMMA QT / Qwiic JST SH 4-pin Cable.
This 4-wire cable is a little over 100mm / 4" long and fitted with JST-SH female 4-pin connectors on both ends. Compared with the chunkier JST-PH these are 1mm pitch instead of...

Debug Interfaces

For advanced debugging or to reprogram your Feather RP2040, there is a footprint to solder a 2*5 pin 0.05" standard SWD header on the board. The image above shows the "pin 1" location by marking it with a triangle. This orientation places the connector key facing towards the end of the board where the USB connector is. This allows you to use something like a Segger J-Link and a 1.27mm SWD cable to connect from your PC to the Feather.

Adafruit Feather RP2040 showing orientation of debug header

On the back of the board are pads for the SWCLK and SWDIO pins. They provide access to the internal Serial Wire Debug multi-drop bus, which provides debug access to both processors, and can be used to download code.

SWD 0.05" Pitch SMT Header
We've carrying a new 1.27mm pitch 2x5 Mini SWD 0.05" Pitch Connector. It's a tinier, bite-sized version of the
SWD 0.05" Pitch SMT Box Header
This 1.27mm pitch, 2x5 male SMT Box Header is the same one used on our SWD Cable Breakout Board. The header...

This guide was first published on Mar 05, 2021. It was last updated on Jun 15, 2024.

This page (Pinouts) was last updated on Mar 08, 2024.

Text editor powered by tinymce.