Skip to main content

Emulator for the PIO Blocks within the RP2 Microcontroller Series (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 and RP2350 Microcontrollers. 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 == (2 ** 32) - 1)

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

Documentation

A Tour of pioemu provides a more detailed explanation than the Quick Start Guide offers. In addition, there is a FAQ available that might contain an answer to your question. However, if none of these provides you with the necessary information then please consider creating a new issue - thanks!

Additional Examples

Some additional examples are available within the rp2040-pio-emulator-examples repository, including:

  1. TDD example for the Pimoroni Blinkt!

  2. Tool to create Fast Signal Trace (FST) files suitable for analysis by GTKWave

  3. Visualisation of square wave program using a Jupyter Notebook

Supported Instructions

Instruction Supported Notes
JMP :heavy_check_mark:
WAIT :heavy_check_mark: :warning: IRQ variant is not supported
IN :heavy_check_mark:
OUT :heavy_check_mark: :construction: EXEC destination not implemented
PUSH :heavy_check_mark:
PULL :heavy_check_mark:
MOV :heavy_check_mark: :construction: Some variants and operations not implemented
IRQ :heavy_multiplication_x:
SET :heavy_check_mark:

Known Limitations

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

  1. Not all of the available instructions are supported - please refer to the table above.

  2. No support for pin-sets associated with IN; all pin numbers are with respect to GPIO 0.

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

  4. PULL IFEMPTY and PUSH IFFULL do not respect the pull and push thresholds.

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

Thanks To

Release files for rp2040-pio-emulator 0.88.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for rp2040-pio-emulator 0.88.0
File Size Uploaded
rp2040_pio_emulator-0.88.0.tar.gz 16.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for rp2040-pio-emulator 0.88.0
File Interpreter ABI Platform
rp2040_pio_emulator-0.88.0-py3-none-any.whl Python 3 none any Details

Total release size:40.0 kB

Release files / rp2040_pio_emulator-0.88.0.tar.gz

Download URL rp2040_pio_emulator-0.88.0.tar.gz
Size 16.3 kB
Tags Source
SHA-256 checksum
How to use checksums
cd8d779e08b55c8949597b5993baf256797e7d0e52661a4cb6f6850f83803087
BLAKE2b-256 checksum
How to use checksums
5f45d8ce545f8b10ef91e7128b68ff3c23afdd6f7789194e49c5b1f85a2df009
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.4.1 CPython/3.14.7 Linux/7.1.9-arch1-2

Release files / rp2040_pio_emulator-0.88.0-py3-none-any.whl

Download URL rp2040_pio_emulator-0.88.0-py3-none-any.whl
Size 23.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
47c73c1727fa86e4a47cf130af7e6a246b8185db7a761095871de0e0eb5b5cc0
BLAKE2b-256 checksum
How to use checksums
89e44995348d549f21ce7ad5d0eb372abf27c2f8b82a708e89126c7fe2138688
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.4.1 CPython/3.14.7 Linux/7.1.9-arch1-2

Release history Release notifications | RSS feed

This release

0.88.0 This release

2 release files

0.87.0

2 release files

0.86.0

2 release files

0.85.0

2 release files

0.83.0

2 release files

0.82.0

2 release files

0.81.0

2 release files

0.80.0

2 release files

0.79.0

1 release file

0.78.0

2 release files

0.77.0

2 release files

0.76.0

2 release files

0.70.0

2 release files

0.20.0

2 release files

0.19.0

2 release files

0.16.0

2 release files

0.15.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page