Mini USB RP2350

The Mini USB RP2350 [10] is a very small, low-cost and versatile Chinese board from different manufactures or AliExpress webshops for Mini USB RP2350 [11]. It has no SWD interface, but a USB-A plug-in connector built directly into the PCB with a direct connection to the RP2350A on-chip USB controller. The Raspberry Pi Pico on-chip USB bootloader allows the ability to flash without any adapter, in a drag-and-drop manner.

Board Overview

Hardware

The Mini USB RP2350 [10] is a mini sized RP2350A development board. The on-board PCB USB-A connector makes it plug-and-play instantly. The castellated module allows soldering direct to carrier boards.

Features and Resources

Printed Circuit Board

5V/300㎃ 3.3V/500㎃ 3.3V(OUT)

150㎒ 4㎆/16㎆ 520㎅ RST RGB USB-A UF2

25 16 4 2 2 2

  • Dual core Arm Cortex-M33 and dual core Hazard3 (RV32IMAC+) RISC-V processor running up to 150㎒

  • 520㎅ on-chip SRAM

  • 4㎆ on-board QSPI flash with XIP capabilities – optional 16㎆

  • USB 1.1 controller (host/device)

  • On-board PCB USB-A connector

  • On-board RGB LED (NeoPixel)

  • On-board 3.3V LDO regulator with 500㎃

  • On-board RESET button

  • On-board BOOT button

  • 15 GPIO pins via edge pinout

  • 13 GPIO pins via solder points

  • 2 UART peripherals

  • 2 I2C controllers

  • 2 SPI controllers

  • 16 PWM channels

  • 4 ADC analog inputs

  • 12 Programmable I/O (PIO) state machines for custom peripherals

  • 1 Watchdog timer peripheral

  • 1 Temperature sensor on-chip

Design Data

NoLogo Mini USB RP2350

Positions

NoLogo Mini USB RP2350 details
  1. PCB USB-A port

  2. ME6231C33
    500㎃ low dropout, low noise LDO
  3. On-board flash memory
    4㎆ NOR-Flash W25Q32JV
    16㎆ NOR-Flash W25Q128JV
  4. RP2350A

  5. WS2812B
    RGB LED
  1. BOOT button
    press it when resetting to enter download mode
  2. RESET button

  3. Maker Port
    Qwiic / STEMMA QT compatible connector and pinout with conversion cable to Grove connector supports I2C0 (default), UART0, GPIO/PWM
  4. RP2350A pins
    13 solder points, including 13 GPIO pins

Data Sheets

Flash partitions on 4㎆ revision

QSPI NOR-Flash

code_partition

storage_partition

primary 4㎆

1㎆

3㎆

secondary N/A

Flash partitions on 16㎆ revision

QSPI NOR-Flash

code_partition

storage_partition

primary 16㎆

1㎆

15㎆

secondary N/A

Pinouts

The peripherals of the RP2350 SoC [35] can be routed to various pins on the board. The configuration of these routes can be modified through DTS. Please refer to the datasheet to see the possible routings for each peripheral. The default assignment is showing below.

External pin mapping on the Mini USB RP2350 is not identical to the original Raspberry Pi Pico board. Almost all pins are rearranged in a more compact order. Likewise, the voltage sense and monitoring functions are not integrated. Thus all internal RP2350A GPIO lines are available for free use, insofar there is sufficient space for them on the outer edge of the board or on the bottom side by additional solder points.

GPIO line 22 is not only exclusively routed to the on-board user RGB LED. It is also accessible on the bottom side on one of the 13 solder pads. The analog voltage reference is internally hard-wired to the digital 3.3V power supply and is not decoupled by a simple resistor. There is no option to change this from outside the board.

Pin Mapping

Pinout

on-edge(1-18):

3 3 4 1 1 1

on-qwiic(QC,QD):

2 1 1

on-pads(A-M):

12 8

on-board:

1 RGB

Default Zephyr Peripheral Mapping

 

  • 1 UART0_TX : GP0 (PWM0)
  • 2 UART0_RX : GP1 (PWM1)
  • 3 PIO/PWM : GP2 PWM2
  • 4 PIO/PWM : GP3 PWM3
  • 5 SPI0_RX : GP4 (PWM4)
  • 6 SPI0_CSN : GP5 (PWM5)
  • 7 SPI0_SCK : GP6 (PWM6)
  • 8 SPI0_TX : GP7 (PWM7)
  • 9 PIO/PWM : GP8 PWM8
  • A PIO/PWM : GP9 PWM9
  • B PIO/PWM : GP10 PWM10
  • C PIO/PWM : GP11 PWM11
  • D PIO/PWM : GP12 PWM12
  • E PIO/PWM : GP13 PWM13
  • 10 I2C1_SDA : GP14 (PWM14)
  • 11 I2C1_SCL : GP15 (PWM15)
  • QD I2C0_SDA : GP16 (PWM0)
  • QC I2C0_SCL : GP17 (PWM1)
  • F PIO/PWM : GP18 PWM2
  • G PIO/PWM : GP19 PWM3
  • H PIO/PWM : GP20 PWM4
  • I PIO/PWM : GP21 PWM5
  • J PIO0 : GP22 (PWM6)
    nc on-board user RGB_LED_DI
  • K PIO/PWM : GP23 PWM7
  • L PIO/PWM : GP24 PWM8
  • M PIO/PWM : GP25 PWM9
  • 12 ADC_CH0 : GP26 (PWM10)
  • 13 ADC_CH1 : GP27 (PWM11)
  • 14 ADC_CH2 : GP28 (PWM12)
  • 15 ADC_CH3 : GP29 (PWM13)
  • 16 3V3(OUT)
  • 17 GND
  • 18 VSYS

Devicetree compatible

NoLogo Mini USB RP2350 edge pinout

Default Zephyr Peripheral Mapping:

  • UART0_TX : GP0

  • UART0_RX : GP1

  • UART0_CTS : GP2 (optional, not default)

  • UART0_RTS : GP3 (optional, not default)

  • SPI0_RX : GP4

  • SPI0_CSN : GP5

  • SPI0_SCK : GP6

  • SPI0_TX : GP7

  • GPIO8 : GP8 (free usable)

  • GPIO9 : GP9 (free usable pad)

  • GPIO10 : GP10 (free usable pad)

  • GPIO11 : GP11 (free usable pad)

  • GPIO12 : GP12 (free usable pad)

  • GPIO13 : GP13 (free usable pad)

  • I2C1_SDA : GP14

  • I2C1_SCL : GP15

  • I2C0_SDA : GP16 (Qwiic)

  • I2C0_SCL : GP17 (Qwiic)

  • GPIO18 : GP18 (free usable pad)

  • GPIO19 : GP19 (free usable pad)

  • GPIO20 : GP20 (free usable pad)

  • GPIO21 : GP21 (free usable pad)

  • PIO0 : GP22

  • GPIO23 : GP23 (free usable pad)

  • GPIO24 : GP24 (free usable pad)

  • GPIO25 : GP25 (free usable pad)

  • ADC_CH0 : GP26

  • ADC_CH1 : GP27

  • ADC_CH2 : GP28

  • ADC_CH3 : GP29

Supported Features

The Mini USB RP2350 board configuration supports the following hardware features:

Hardware Features Supported by Zephyr

Peripheral

Kconfig option

Devicetree compatible

Zephyr API

PINCTRL

CONFIG_PINCTRL

raspberrypi,pico-pinctrl

Pin Control API

GPIO

CONFIG_GPIO

raspberrypi,pico-gpio

General-Purpose Input/Output (GPIO)

UART

CONFIG_SERIAL

raspberrypi,pico-uart

Universal Asynchronous Receiver-Transmitter (UART)

UDC (USB Device Controller)

CONFIG_USB_DEVICE_STACK_NEXT

raspberrypi,pico-usbd

USB device support APIs

I2C

CONFIG_I2C

raspberrypi,pico-i2c

Inter-Integrated Circuit (I2C) Bus

SPI

CONFIG_SPI

raspberrypi,pico-spi

Serial Peripheral Interface (SPI) Bus

PWM

CONFIG_PWM

raspberrypi,pico-pwm

Pulse Width Modulation (PWM)

ADC

CONFIG_ADC

raspberrypi,pico-adc

Analog-to-Digital Converter (ADC)

Temperature (Sensor)

CONFIG_SENSOR

raspberrypi,pico-temp

Sensors

Timer (Counter)

CONFIG_COUNTER

raspberrypi,pico-timer

Counter

Watchdog Timer (WDT)

CONFIG_WATCHDOG

raspberrypi,pico-watchdog

Watchdog

Flash

CONFIG_FLASH

raspberrypi,pico-flash-controller

Flash and Flash map

PIO

CONFIG_PIO_RPI_PICO

raspberrypi,pico-pio

N/A

UART (PIO)

CONFIG_SERIAL

raspberrypi,pico-uart-pio

Universal Asynchronous Receiver-Transmitter (UART)

SPI (PIO)

CONFIG_SPI

raspberrypi,pico-spi-pio

Serial Peripheral Interface (SPI) Bus

WS2812 (PIO)

CONFIG_LED_STRIP

worldsemi,ws2812-rpi-pico-pio

N/A

DMA

CONFIG_DMA

raspberrypi,pico-dma

Direct Memory Access (DMA)

HWINFO

CONFIG_HWINFO

N/A

Hardware Information

VREG

CONFIG_REGULATOR

raspberrypi,core-supply-regulator (!)

Regulators

RESET

CONFIG_RESET

raspberrypi,pico-reset

Reset Controller

CLOCK

CONFIG_CLOCK_CONTROL

Clock Control

NVIC

N/A

arm,v8m-nvic

Nested Vector Interrupts Controller

SYSTICK

N/A

arm,v8m-systick

(!) POWMAN with VREG on RP2350 not yet supported by Zephyr.

See section Peripherals RP2350 in upstream issue: https://github.com/zephyrproject-rtos/zephyr/issues/53810

Other hardware features are not currently supported by Zephyr. The default configuration can be found in the different Kconfig files:

Board Configurations

The Mini USB RP2350 board offers an assembly option with 16㎆ Flash, which is mapped as a hardware revision.

west build -b mini_usb_rp2350/rp2350a/m33

Use the native USB device port with CDC-ACM as Zephyr console and for the shell. Setup QSPI Flash controller to work with 4㎆.

west build -b mini_usb_rp2350@16mb/rp2350a/m33

Use the native USB device port with CDC-ACM as Zephyr console and for the shell. Setup QSPI Flash controller to work with 16㎆.

west build -b mini_usb_rp2350@4mb/rp2350a/m33

Use the native USB device port with CDC-ACM as Zephyr console and for the shell. Setup QSPI Flash controller to work with 4㎆ – the same as the default board configuration mini_usb_rp2350.

Connections and IOs

Both the Chinese website about the Mini USB RP2350 [10] and almost all AliExpress retailers provide a few information about the board connections. Some of the data they give is pretty sketchy, especially those provided by retailers, which keep things to the bare minimum and often mess it up. The content provided here is the result of extensive technical evaluation, correction, rectification, and supplementation of this publicly available information.

Laced Grove Signal Interface

The Mini USB RP2350 offers the option of connecting hardware modules via one single Qwiic/STEMMA QT (Grove connectors). This is provided by a specific interface for general signal mapping, the Laced Grove Signal Interface.

Following mappings are well known:

  • grove_gpios: GPIO mapping

  • grove_pwms: PWM mapping

This is the GPIO signal line mapping from the RP2350 SOC [35] to the set of Grove connectors provided as Laced Grove Signal Interface.

This list must not be stable!

phandle index to shield –>

Signal : Meaning

mini_usb_rp2350

<&grove_gpios 0 …>

GP0: UART-TX (UART0/PWM0CHA)

not wired

<&grove_gpios 1 …>

GP1: UART-RX (UART0/PWM0CHB)

not wired

<&grove_gpios 2 …>

GP2: (UART-CTS) (UART0/PWM1CHA)

not wired

<&grove_gpios 3 …>

GP3: (UART-RTS) (UART0/PWM1CHB)

not wired

<&grove_gpios 4 …>

GP4: SPI-MISO (SPI0/PWM2CHA)

not wired

<&grove_gpios 5 …>

GP5: SPI-CS (SPI0/PWM2CHB)

not wired

<&grove_gpios 6 …>

GP6: SPI-CLK (SPI0/PWM3CHA)

not wired

<&grove_gpios 7 …>

GP7: SPI-MOSI (SPI0/PWM3CHB)

not wired

<&grove_gpios 8 …>

GP8: GPIO/PWM (PWM4CHA)

not wired

<&grove_gpios 9 …>

GP9: GPIO/PWM (PWM4CHB)

not wired

<&grove_gpios 10 …>

GP10: GPIO/PWM (PWM5CHA)

not wired

<&grove_gpios 11 …>

GP11: GPIO/PWM (PWM5CHB)

not wired

<&grove_gpios 12 …>

GP12: GPIO/PWM (PWM6CHA)

not wired

<&grove_gpios 13 …>

GP13: GPIO/PWM (PWM6CHB)

not wired

<&grove_gpios 14 …>

GP14: I2C-SDA (I2C1/PWM7CHA)

not wired

<&grove_gpios 15 …>

GP15: I2C-SCL (I2C1/PWM7CHB)

not wired

<&grove_gpios 16 …>

GP16: I2C-SDA (I2C0/PWM0CHA)

<&grove_d17_header 1 …>
<&gpio0 16 …>

<&grove_gpios 17 …>

GP17: I2C-SCL (I2C0/PWM0CHB)

<&grove_d17_header 0 …>
<&gpio0 17 …>

<&grove_gpios 18 …>

GP18: WS2812 (PWM1CHA)

not wired

<&grove_gpios 19 …>

GP19: GPIO/PWM (PWM1CHB)

not wired

<&grove_gpios 20 …>

GP20: GPIO/PWM (PWM2CHA)

not wired

<&grove_gpios 21 …>

GP21: GPIO/PWM (PWM2CHB)

not wired

<&grove_gpios 22 …>

GP22: WS2812 (PWM3CHA)

not wired (RGB LED)

<&grove_gpios 23 …>

GP23: GPIO/PWM (PWM3CHB)

not wired

<&grove_gpios 24 …>

GP24: GPIO/PWM (PWM4CHA)

not wired

<&grove_gpios 25 …>

GP25: GPIO/PWM (PWM4CHB)

not wired

<&grove_gpios 26 …>

GP26: ADC0/DIO26 (ADC/PWM5CHA)

not wired

<&grove_gpios 27 …>

GP27: ADC1/DIO27 (ADC/PWM5CHB)

not wired

<&grove_gpios 28 …>

GP28: ADC2/DIO28 (ADC/PWM6CHA)

not wired

<&grove_gpios 29 …>

GP29: ADC3 (ADC/PWM6CHB)

not wired

<&grove_gpios 30 …>

<&grove_gpios 31 …>

System Clock

The RP2350 [35] MCU is configured to use the 12㎒ external crystal with the on-chip PLL generating the 125㎒ system clock. The internal AHB and APB units are set up in the same way as the upstream Raspberry Pi Pico C/C++ SDK [9] libraries.

GPIO (PWM) Ports

The RP2350 [35] MCU has 1 GPIO cell which covers all I/O pads and 8 PWM function unit each with 2 channels beside a dedicated Timer unit. On the Mini USB RP2350, almost all 16 PWM channels are available on the edge connectors, although some channels are occupied by special signals if their function is enabled.

ADC/TS Ports

The RP2350 [35] MCU has 1 ADC with 4 channels and an additional fifth channel for the on-chip temperature sensor (TS). The ADC channels 0-3 are available on the edge connectors.

The external voltage reference ADC_VREF is directly connected to the 3.3V power supply.

SPI Port

The RP2350 [35] MCU has 2 SPIs. The serial bus SPI0 is connect to external devices over GP7 (MOSI), GP4 (MISO), GP6 (SCK), and GP5 (CSn) on the edge connectors. SPI1 is not available in any default setup.

I2C Port

The RP2350 [35] MCU has 2 I2Cs. The serial bus I2C0 and I2C1 are connect to external devices by default over GP16 (I2C0_SDA), GP17 (I2C0_SCL) on the Grove compatible Qwiic/STEMMA QT connector and GP14 (I2C1_SDA), GP15 (I2C1_SCL) on the edge connectors. I2C1 is available but disabled in any default setup.

Serial Port

The RP2350 [35] MCU has 2 UARTs. One of the UARTs (UART0) is connected to external devices over GP0 (TX) and GP1 (RX) on the edge connectors. Optional the hardware handshake signals GP2 (CTS) and GP3 (RTS) can be used for flow control.

USB Device Port

The RP2350 [35] MCU has a (native) USB device port that can be used to communicate with a host PC. See the USB sample applications for more, such as the USB CDC ACM UART sample sample which sets up a virtual serial port that echos characters back to the host PC. The Mini USB RP2350 provides the Zephyr console per default on the USB port as CDC ACM:

USB device idVendor=2e8a, idProduct=000a, bcdDevice= 4.03
USB device strings: Mfr=1, Product=2, SerialNumber=3
Product: Mini USB RP2350 (CDC ACM)
Manufacturer: Nologo (Raspberry Pi)
SerialNumber: B163A72F0CF0C97A

Programmable I/O (PIO)

The RP2350 SoC comes with three PIO periherals. These are three simple co-processors that are designed for I/O operations. The PIOs run a custom instruction set, generated from a custom assembly language. PIO programs are assembled using pioasm, a tool provided by Raspberry Pi.

Zephyr does not (currently) assemble PIO programs. Rather, they should be manually assembled and embedded in source code. An example of how this is done can be found at drivers/serial/uart_rpi_pico_pio.c.

Sample: SPI via PIO

The samples/sensor/bme280/README.rst sample includes a demonstration of using the PIO SPI driver to communicate with an environmental sensor. The PIO SPI driver supports using any combination of GPIO pins for an SPI bus, as well as allowing up to four independent SPI buses on a single board (using the two SPI devices as well as both PIO devices).

Programming and Debugging

Flashing

Using UF2

You can flash the Mini USB RP2350 with a UF2 file. By default, building an application for this board will generate a build/zephyr/zephyr.uf2 file. If the board is powered on with the BOOTSEL button pressed, it will appear on the host as a mass storage device. The UF2 file should be drag-and-dropped to the device, which will flash the board.

Debugging

There is no SWD interface, thus debugging is not possible on thsi board.

Hello Shell on the USB Console (CDC/ACM)

Hello Shell on @4mb revision (default)

west build -b mini_usb_rp2350/rp2350a/m33 -p -d build/mini_usb_rp2350 bridle/samples/helloshell
west flash -d build/mini_usb_rp2350

Hello Shell on @16mb revision

west build -b mini_usb_rp2350@16mb/rp2350a/m33 -p -d build/mini_usb_rp2350 bridle/samples/helloshell
west flash -d build/mini_usb_rp2350

Simple test execution on target

(text in bold is a command input)

More Samples

LED Blinky and Fade

Hint

Neither LED Blinky nor LED Fade can be built and executed on standard Mini USB RP2350, because this system has only one digital RGB LED. A simple GPIO or PWM control is not possible!

WS2812 LED Test Pattern by PIO

west build -b mini_usb_rp2350/rp2350a/m33 -p -d build/mini_usb_rp2350 zephyr/samples/drivers/led/led_strip
west flash -d build/mini_usb_rp2350

Simple test execution on target

Grove Module Samples

All currently supported Grove modules can be reused on the Qwiic / STEMMA QT connector using a conversion cable. Only the corresponding shield stacks need to be specified.

Hello Shell with sensor access to Grove BMP280

west build -b mini_usb_rp2350/rp2350a/m33 -p --shield "grove_sens_bmp280" -d build/mini_usb_rp2350 bridle/samples/helloshell
west flash -d build/mini_usb_rp2350

Simple test execution on target

(text in bold is a command input)

LED Blinky with Grove LED Button (Qwiic signals as GPIO)

west build -b mini_usb_rp2350/rp2350a/m33 -p --shield "grove_btn_d16_inv grove_led_d17 grove_pwm_led_d17 x_grove_testbed" -d build/mini_usb_rp2350 zephyr/samples/basic/blinky
west flash -d build/mini_usb_rp2350

Simple test execution on target

LED Fade with Grove LED Button (Qwiic signals as PWM)

west build -b mini_usb_rp2350/rp2350a/m33 -p --shield "grove_btn_d16_inv grove_led_d17 grove_pwm_led_d17 x_grove_testbed" -d build/mini_usb_rp2350 zephyr/samples/basic/fade_led
west flash -d build/mini_usb_rp2350

Simple test execution on target

LED Switch with Grove LED Button (Qwiic signals as GPIO)

west build -b mini_usb_rp2350/rp2350a/m33 -p --shield "grove_btn_d16_inv grove_led_d17 grove_pwm_led_d17 x_grove_testbed" -d build/mini_usb_rp2350 zephyr/samples/basic/button
west flash -d build/mini_usb_rp2350

Simple test execution on target

References