Skip to content

Raspberry Pi Pico 2 Hazard3 RISC-V

Support for the RP2350 based Raspberry Pi Pico Hazard3 RISC-V board

See boards_rpi_pico_2 for further information.

Support for the RP2350 based Raspberry Pi Pico board

Warning: The support for the Raspberry Pi Pico 2 is still in a very early stage! See Known Issues.

Overview

The Raspberry Pi Pico 2 is a microcontroller board based on the RP2350 chip, featuring dual-core Arm Cortex-M0+ processors and RISC-V Hazard secondary architecture. It is designed for a wide range of applications, from hobbyist projects to professional embedded systems for a fairly affordable price.

The Raspberry Pi Pico 2 Board

Hardware

MCURP2350
FamilyDual Cortex-M33 or Hazard3 (RISC-V)
VendorRaspberry Pi
RAM520 kB on-chip SRAM (10 independent banks)
FlashUp to 16 MB external QSPI flash (Pico 2 has 4 MB by default)
Frequencyup to 150 MHz (Set to 125 MHz in RIOT)
SecurityBoot signing, key storage, SHA-256 accelerator
PIOs12 state machines
UARTs2
SPIs2
I2Cs2
PWM24 channels
USBUSB 1.1 controller with host and device support
PowerOn-chip switched-mode power supply with LDO sleep mode
OTP8 kB of one-time-programmable storage
DatasheetRP2350 Datasheet

User Interfaces

InterfaceDescription
LED0User LED (GPIO 0 at Pin 25)
SW0Button used in flash process, can be accessed using registers but difficult

Pinout

Pinout Diagram

Flashing the Board

The Raspberry Pi Pico 2 has a built-in bootloader that allows flashing via USB. However, you can also use OpenOCD for flashing the board. If you are using picotool, you need to hold the bootselect button (the only button on the board) while connecting the board to your computer via USB. This will put the board into bootloader mode, allowing you to flash it.

Generally while Picotool is the easiest way to flash the board, it does not allow for debugging using GDB.

It does tend to be more reliable than OpenOCD though, especially when switching between RISC-V and ARM cores.

Flashing using OpenOCD

If you have two Raspberry Pi Pico boards, you can utilize one as a programmer to program the other board.

Please refer to the Debugprobe documentation for more details.

Note that Raspberry Pi actually uses their own OpenOCD fork, which is available in the RP2040 OpenOCD repository. While technically you can use the standard OpenOCD, it is recommended to use the Raspberry Pi fork for better compatibility with the RP2350, as its still fairly “new” and under development, which is why even their own Pico SDK Extension uses the Raspberry Pi fork of OpenOCD, instead of the standard one.

To do this, you need to connect the board to your computer and use the following command:

Terminal window
PROGRAMMER=openocd BOARD=rpi-pico-2-riscv make flash

or, if you want to use the CortexM:

Terminal window
PROGRAMMER=openocd BOARD=rpi-pico-2-arm make flash

You can then debug your application using GDB with the following command:

Terminal window
PROGRAMMER=openocd BOARD=rpi-pico-2-riscv make debug

or, if you want to use the CortexM:

Terminal window
PROGRAMMER=openocd BOARD=rpi-pico-2-arm make debug

Flashing using Picotool

Simply connect the board to your computer via USB and use the following command:

Terminal window
BOARD=rpi-pico-2-riscv make flash

or, if you want to use the CortexM:

Terminal window
BOARD=rpi-pico-2-arm make flash

This is the default method for flashing the Raspberry Pi Pico 2. However, it does not allow for debugging using GDB.

Note: When programming the board with the Picotool for the first time, RIOT will download and install the Picotool locally in the RIOT folder. This process will take some minutes to complete.

Known Issues

Currently RP2350 support is rather minimal, as such peripheral support is extremely limited. The following peripherals are supported:

  • XH3IRQ RISC-V Interrupt Controller (CortexM Interrupts also work)
  • GPIO
  • UART
    • The UART Baudrate is set to 115200.
    • UART does not work via USB, you need to connect it directly to the GPIO pins.

More peripherals will be added in the future.