Examples

Immediate set and clear

Assert or deassert one signal without the sequencer. Read state with get_bits:

from sanblaze import riser

r = riser.Riser(0)
r.clear('12VEDSF')
r.set('12VEDSF')
r.clear('12VEDSF')

bits = r.get_bits(raw=True)
for bit in bits.bits:
    print(bit.name, bit.dir, bit.val)

Example console session:

>>> from sanblaze import riser
>>> r = riser.Riser(0)
>>> r.clear('12VEDSF')
DETAIL:sanblaze:iRiser -d 0 clear 12VEDSF
{'status': 0, 'result': '210:[02][Out] 0', 'reason': ''}
>>> r.set('12VEDSF')
DETAIL:sanblaze:iRiser -d 0 set 12VEDSF
{'status': 0, 'result': '210:[02][In] 1', 'reason': ''}
>>> r.clear('12VEDSF')
DETAIL:sanblaze:iRiser -d 0 clear 12VEDSF
{'status': 0, 'result': '210:[02][Out] 0', 'reason': ''}

Discover signal names

After init(), list the GPIO names available on the slot:

from sanblaze import riser

device = riser.Riser(0)
device.init()
bits = device.get_bits(raw=True)
for bit in bits.bits:
    print(bit.name, bit.dir, bit.val)

Driving a single signal

Example::

Drive perst low for 1s

from sanblaze import riser
from sanblaze.sanblaze_test_api_util import check_result
device = riser.Riser(0)
device.init()
device.create_sequence(0)
check_result(device.add_transition('perst0l', 'off', '1s'))
check_result(device.add_transition('perst0l', 'on', '1s', final=True))
device.start_sequence(0)
device.wait_for_stopped()

Driving multiple signals

Example:

.. code-block:: python

    from sanblaze import riser
    from sanblaze.sanblaze_test_api_util import check_result
    device = riser.Riser(0)
    device.init()
    device.create_sequence(0)
    check_result(device.add_transition('perst0l', 'off', '1s'))
    check_result(device.add_transition('perst0l', 'on', '5s'))
    check_result(device.add_transition(['12v', 'p0clkl', 'p1clkl'], 'off', '1s'))
    check_result(device.add_transition(['12v', 'p0clkl', 'p1clkl'], 'on', '1s'))
    check_result(device.add_transition('perst0l', 'off', '1s', final=True))
    device.start_sequence(0)
    device.wait_for_stopped()

Passing in invalid signal names

Example:

.. code-block:: console

    >>> from sanblaze import riser
    >>> device = riser.Riser(0)
    >>> device.init()
    Sep 26 17:19:11 2025 DETAIL: iRiser -d 0 init
    {'status': 0, 'result': ' Stop the sequencer reset GPIO to defaults   Zero sequencer memory', 'reason': 'Success'}
    >>> device.create_sequence(0)
    {'status': 0, 'reason': 'Success'}
    >>> device.add_transition('pers', 'on', '1s')
    Sep 26 17:19:25 2025 DETAIL: Getting bits
    Sep 26 17:19:25 2025 DETAIL: iRiser -d 0 show gpio -J
    {'status': 1, 'reason': 'pers is a not a valid signal name'}

Mirror signals with LEDs

from sanblaze import riser
from sanblaze.sanblaze_test_api_util import check_result

r = riser.Riser(8)
r.init()
r.create_sequence(5)

group = ['usr1tst', 'perst0l']
res = r.add_transition(group, 'on', '5s')
check_result(res)
res = r.add_transition(group, 'off', '10s', final=True)
check_result(res)
r.start_sequence(5)
r.wait_for_stopped()
Oct 02 13:23:47 2025 DETAIL: iRiser -d 8 init
Oct 02 13:23:47 2025 DETAIL: Getting bits
Oct 02 13:23:47 2025 DETAIL: iRiser -d 8 show gpio -J
Oct 02 13:23:47 2025 DETAIL: iRiser -d 8 edit action 5 0xf000ffcd 0x6fc3ff1f 5s 6
Oct 02 13:23:47 2025 DETAIL: Command completion: Success
Oct 02 13:23:47 2025 DETAIL: iRiser -d 8 show actions -J
Oct 02 13:23:47 2025 DETAIL: iRiser -d 8 edit action 6 0xf000ffcd 0xfc3ff1f 10s stop
Oct 02 13:23:47 2025 DETAIL: Command completion: Success
Oct 02 13:23:47 2025 DETAIL: iRiser -d 8 start sequence 5

Low-level PERST and refclk sequence

For timed PERST/refclk manipulation, use edit_action and toggle_bit. Set perst0l as an output, chain actions with numeric _next values, and set _next='stop' on the final action.

from sanblaze import riser
from sanblaze.sanblaze_test_api_util import check_result

iriser = riser.Riser(0)
check_result(iriser.init())

bits = iriser.get_bits(raw=True, log=False)
bits = bits.set_dir('perst0l', 'O')

# Action 0: initial GPIO state
iriser.edit_action(dest=0, dir=bits.dir, val=bits.val, time=1, units='s', _next=1)

# Action 1: assert PERST, wait 50ms
bits_perst_assert = iriser.toggle_bit('perst0l', bits, log=False)
iriser.edit_action(dest=1, dir=bits.dir, val=bits_perst_assert.val,
                   time=50, units='ms', _next=2)

# Action 2: turn off refclk, wait 50ms
bits_refclk_off = iriser.toggle_bit('p0clkl', bits_perst_assert, log=False)
iriser.edit_action(dest=2, dir=bits.dir, val=bits_refclk_off.val,
                   time=50, units='ms', _next=3)

# Action 3: turn refclk back on, wait 50ms
iriser.edit_action(dest=3, dir=bits.dir, val=bits_perst_assert.val,
                   time=50, units='ms', _next=4)

# Action 4: deassert PERST, then stop
iriser.edit_action(dest=4, dir=bits.dir, val=bits.val,
                   time=2, units='s', _next='stop')

check_result(iriser.start_sequence(0))
iriser.wait_for_stopped()