PicoBoy Color Plus (PBC+)

The PicoBoy Color Plus (PBC+), based on the new RP2350 SoC [41] by Raspberry Pi Ltd., is a new extended and in some points optimized version of the PicoBoy Color. The computing and memory performance has been significantly increased and missing functions have been added.

Board Overview

Hardware

The PicoBoy Color Plus [12] is a special mini sized RP2350A development board.

Features and Resources

Printed Circuit Board

5V/125~250㎃ 3.0~3.3V/100~150㎃

150㎒ 16㎆ 520㎅ USB-C 2×AAA UF2

RST BOOT USER UP|DOWN|LEFT|RIGHT|ENTER

RED YELLOW GREEN RGB LCD PASSIVE 3-DOF

11 5 1 1 1 1

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

  • 520㎅ on-chip SRAM

  • 16㎆ on-board QSPI flash with XIP capabilities

  • USB 1.1 controller (host/device)

  • On-board USB-C connector

  • On-board 3.3V DC-DC buck-boost converter with 250㎃ switch

  • On-board 2 AAA battery holder

  • On-board RESET button

  • On-board BOOT button

  • On-board 1 User joystick (5 keys)

  • On-board 2 User button

  • On-board 3 User LEDs

  • On-board 1 User RGB LED

  • On-board 1 passive magnetic speaker

  • On-board 3-DOF IMU sensor

  • On-board 1.69-inch 240×280 pixels LCD, 65K colorful IPS (serial)

  • RGB565, 16-bit color depth

  • 1 INT signal from IMU sensor

  • 1 RST signal to LCD controller

  • 1 C/D signal to LCD controller

  • 1 SPI controller for LCD

  • 1 I2C controller for external sensor

  • 5 PWM channels for LEDs, LCD backlight and speaker

  • 1 ADC analog inputs

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

  • 1 Watchdog timer peripheral

  • 1 Temperature sensor on-chip

Design Data

PicoBoy Color Plus

Positions

PicoBoy Color Plus details

Front side:

  1. ST7789V
    1.69-inch 240×280 pixels 65K colorful IPS LCD
  2. User joystick
    UP, DOWN, LEFT, RIGHT, ENTER
  3. User keys
    momentary push buttons
  4. LED monochrome
    user LEDs for diagnostic (not power indicator)
  5. SK6805-EC14 (WS2812B)
    RGB LED
  6. Magnetic Speaker
    3.0Vo-p (2.0~4.0V) @ 4,000㎐ with ≫65㏈A
  7. Maker Port
    Qwiic / STEMMA QT compatiple connector and pinout with conversion cable to Grove connector supports I2C0 (default), UART1, GPIO/PWM
  8. Solder Pads
    supports I2C0, UART0 (default), GPIO/PWM, HSTX

Back side:

  1. RP2350A

  2. USB Type-C connector
    Supports USB1.1 hosts and slave devices
  3. Power Supply Switch
  4. RESET and BOOT button
    press it when resetting to enter download mode
  5. W25Q128JV
    16㎆ NOR-Flash
  6. STK8BA58
    3-axis MEMS acceleration sensor
  7. AAA
    2×1.5V @ 1,200㎃h battery holder
  • TX4310B (N1IF)
    150㎃ DC-DC buck-boost converter, power switch for 3.3V
  • S8050 (J3Y)
    SMD NPN Transistor 300㎽, 40V @ 500㎃, SOT-23

Data Sheets

Flash partitions

QSPI NOR-Flash

code_partition

storage_partition

primary 16㎆

1㎆

15㎆

secondary N/A

–

–

Pinouts

The peripherals of the RP2350 SoC [41] 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 assignments for the on-board wiring is defined below. There is an additional edge connector and there are solder pads with additional signals routed to outside of the board.

Pin Mapping

on-board:

11 5 1 1 1 1

on-board:

1 RST 1 BOOT 2 USER 1 CURSOR 1 RED 1 YELLOW 1 GREEN 1 RGB 1 LCD 1 PASSIVE 3-DOF

Default Zephyr On-Board Mapping

 

Buttons

  • ENTER : GP0 (PWM0)
  • RIGHT : GP1 (PWM1)
  • DOWN : GP2 (PWM2)
  • LEFT : GP3 (PWM3)
  • UP : GP4 (PWM4)
  • BACK : GP27 (PWM11)
  • FORWARD : GP28 (PWM12)

LEDs

  • RGB : SPI1_TX : GP11 (PWM11)
  • GREEN : GP12 PWM12
  • YELLOW : GP13 PWM13
  • RED : GP14 PWM14

Display and Speaker

  • n.c. : GP5 (PWM5)
  • n.c. : GP6 (PWM6)
  • n.c. : GP7 (PWM7)
  • LCD : GP8 (PWM8)
    on-board LCD data/cmd LCD_DC
  • LCD : GP9 (PWM9)
    on-board LCD reset LCD_RST
  • LCD : GP10 (PWM10)
    on-board LCD chip select LCD_CS
  • PASSIVE : GP15 PWM15
  • LCD SPI0_SCK : GP18 (PWM2)
    on-board LCD i/f clock LCD_CLK
  • LCD SPI0_TX : GP19 (PWM3)
    on-board LCD i/f data LCD_DIN
  • LCD GPIO26 : GP26 (PWM10)
    on-board LCD backlight LCD_BL

Sensor I/O and via Qwiic / STEMMA QT

  • I2C0_SDA : (UART1_TX) : GP20 (PWM4)
    on-board maker port i/f data I2C_SDA
    on-board acc. sensor i/f data ACCS_SDA
  • I2C0_SCL : (UART1_RX) : GP21 (PWM5)
    on-board maker port i/f clock I2C_SCL
    on-board acc. sensor i/f clock ACCS_SCL

Serial I/O via solder pads

  • UART0_TX : (I2C0_SDA) : GP16 (PWM0)
    on-board solder pads i/f data UART_TX
  • UART0_RX : (I2C0_SCL) : GP17 (PWM1)
    on-board solder pads i/f data UART_RX

GPIO and ADC

  • 3-DOF : GP22 (PWM6)
    on-board acc. sensor i/f interrupt ACCS_INT
  • n.c. : GP23 (PWM7)
  • n.c. : GP24 (PWM8)
  • n.c. : GP25 (PWM9)
  • n.c. ADC_CH3 : GP29 (PWM13)
    on-board VSYS/3 monitoring

Devicetree compatible

Supported Features

Similar to the Raspberry Pi Pico the 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

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

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

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

Board Configurations

The board can be configured only for the following different use cases.

west build -b picoboy_color_plus/rp2350a/hazard3_0

Use the native USB device port with CDC-ACM as Zephyr console and for the shell. Running on Hazard3/RISC-V core. EXPERIMENTAL

west build -b picoboy_color_plus/rp2350a/m33_0

Use the native USB device port with CDC-ACM as Zephyr console and for the shell. Running on Cortex-M33 core.

Connections and IOs

The PicoBoy Color Plus [13] website has detailed information about board connections. Download the different datasheets there or as linked above on the positions for more details.

System Clock

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

GPIO (PWM) Ports

The RP2350 [41] MCU has 1 GPIO cell which covers all I/O pads and 12 PWM function unit each with 2 channels beside a dedicated Timer unit. Only 5 PWM channels are available, for the LCD backlight, the three user LEDs and the passive magnetic speaker.

ADC/TS Ports

The RP2350 [41] MCU has 1 ADC with 4 channels and an additional fifth channel for the on-chip temperature sensor (TS). The ADC channels 0-2 are not available for any on-board function on and may be completely unusable. ADC channel 3 will be used for internal on-board voltage monitoring.

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

SPI Port

The RP2350 [41] MCU has 2 SPIs. The serial bus SPI0 is connect to the on-board LCD over GP19 (MOSI), GP16 (MISO), GP18 (SCK), and GP17 (CSn), but only MOSI and SCK is used for write-only communication. The display chip-select signal will driven as simple GPIO by GP10 and the display itself does not provide any data out signal (MISO).

The serial bus SPI1 will be used internaly to drive the on-board RGB LED over a one-wire digital signal on GP11 (MOSI).

I2C Port

The RP2350 [41] MCU has 2 I2Cs. The serial bus I2C0 is connect to the on-board acceleration sensor over GP20 (I2C0_SDA), GP21 (I2C0_SCL). I2C1 is not available in any default setup.

PicoBoy Color Plus I2C Port

The board also provides the I2C0 serial bus with the same pin assignment for external sensors via a Maker Port as a Qwiic / STEMMA QT connector. On the solder pads, however, the I2C0 is optionally accessible with GP16 (SDA) and GP17 (SCL).

The I2C port on solder pads is disabled by default.

Serial Port

The RP2350 [41] MCU has 2 UARTs.

PicoBoy Color Plus UART Port

The serial port UART0 is connect to the on-board solder pads over GP16 (UART0_TX), GP17 (UART0_RX). UART1 would be optional available on the Maker Port (Qwiic / STEMMA QT connector). The UART port cannot be used at the same time as the I2C port on the solder pads. Both share the required lines on GP16 and GP17.

The UART port on solder pads is enabled by default.

USB Device Port

The RP2350 [41] 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 board provides the Zephyr console per default on the USB port as CDC ACM:

USB device idVendor=2e8a, idProduct=000a, bcdDevice= 4.05
USB device strings: Mfr=1, Product=2, SerialNumber=3
Product: PicoBoy Color Plus (CDC ACM)
Manufacturer: JSED (Raspberry Pi)
SerialNumber: B163A72F0CF0C97A

Programmable I/O (PIO)

The RP2350 SoC [41] comes with three PIO periherals. These are two 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. Further information can be found in the Raspberry Pi Pico C/C++ SDK [10] document, section with title “Using PIOASM, the PIO Assembler”.

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 or drivers/spi/spi_rpi_pico_pio.c.

Programming and Debugging

Flashing

The board can only be flashed with a UF2 file. There is no SWD connector.

Using UF2

By default, building an application for the 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:

USB device idVendor=2e8a, idProduct=000f, bcdDevice= 1.00
USB device strings: Mfr=1, Product=2, SerialNumber=0
Product: RP2350 Boot
Manufacturer: Raspberry Pi
SerialNumber: E9DB4B801D503140

The UF2 file should be drag-and-dropped or copied on command line to the device, which will then flash the board.

RP2350 Boot-ROM

Each RP2350 SoC [41] ships the UF2 compatible [6] bootloader pico-bootrom-rp2350 [11], a native support in silicon. The full source for the RP2350 bootrom at pico-bootrom-rp2350 [11] includes versions A2, A3 and A4 of the bootrom, which correspond to the same silicon revisions, respectively.

Note that every time you build a program for the RP2350, the Pico SDK selects and creates an appropriate image definition and/or partition table block with attributes and precedes it in the firmware. Further information can be found in the RP2350 Datasheet [42], sections with title “Bootrom” and “Processor Controlled Boot Sequence”.

Debugging

The board does not provide any SWD connector, thus debugging software is not possible.

Basic Samples

LED Blinky and Fade

Red User LED Blinky by GPIO

See also Zephyr sample: Blinky.

On Hazard3 RISC-V (RV32IMAC+)

west build -b picoboy_color_plus/rp2350a/hazard3_0 -p -d build/picoboy_color_plus zephyr/samples/basic/blinky
west flash -d build/picoboy_color_plus

On ARM Cortex-M33

west build -b picoboy_color_plus/rp2350a/m33_0 -p -d build/picoboy_color_plus zephyr/samples/basic/blinky
west flash -d build/picoboy_color_plus

Red User LED Blinky by PWM

See also Zephyr sample: PWM Blinky.

On Hazard3 RISC-V (RV32IMAC+)

west build -b picoboy_color_plus/rp2350a/hazard3_0 -p -d build/picoboy_color_plus zephyr/samples/basic/blinky_pwm
west flash -d build/picoboy_color_plus

On ARM Cortex-M33

west build -b picoboy_color_plus/rp2350a/m33_0 -p -d build/picoboy_color_plus zephyr/samples/basic/blinky_pwm
west flash -d build/picoboy_color_plus

All User LED Fade by PWM

See also Zephyr sample: Fade LED.

On Hazard3 RISC-V (RV32IMAC+)

west build -b picoboy_color_plus/rp2350a/hazard3_0 -p -d build/picoboy_color_plus zephyr/samples/basic/fade_led
west flash -d build/picoboy_color_plus

On ARM Cortex-M33

west build -b picoboy_color_plus/rp2350a/m33_0 -p -d build/picoboy_color_plus zephyr/samples/basic/fade_led
west flash -d build/picoboy_color_plus

Red User LED On/Off by GPIO Button

See also Zephyr sample: Button.

On Hazard3 RISC-V (RV32IMAC+)

west build -b picoboy_color_plus/rp2350a/hazard3_0 -p -d build/picoboy_color_plus zephyr/samples/basic/button
west flash -d build/picoboy_color_plus

On ARM Cortex-M33

west build -b picoboy_color_plus/rp2350a/m33_0 -p -d build/picoboy_color_plus zephyr/samples/basic/button
west flash -d build/picoboy_color_plus
PicoBoy Color Plus SK6805 LED Test Pattern

SK6805 (WS2812) LED Test Pattern by SPI

See also Zephyr sample: LED strip.

On Hazard3 RISC-V (RV32IMAC+)

west build -b picoboy_color_plus/rp2350a/hazard3_0 -p -d build/picoboy_color_plus zephyr/samples/drivers/led/led_strip -- -DCONFIG_SAMPLE_LED_UPDATE_DELAY=500
west flash -d build/picoboy_color_plus

On ARM Cortex-M33

west build -b picoboy_color_plus/rp2350a/m33_0 -p -d build/picoboy_color_plus zephyr/samples/drivers/led/led_strip -- -DCONFIG_SAMPLE_LED_UPDATE_DELAY=500
west flash -d build/picoboy_color_plus

Hello Shell on USB-CDC/ACM Console

Hello Shell

See also Bridle sample: Hello Shell.

On Hazard3 RISC-V (RV32IMAC+)

west build -b picoboy_color_plus/rp2350a/hazard3_0 -p -d build/picoboy_color_plus bridle/samples/helloshell
west flash -d build/picoboy_color_plus

On ARM Cortex-M33

west build -b picoboy_color_plus/rp2350a/m33_0 -p -d build/picoboy_color_plus bridle/samples/helloshell
west flash -d build/picoboy_color_plus

Simple test execution on target

(text in bold is a command input)

uart:~$ hello -h
hello - say hello
uart:~$ hello
Hello from shell.
uart:~$ hwinfo devid
Length: 8
ID: 0xb163a72f0cf0c97a

uart:~$ kernel version
Zephyr version 4.5.0-rc1

uart:~$ bridle version
Bridle version 4.4.99

uart:~$ bridle version long
Bridle version 4.4.99.0

uart:~$ bridle info
Zephyr: 4.5.0-rc1
Bridle: 4.4.99

On Hazard3 RISC-V (RV32IMAC+)

uart:~$ device list
devices:
- clock-controller@40010000 (READY)
  DT node labels: clocks
- reset-controller@40020000 (READY)
  DT node labels: reset
- interrupt-controller (READY)
  DT node labels: intc
- cdc_acm_console_uart (READY)
  DT node labels: cdc_acm_console_uart
- timer@400b8000 (READY)
  DT node labels: timer1
- timer@400b0000 (READY)
  DT node labels: timer0
- uart@40070000 (READY)
  DT node labels: uart0
- watchdog@400d8000 (READY)
  DT node labels: wdt0
- dma@50000000 (READY)
  DT node labels: dma
- gpio-port@0 (READY)
  DT node labels: gpio0 gpio0_lo
- usbd@50110000 (READY)
  DT node labels: usbd zephyr_udc0
- adc@400a0000 (READY)
  DT node labels: adc
- flash-controller@400d0000 (READY)
  DT node labels: qmi
- i2c@40090000 (READY)
  DT node labels: i2c0 zephyr_i2c stemma_i2c qwiic_i2c grove_i2c
- pwm@400a8000 (READY)
  DT node labels: pwm grove_pwm_d20 grove_pwm_d21
- vreg@40100000 (READY)
  DT node labels: vreg
- spi@40088000 (READY)
  DT node labels: spi1
- spi@40080000 (READY)
  DT node labels: spi0
- lcd-backlight-en (READY)
  DT node labels: lcd_backlight_en
- pwm-leds (READY)
  DT node labels: pwm_leds
- sk6805@0 (READY)
  DT node labels: sk6805 led_strip
- dietemp (READY)
  DT node labels: die_temp
- stk8ba58@18 (READY)
  DT node labels: stk8ba58

On ARM Cortex-M33

uart:~$ device list
devices:
- clock-controller@40010000 (READY)
  DT node labels: clocks
- reset-controller@40020000 (READY)
  DT node labels: reset
- cdc_acm_console_uart (READY)
  DT node labels: cdc_acm_console_uart
- timer@400b8000 (READY)
  DT node labels: timer1
- timer@400b0000 (READY)
  DT node labels: timer0
- uart@40070000 (READY)
  DT node labels: uart0
- watchdog@400d8000 (READY)
  DT node labels: wdt0
- dma@50000000 (READY)
  DT node labels: dma
- gpio-port@0 (READY)
  DT node labels: gpio0 gpio0_lo
- usbd@50110000 (READY)
  DT node labels: usbd zephyr_udc0
- adc@400a0000 (READY)
  DT node labels: adc
- flash-controller@400d0000 (READY)
  DT node labels: qmi
- i2c@40090000 (READY)
  DT node labels: i2c0 zephyr_i2c stemma_i2c qwiic_i2c grove_i2c
- pwm@400a8000 (READY)
  DT node labels: pwm grove_pwm_d20 grove_pwm_d21
- vreg@40100000 (READY)
  DT node labels: vreg
- spi@40088000 (READY)
  DT node labels: spi1
- spi@40080000 (READY)
  DT node labels: spi0
- lcd-backlight-en (READY)
  DT node labels: lcd_backlight_en
- pwm-leds (READY)
  DT node labels: pwm_leds
- sk6805@0 (READY)
  DT node labels: sk6805 led_strip
- dietemp (READY)
  DT node labels: die_temp
- stk8ba58@18 (READY)
  DT node labels: stk8ba58
uart:~$ history
[  0] history
[  1] device list
[  2] bridle info
[  3] bridle version long
[  4] bridle version
[  5] kernel version
[  6] hwinfo devid
[  7] hello
[  8] hello -h

More Samples

3-Axis accelerometer data on USB-CDC/ACM Console

The samples are prepared for the on-board 3-DOF accelerometer connected to the I2C0 bus.

Chip-specific

Get 3-axis accelerometer data from an STK8BA58 sensor (polling & trigger mode) using the Sensors API. See also Bridle sample STK8BA58 3-Axis Accelerometer Sample and also the console output in section Building on picoboy_color_plus of the Bridle sample documentation.

Polling Mode

Get 3-axis accelerometer data from the on-board sensor (polling mode) using the Sensors API. See also Zephyr sample Generic 3-Axis accelerometer polling.

Invoke west build and west flash:

On Hazard3 RISC-V (RV32IMAC+)

west build -b picoboy_color_plus/rp2350a/hazard3_0 -p -d build/picoboy_color_plus zephyr/samples/sensor/accel_polling
west flash -d build/picoboy_color_plus

On ARM Cortex-M33

west build -b picoboy_color_plus/rp2350a/m33_0 -p -d build/picoboy_color_plus zephyr/samples/sensor/accel_polling
west flash -d build/picoboy_color_plus

Simple test execution on target

*** Booting Zephyr OS build v4.5.0-rc1…***
     stk8ba58@18 [m/s^2]:    (   -1.451188,     4.930195,    -9.110771)
     stk8ba58@18 [m/s^2]:    (   -1.451188,     4.930195,    -9.110771)
     stk8ba58@18 [m/s^2]:    (   -1.345472,     4.459280,    -9.399086)
     stk8ba58@18 [m/s^2]:    (   -1.316640,     4.468890,    -9.379865)
     stk8ba58@18 [m/s^2]:    (   -1.316640,     4.468890,    -9.379865)

Trigger Mode

Get 3-axis accelerometer data from the on-board sensor (trigger mode) using the Sensors API. See also Zephyr sample Accelerometer trigger.

Invoke west build and west flash:

On Hazard3 RISC-V (RV32IMAC+)

west build -b picoboy_color_plus/rp2350a/hazard3_0 -p -d build/picoboy_color_plus zephyr/samples/sensor/accel_trig
west flash -d build/picoboy_color_plus

On ARM Cortex-M33

west build -b picoboy_color_plus/rp2350a/m33_0 -p -d build/picoboy_color_plus zephyr/samples/sensor/accel_trig
west flash -d build/picoboy_color_plus

Simple test execution on target

*** Booting Zephyr OS build v4.5.0-rc1… ***
     stk8ba58@18 [m/s^2]:    (   -1.777945,     4.238238,    -9.427917)
     stk8ba58@18 [m/s^2]:    (   -1.739503,     4.151743,    -9.562465)
     stk8ba58@18 [m/s^2]:    (   -1.816387,     4.170964,    -9.514412)
     stk8ba58@18 [m/s^2]:    (   -1.845219,     4.276680,    -9.427917)
     stk8ba58@18 [m/s^2]:    (   -1.864440,     4.084469,    -9.370254)

Sounds from the speaker on USB-CDC/ACM Console

The sample is prepared for the on-board PWM_SPEAKER connected to the PWM channel at GP15 / PWM15 (PWM7CHB).

The PWM period is 880 ㎐, twice the concert pitch frequency of 440 ㎐.

PicoBoy Color Plus Speaker Test

Speaker Test

Invoke west build and west flash:

On Hazard3 RISC-V (RV32IMAC+)

west build -b picoboy_color_plus/rp2350a/hazard3_0 -p -d build/picoboy_color_plus bridle/samples/buzzer
west flash -d build/picoboy_color_plus

On ARM Cortex-M33

west build -b picoboy_color_plus/rp2350a/m33_0 -p -d build/picoboy_color_plus bridle/samples/buzzer
west flash -d build/picoboy_color_plus

Simple test execution on target

  1. play a beep

  2. play a folk song

  3. play a chrismas song

uart:~$ buzzer beep
uart:~$ buzzer play folksong
uart:~$ buzzer play xmastime

Input dump on USB-CDC/ACM Console

Print the input events related to the five on-board joystick keys using the Input subsystem API. That are:

BACK : zephyr,code = <INPUT_KEY_BACK>;
FORWARD : zephyr,code = <INPUT_KEY_FORWARD>;
UP : zephyr,code = <INPUT_KEY_UP>;
DOWN : zephyr,code = <INPUT_KEY_DOWN>;
LEFT : zephyr,code = <INPUT_KEY_LEFT>;
RIGHT : zephyr,code = <INPUT_KEY_RIGHT>;
ENTER : zephyr,code = <INPUT_KEY_ENTER>;

Joystick Test

See also Zephyr sample: Input dump.

On Hazard3 RISC-V (RV32IMAC+)

west build -b picoboy_color_plus/rp2350a/hazard3_0 -p -d build/picoboy_color_plus zephyr/samples/subsys/input/input_dump
west flash -d build/picoboy_color_plus

On ARM Cortex-M33

west build -b picoboy_color_plus/rp2350a/m33_0 -p -d build/picoboy_color_plus zephyr/samples/subsys/input/input_dump
west flash -d build/picoboy_color_plus

Simple logging output on target

*** Booting Zephyr OS build v4.5.0-rc1…***
Input sample started
I: input event: dev=gpio-keys        SYN type= 1 code=158 value=1
I: input event: dev=gpio-keys        SYN type= 1 code=158 value=0
I: input event: dev=gpio-keys        SYN type= 1 code=159 value=1
I: input event: dev=gpio-keys        SYN type= 1 code=159 value=0
I: input event: dev=gpio-keys        SYN type= 1 code=103 value=1
I: input event: dev=gpio-keys        SYN type= 1 code=103 value=0
I: input event: dev=gpio-keys        SYN type= 1 code=108 value=1
I: input event: dev=gpio-keys        SYN type= 1 code=108 value=0
I: input event: dev=gpio-keys        SYN type= 1 code=105 value=1
I: input event: dev=gpio-keys        SYN type= 1 code=105 value=0
I: input event: dev=gpio-keys        SYN type= 1 code=106 value=1
I: input event: dev=gpio-keys        SYN type= 1 code=106 value=0
I: input event: dev=gpio-keys        SYN type= 1 code= 28 value=1
I: input event: dev=gpio-keys        SYN type= 1 code= 28 value=0

Display Test and Demonstration

The following samples work with the chosen display. That is:

LCD : chosen { zephyr,display = &lcd_panel; };
ST7789V : lcd_panel: &st7789v_240x280 {};

Devicetree compatible

  • zephyr,lvgl-button-input with devicetree relation lvgl_buttons: lvgl-buttons { input = <&gpio_keys>; };

    FORWARD : input-codes = <INPUT_KEY_FORWARD>; : coordinates = <120 140>; (center of LCD)
  • zephyr,lvgl-keypad-input with devicetree relation lvgl_keypad: lvgl-keypad { input = <&gpio_keys>; };

    UP : input-codes = <INPUT_KEY_UP>; : lvgl-codes = <LV_KEY_UP>;
    DOWN : input-codes = <INPUT_KEY_DOWN>; : lvgl-codes = <LV_KEY_DOWN>;
    LEFT : input-codes = <INPUT_KEY_LEFT>; : lvgl-codes = <LV_KEY_LEFT>;
    RIGHT : input-codes = <INPUT_KEY_RIGHT>; : lvgl-codes = <LV_KEY_RIGHT>;
    ENTER : input-codes = <INPUT_KEY_ENTER>; : lvgl-codes = <LV_KEY_ENTER>;

LCD Orientation and Bit Order Test

PicoBoy Color Plus Display Test

Draw some basic rectangles onto the display using the Display driver API. See also Zephyr sample: Display.

On Hazard3 RISC-V (RV32IMAC+)

west build -b picoboy_color_plus/rp2350a/hazard3_0 -p -d build/picoboy_color_plus zephyr/samples/drivers/display
west flash -d build/picoboy_color_plus

On ARM Cortex-M33

west build -b picoboy_color_plus/rp2350a/m33_0 -p -d build/picoboy_color_plus zephyr/samples/drivers/display
west flash -d build/picoboy_color_plus

LVGL Basic Sample

Displays “Hello World!” in the center of the screen and a counter at the bottom which increments every second using the LVGL module on top of the Display driver API. See also Zephyr sample: LVGL basic sample.

On Hazard3 RISC-V (RV32IMAC+)

west build -b picoboy_color_plus/rp2350a/hazard3_0 -p -d build/picoboy_color_plus zephyr/samples/subsys/display/lvgl
west flash -d build/picoboy_color_plus

On ARM Cortex-M33

west build -b picoboy_color_plus/rp2350a/m33_0 -p -d build/picoboy_color_plus zephyr/samples/subsys/display/lvgl
west flash -d build/picoboy_color_plus

This sample comes with a Shell command line access to the LVGL backend on the console, here configured for a USB console:

Simple test execution on target

uart:~$ lvgl
lvgl - LVGL shell commands
Subcommands:
  stats   : Show LVGL statistics
  monkey  : LVGL monkey testing

uart:~$ lvgl stats
stats - Show LVGL statistics
Subcommands:
  memory  : Show LVGL memory statistics
            Usage: memory [-c]
                   -c  dump chunk information

uart:~$ lvgl stats memory
Heap at 0x20001838 contains 2047 units in 11 buckets

  bucket#    min units        total      largest      largest
             threshold       chunks      (units)      (bytes)
  -----------------------------------------------------------
        0            1            1            1            8
        1            2            3            3           24
        9          512            1          950         7600

7644 free bytes, 8136 allocated bytes, overhead = 600 bytes (3.7%)

On ARM Cortex-M33

uart:~$ device list
devices:
- clock-controller@40010000 (READY)
  DT node labels: clocks
- reset-controller@40020000 (READY)
  DT node labels: reset
- cdc_acm_console_uart (READY)
  DT node labels: cdc_acm_console_uart
- timer@400b8000 (READY)
  DT node labels: timer1
- timer@400b0000 (READY)
  DT node labels: timer0
- uart@40070000 (READY)
  DT node labels: uart0
- watchdog@400d8000 (READY)
  DT node labels: wdt0
- dma@50000000 (READY)
  DT node labels: dma
- gpio-port@0 (READY)
  DT node labels: gpio0 gpio0_lo
- usbd@50110000 (READY)
  DT node labels: usbd zephyr_udc0
- pwm@400a8000 (READY)
  DT node labels: pwm grove_pwm_d20 grove_pwm_d21
- spi@40088000 (READY)
  DT node labels: spi1
- spi@40080000 (READY)
  DT node labels: spi0
- lcd-backlight-en (READY)
  DT node labels: lcd_backlight_en
- mipi-dbi-spi0 (READY)
  DT node labels: mipi_dbi_spi0
- st7789v-240x280@0 (READY)
  DT node labels: st7789v_240x280 lcd_panel
- gpio-keys (READY)
  DT node labels: gpio_keys
- lvgl-buttons (READY)
  DT node labels: lvgl_buttons
- lvgl-keypad (READY)
  DT node labels: lvgl_keypad

On Hazard3 RISC-V (RV32IMAC+)

uart:~$ device list
devices:
- clock-controller@40010000 (READY)
  DT node labels: clocks
- reset-controller@40020000 (READY)
  DT node labels: reset
- interrupt-controller (READY)
  DT node labels: intc
- cdc_acm_console_uart (READY)
  DT node labels: cdc_acm_console_uart
- timer@400b8000 (READY)
  DT node labels: timer1
- timer@400b0000 (READY)
  DT node labels: timer0
- uart@40070000 (READY)
  DT node labels: uart0
- watchdog@400d8000 (READY)
  DT node labels: wdt0
- dma@50000000 (READY)
  DT node labels: dma
- gpio-port@0 (READY)
  DT node labels: gpio0 gpio0_lo
- usbd@50110000 (READY)
  DT node labels: usbd zephyr_udc0
- pwm@400a8000 (READY)
  DT node labels: pwm grove_pwm_d20 grove_pwm_d21
- spi@40088000 (READY)
  DT node labels: spi1
- spi@40080000 (READY)
  DT node labels: spi0
- lcd-backlight-en (READY)
  DT node labels: lcd_backlight_en
- mipi-dbi-spi0 (READY)
  DT node labels: mipi_dbi_spi0
- st7789v-240x280@0 (READY)
  DT node labels: st7789v_240x280 lcd_panel
- gpio-keys (READY)
  DT node labels: gpio_keys
- lvgl-buttons (READY)
  DT node labels: lvgl_buttons
- lvgl-keypad (READY)
  DT node labels: lvgl_keypad

Grove Module Samples

The following examples require the Qwiic / STEMMA QT connection (Maker Port) and can therefore only be built and executed for and on the PicoBoy Color Plus.

Sensor access to Grove BMP280 (Qwiic signals as I2C)

Hello Shell

See also Bridle sample: Hello Shell.

On Hazard3 RISC-V (RV32IMAC+)

west build -b picoboy_color_plus/rp2350a/hazard3_0 -p --shield "grove_sens_bmp280" -d build/picoboy_color_plus bridle/samples/helloshell
west flash -d build/picoboy_color_plus

On ARM Cortex-M33

west build -b picoboy_color_plus/rp2350a/m33_0 -p --shield "grove_sens_bmp280" -d build/picoboy_color_plus bridle/samples/helloshell
west flash -d build/picoboy_color_plus

Simple test execution on target

(text in bold is a command input)

BME280 humidity and pressure sensor

See also Zephyr sample: BME280 humidity and pressure sensor.

On Hazard3 RISC-V (RV32IMAC+)

west build -b picoboy_color_plus/rp2350a/hazard3_0 -p --shield "grove_sens_bmp280" -d build/picoboy_color_plus zephyr/samples/sensor/bme280
west flash -d build/picoboy_color_plus

On ARM Cortex-M33

west build -b picoboy_color_plus/rp2350a/m33_0 -p --shield "grove_sens_bmp280" -d build/picoboy_color_plus zephyr/samples/sensor/bme280
west flash -d build/picoboy_color_plus

Sample Output

[00:00:00.003,000] <dbg> BME280: bme280_chip_init: ID OK (BMP280)
[00:00:00.008,000] <dbg> BME280: bme280_chip_init: "bmp280@77" OK
[00:00:00.009,000] <dbg> STK8BA58.stk8ba58_init: stk8ba58@18: chip id 0x87
[00:00:00.009,000] <dbg> STK8BA58.stk8ba58_trigger_init: stk8ba58@18: int on gpio-port@0.22
[00:00:00.009,000] <dbg> STK8BA58.stk8ba58_init: stk8ba58@18: pm: 7, odr: 5
[00:00:00.009,000] <dbg> STK8BA58.stk8ba58_set_pm: stk8ba58@18: set pm to low-power, sleep 25ms
[00:00:00.009,000] <dbg> STK8BA58.stk8ba58_set_odr: stk8ba58@18: set odr to 250 Hz, bw to 125 Hz
[00:00:00.009,000] <dbg> STK8BA58.stk8ba58_init: stk8ba58@18: range is 2
[00:00:00.010,000] <dbg> STK8BA58.stk8ba58_set_range: stk8ba58@18: set range to 2g, gain to *float* mg/LSB
*** Booting Zephyr OS build v4.5.0-rc1…***
Found device "bmp280@77", getting sensor data
temp: 23.879974; press: 100.648437; humidity: 1196032.0
temp: 23.889984; press: 100.648437; humidity: 1196032.0
temp: 23.899993; press: 100.648437; humidity: 1196032.0
temp: 23.909973; press: 100.648437; humidity: 1196032.0
temp: 23.919982; press: 100.648437; humidity: 1196032.0
temp: 23.929992; press: 100.648437; humidity: 1196032.0
temp: 23.949981; press: 100.652343; humidity: 1196032.0
temp: 23.989990; press: 100.652343; humidity: 1196032.0
temp: 23.969970; press: 100.656250; humidity: 1196032.0
… … …

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

Grove LED Blinky by GPIO

See also Grove LED Shields in Bridle and Zephyr sample: Blinky.

On Hazard3 RISC-V (RV32IMAC+)

west build -b picoboy_color_plus/rp2350a/hazard3_0 -p --shield "grove_btn_d20_inv grove_led_d21 grove_pwm_led_d21 x_grove_testbed" -d build/picoboy_color_plus zephyr/samples/basic/blinky
west flash -d build/picoboy_color_plus

On ARM Cortex-M33

west build -b picoboy_color_plus/rp2350a/m33_0 -p --shield "grove_btn_d20_inv grove_led_d21 grove_pwm_led_d21 x_grove_testbed" -d build/picoboy_color_plus zephyr/samples/basic/blinky
west flash -d build/picoboy_color_plus

Grove LED Blinky by PWM

See also Grove LED Shields in Bridle and Zephyr sample: PWM Blinky.

On Hazard3 RISC-V (RV32IMAC+)

west build -b picoboy_color_plus/rp2350a/hazard3_0 -p --shield "grove_btn_d20_inv grove_led_d21 grove_pwm_led_d21 x_grove_testbed" -d build/picoboy_color_plus zephyr/samples/basic/blinky_pwm
west flash -d build/picoboy_color_plus

On ARM Cortex-M33

west build -b picoboy_color_plus/rp2350a/m33_0 -p --shield "grove_btn_d20_inv grove_led_d21 grove_pwm_led_d21 x_grove_testbed" -d build/picoboy_color_plus zephyr/samples/basic/blinky_pwm
west flash -d build/picoboy_color_plus

Grove and the two other User LED Fade by PWM

See also Grove LED Shields in Bridle and Zephyr sample: Fade LED.

On Hazard3 RISC-V (RV32IMAC+)

west build -b picoboy_color_plus/rp2350a/hazard3_0 -p --shield "grove_btn_d20_inv grove_led_d21 grove_pwm_led_d21 x_grove_testbed" -d build/picoboy_color_plus zephyr/samples/basic/fade_led
west flash -d build/picoboy_color_plus

On ARM Cortex-M33

west build -b picoboy_color_plus/rp2350a/m33_0 -p --shield "grove_btn_d20_inv grove_led_d21 grove_pwm_led_d21 x_grove_testbed" -d build/picoboy_color_plus zephyr/samples/basic/fade_led
west flash -d build/picoboy_color_plus

Grove LED On/Off by Grove Button

See also Grove LED Shields and Grove Button Shields in Bridle and Zephyr sample: Button.

On Hazard3 RISC-V (RV32IMAC+)

west build -b picoboy_color_plus/rp2350a/hazard3_0 -p --shield "grove_btn_d20_inv grove_led_d21 grove_pwm_led_d21 x_grove_testbed" -d build/picoboy_color_plus zephyr/samples/basic/button
west flash -d build/picoboy_color_plus

On ARM Cortex-M33

west build -b picoboy_color_plus/rp2350a/m33_0 -p --shield "grove_btn_d20_inv grove_led_d21 grove_pwm_led_d21 x_grove_testbed" -d build/picoboy_color_plus zephyr/samples/basic/button
west flash -d build/picoboy_color_plus

References