Skip to content

RP2350: PIO scripts fail, despite running on RP2040 #17047

@peterhinch

Description

@peterhinch

Port, board and/or hardware

Pico 2

MicroPython version

MicroPython v1.25.0-preview.408.gf315a376b on 2025-03-26; Raspberry Pi Pico2 with RP2350

Reproduction

It has proved hard to produce a minimum repro, what follows is my best shot. The repro is quite fragile - minimal changes cause its behaviour to vary between working and failing.

Link GPIO numbers 1-18 and 2-17 and run the following:

import rp2
from machine import Pin, SPI


@rp2.asm_pio(autopush=True, autopull=True)
def spi_count():
    out(x, 32)
    wait(0, pins, 2)  # CS/ True
    label("loop")
    jmp(pin, "good")
    jmp(x_dec, "loop")
    label("good")
    in_(x, 32)
    label("finish")
    jmp("finish")


class Test:

    def __init__(self, start_pin=0, sm_num=0):
        self._sm1 = rp2.StateMachine(
            sm_num,
            spi_count,
            in_base=start_pin,
            jmp_pin=start_pin + 1,
        )
        self._sm1.active(1)

    def go(self, cs, ck):
        sm = self._sm1
        sm.put(10_000_000)
        cs(0)  # Start
        ck(1)  # Stop
        
        assert sm.rx_fifo(), "Rx fifo is empty."
        print(sm.get())


cs = Pin(17, Pin.OUT, value=1)
ck = Pin(18, Pin.OUT, value=0)

t = Test()
t.go(cs, ck)

Expected behaviour

Result on RP2040 is to print a number around 9999759.

Observed behaviour

RP2350 produces an assertion fail. I assume that the RP2350 is failing to respond to the jump pin.

Additional Information

No, I've provided everything above.

Code of Conduct

Yes, I agree

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions