This library implements a couple of utility functions for communication with fault-injection tools such as the Pico Debug'n'Dump based glitchers.
python3 setup.py installA simple class that automatically connects and interfaces with glitchers that use the Simple Glitcher Protocol.
from glitchlib import Glitcher
# Automatically opens all USB serial devices, sends the ID command, and checks whether the device identifies itself as a glitcher.
g = Glitcher()
# Flush queued serial data
g.flush()
# Reset the target (if implemented)
g.reset()
# Set delay & pulse
g.set_delay(1000)
g.set_pulse(15)
# Glitch (Does not block)
g.glitch()
# Read from serial
g.read()
g.read(1)A utility library to manage, store and visualize glitching results.
First we need to initialize a GlitchDataCollection:
from glitchlib import GlitchDataCollection
gdc = GlitchDataCollection()Next, we add different types of glitch results we want to store, such as success & hang. The first argument is a unique key, such as an int or a char, that identifies the result type. The second argument is the name used on the legend etc.
gdc.add_data("HNG", "Hang", color="red")
gdc.add_data("X", "Other", color="gray")
# Additional options: color, zorder (higher = rendered in front), alpha
gdc.add_data("SUC", "Success", color="green", zorder=2, alpha=1.0)Next, we can start adding data to each of the result categories:
for delay in range(0, 3000):
for pulse in range(0, 15):
if((delay + pulse) % 100 = 0):
gdc.add("SUC", delay, pulse)
elif((delay + pulse)) % 33 = 0:
gdc.add("HNG", delay, pulse)
else:
gdc.add("X", delay, pulse)Finally, we can visualize the glitches:
# Autorange
gdc.plot()
# Use explicit range
gdc.plot(x=[start, end], y=[pulse_min, pulse_max])We can also load and store GlitchDataCollections.
Note: This currently uses pickle. Do not load GlitchDataCollections from untrusted sources.
gdc.save("filename")
gdc = GlitchDataCollection.load("filename")