Skip to content

Repository files navigation

pico-console V2

Front view

Build test

A custom-built handheld console platform based on a multi-MCU architecture.

The system is built around two RP2350 microcontrollers: one acting as the main processor and the other as a dedicated southbridge.

This project focuses on scalable embedded system design, including multi-processor coordination, custom protocols, and full-stack bare-metal development.

For the previous version of this project, see pico-console.

Hardware Architecture

hw_diagram

The system consists of two RP2350 microcontrollers. The RP2350A acts as the main processor, while the RP2350B serves as a southbridge for input, audio, sensors, haptics, and other peripherals.

For hardware design details, see:

Firmware Architecture

Logical Architecture sw_diagram

Actual Architecture sw_diagram2

The firmware is organized into application, middleware, and driver layers. Hardware-specific implementations are isolated in the driver layer, while middleware provides higher-level interfaces for system features such as graphics, input, audio, sensors, and power management. This separation minimizes hardware dependencies in application code and allows individual hardware implementations to be changed without propagating those changes throughout the software stack.

Peripherals handled by the southbridge follow the same layered design. From the main processor's perspective, southbridge functionality is accessed through middleware and the inter-MCU bridge rather than directly depending on the physical peripheral implementation.

Bridge Protocol

The main processor and southbridge communicate over UART using a lightweight custom protocol.

The bridge uses a small transport abstraction consisting of readable, read, writable, and write callbacks, keeping the protocol implementation independent of the underlying communication peripheral. The same bridge implementation is reused for the optional wireless module with a separate transport instance.

Features

  • Graphics:

    • 480x320 18-bit LCD (50MHz SPI protocol over HSTX)
  • Audio:

    • Software mixing pipeline (multi-channel)
  • Input:

    • 16 buttons (Nintendo-style ABXY layout)
    • 2 joysticks
    • Touchscreen
    • 6-axis IMU
  • Storage:

  • Other:

    • Temperature monitoring
    • Battery monitoring
    • IR communication (RAW, NEC)
    • Designed for extensibility (at southbridge)
      • Qwiic/STEMMA QT Compatible connector
      • HSTX connector (0.5mm pitch 10pin FPC connector)
      • Additional GPIO pads
    • USB HID (Powered by TinyUSB)

Application Variants

How to build & upload firmware

  1. Install CMake (at least version 3.13), Python 3, and a GCC cross compiler
sudo apt install cmake python3 build-essential gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib
  1. Clone this repository with submodules:
git clone --recurse-submodules https://github.com/Crem2y/pico-console-v2.git
  1. Launch the build script:
./pico_build.sh
  1. Press the reset button twice to enter bootloader mode.

  2. Upload the generated .uf2 file to your board.

    • if you already installed picotool, use this.
./pico_upload.sh
  1. (Optional) Launch the clean script to remove build artifacts:
./pico_clean.sh

License

  • This project is licensed under the MIT License.
  • See LICENSE for details.

Third-party components

  • Thank you to the many open-source contributors.
  • See the third_party_licenses/ directory for full details.

Releases

Contributors

Languages