Skip to main content

RP2040 emulator for the testing and debugging of PIO programs

Project description

Emulator for the PIO Blocks within the RP2040 Microcontroller (Python Edition)

Build Status Coverage PyPI

Introduction

An emulator for the Programmable Input/Output (PIO) blocks that are present within the Raspberry Pi Foundation's RP2040 Microcontroller. It is designed to assist in the analysis of PIO programs and to help you by:

  • Enabling unit tests to be written.
  • Answering questions such as: How many clock cycles are being consumed?
  • Supporting the visualization of GPIO outputs over time.
  • Providing alternatives to debugging on real hardware, which can be time consuming.

Quick Start

Below is a slight variation of the example used within the Quick Start Guide.

from pioemu import emulate

program = [0xE029, 0x0041, 0x2080]  # Count down from 9 using X register

generator = emulate(program, stop_when=lambda _, state: state.x_register < 0)

for before, after in generator:
  print(f"X register: {before.x_register} -> {after.x_register}")

Additional Examples

Some additional examples include:

  1. Visualisation of square wave program using Jupyter Notebooks within the examples/ directory.

Screenshot of square-wave program in Jupyter Notebooks

  1. Example for the Pimoroni Blinkt! with Unit Test within the examples/ directory.
  2. pico-pio-examples

Limitations

This software is under development and currently has limitations - the notable ones are:

  1. Only supports a sub-set of the available instructions:

    • JMP (PIN and !OSRE variants not implemented)
    • MOV (some variants and operations not implemented)
    • OUT (PC, ISR and EXEC destinations not implemented)
    • PULL (IfEmpty not implemented)
    • SET
    • WAIT (IRQ variant not implemented)
  2. No support for OUT, SET or IN pin-sets; all pin numbers are with respect to Pin 0.

  3. Pin-sets do not wrap after GPIO 31.

  4. No direct support for the concurrent running of multiple PIO programs; a single State Machine is emulated and not an entire PIO block.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rp2040-pio-emulator-0.26.0.tar.gz (13.9 kB view hashes)

Uploaded Source

Built Distribution

rp2040_pio_emulator-0.26.0-py3-none-any.whl (16.1 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page