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.

  2. TDD example for the Pimoroni Blinkt! within the examples/ directory.

  3. pico-pio-examples

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: PC, ISR and EXEC destinations not implemented
PUSH :heavy_check_mark: :construction: IfEmpty variant not implemented
PULL :heavy_check_mark: :construction: IfEmpty variant not implemented
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 OUT, SET or IN; all pin numbers are with respect to GPIO 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.

Thanks To

  • aaronjamt for contributing features and fixes.

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.78.0.tar.gz (12.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rp2040_pio_emulator-0.78.0-py3-none-any.whl (17.0 kB view details)

Uploaded Python 3

File details

Details for the file rp2040_pio_emulator-0.78.0.tar.gz.

File metadata

  • Download URL: rp2040_pio_emulator-0.78.0.tar.gz
  • Upload date:
  • Size: 12.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.3.2 CPython/3.11.2 Linux/6.1.0-6-amd64

File hashes

Hashes for rp2040_pio_emulator-0.78.0.tar.gz
Algorithm Hash digest
SHA256 6dc5f4442f870df024ceb9f35896acc79577a238911750ee2ed11efb4e663be9
MD5 2eae6c261e9aeb492b675eaa64fff0d2
BLAKE2b-256 2cb995dc0bc7fb5ee88a775cf4321c27082d472c52762071a944adc8ba38dd3c

See more details on using hashes here.

File details

Details for the file rp2040_pio_emulator-0.78.0-py3-none-any.whl.

File metadata

File hashes

Hashes for rp2040_pio_emulator-0.78.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b00aae7f1b7751e4ddec0bba6b6c9afc2817a1f03aa991697be8e399194983e0
MD5 b37d8d78fdeb253722e6cb924dc8544b
BLAKE2b-256 48b2f3ba20752bc523b0b8b8e7bb298747ec46f08a93e783e5cd8693cbf3f37e

See more details on using hashes here.

Supported by

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