iRiser FAQ
How do I reset an iRiser back to factory settings?
from sanblaze import riser
slot = 1
device = riser.Riser(slot)
device.init()
init() stops the sequencer, resets GPIO to defaults, and clears sequencer memory.
Use reset() if you only need to stop the sequencer and reset GPIO without clearing memory.
Which slot number should I use?
Pass the iRiser slot that matches the drive under test:
Rackmount (RM) systems: slots 0–18
Desktop (DT) systems: slots 0–4
In test scripts, use dut.slot or get_slot().
What does “iRiser5 not found” mean?
init() or reset() returns:
{'status': 1, 'reason': 'ERROR: iRiser5 not found', ...}
The requested slot has no iRiser hardware, or find_iriser does not list that slot.
Verify the slot number and that the iRiser is connected. Scripts can call
_is_supported() to skip tests when no iRiser is present,
or pass check_hardware=True to Riser at construction.
When should I use set/clear instead of sequences?
Use set() and
clear() when you need an immediate, one-shot change
to a single signal with no hold time or follow-on actions.
Use add_transition() or
edit_action() when transitions must be timed, chained,
or synchronized with other signals (for example PERST assert, refclk off, wait 50 ms, refclk on).
To read GPIO direction and value, call get_bits();
there is no get() wrapper for a single signal name.
How do I find valid signal names?
Read GPIO after init():
from sanblaze import riser
device = riser.Riser(0)
device.init()
bits = device.get_bits(raw=True)
for bit in bits.bits:
print(bit.name)
Common signals include perst0l, p0clkl, p1clkl, 12v, and usr1tst.
See iRiser Signal Reference for a full list and Examples for a discovery example.
Names are case-insensitive in add_transition().
What happens when I pass an invalid signal name?
add_transition() returns an error dict:
{'status': 1, 'reason': 'pers is a not a valid signal name'}
See Examples for a console example.
Why must I call wait_for_stopped after start_sequence?
start_sequence returns as soon as the sequencer starts. The signal transitions run
asynchronously on the iRiser hardware. Call wait_for_stopped()
to block until the sequence completes before issuing NVMe commands or checking drive status.
When do I need set_dir or toggle_bit?
add_transition() changes output values for named signals.
For PERST and refclk scripts, you typically:
Call
get_bits(raw=True)afterinit().Set
perst0l(or other driven pins) to output withbits.set_dir('perst0l', 'O').Use
toggle_bitto assert/deassert individual signals while buildingedit_actioncalls.Set
_next='stop'on the last action, or passfinal=Trueto the lastadd_transition()call.
See the low-level example in Examples.
How do I start the power measurement service?
Power capture requires the iRiser DMA power service. If collection fails, call
verify_service_status(), which starts the service
with systemctl start iriser when it is not running.
Check available power rails with get_power_available().
See iRiser Power Measurement for the full capture workflow.