Hi everyone
I’m trying to setup some experiments with the ChipSHOUTER with an external hardware trigger provided by the CW-Lite. The main issue is I’m getting ‘fault_trigger_glitch’ almost immediately and I’m not sure why this is happening. I also get quite a few temperature faults.
I’ve seen threads on very similar topics, but couldn’t find a solution there so hopefully someone can help me out here Note I’m quite new to ChipWhisperer and ChipSHOUTER, so I may have very obvious configuration problems.
Let’s start by describing the setup and seeing if the configuration makes sense.
I got an Arduino target running some basic counter loop. The Arduino triggers the CW-Lite through a GPIO connected to TIO4, and generates a glitch based off that external trigger. CW-Lite also controls the reset pin of the Arduino via TIO3. I’ve verified this all works fine by monitoring the TIO4 trigger and the HS2 signal (after setting it to ‘glitch’).
The ChipWhisperer-Lite Glitch connector is connected to the trigger input on the ChipSHOUTER.
I start by doing the following on the scope side:
# Connect to cw lite scope
if self._scope is None:
self._scope = cw.scope()
# This is required to interact with the ChipShouter
self._scope.glitch.output = "enable_only"
self._scope.io.glitch_lp = True
self._scope.glitch.repeat = 1
self._scope.glitch.trigger_src = "ext_single"
# We trigger from "tio4" input
self._scope.trigger.triggers = "tio4"
# Arm glitch before scope module
self._scope.glitch.arm_timing = "before_scope"
# CLKGEN frequency as timebase for glitches
self._scope.glitch.clk_src = 'clkgen'
# Ensure our reset signal does not start asserted
self._scope.io.tio3 = "gpio_high"
# Route glitch signal to hs2 for monitoring
self._scope.io.hs2 = "glitch"
Next I initialize the ChipSHOUTER:
# Disarm if we need to
if self._shouter.armed:
self._shouter.armed = False
# Setup external trigger mode for the chipwhisperer
self._shouter.hwtrig_term = False
self._shouter.hwtrig_mode = False
And after this I setup my parameters (these change for each attempt), arm the scope and the shouter before sending a command to my target:
# Setup trigger parameters
self._scope.glitch.ext_offset = off
self._scope.glitch.repeat = width
# Setup shouter voltage
self._shouter.voltage = volt
# Arm scope and then shouter
self._scope.arm()
# Clear errors and arm shouter
self._shouter.faults_current = 0
self._shouter.armed = True
After my attempt is done I disarm the scope and the shouter.
As you can see I’m even clearing the errors before arming, yet it’s still failing to arm because of a latched error.
If I disconnect the external trigger from the ChipSHOUTER, I can run everything smoothly without errors, but I’m obviously not injecting any faults … this makes me think the configuration of the glitch output from CW-Lite is incorrect but I cannot figure out what exactly is wrong.
Any pointers on what may be wrong with the setup are appreciated!