Capturing voltage of a target

Hi,

I tried to capture the voltage of a target, not related to key extraction, just in general. However I could not capture a meaningful waveform. Only three values are in a 8000 long waveform, which are the following:
0.0048828125
0.00390625
and around 0.002967 occassionally.
I am only using the measure SMA connector on a CW Lite, and the voltage varies between 3,2V and 3,32V on it(I checked with a 200MHz oscilloscope).

The configuration of the CW:

#Capture Traces
from tqdm import tnrange
import numpy as np
import time

#Configure scope
scope = cw.scope()
scope.clock.adc_src = “clkgen_x1”
scope.adc.samples = 8000

traces = []

print(“GPIO values at start:”)
print(scope.advancedSettings.cwEXTRA.readTIOPins())

scope.arm()

while scope.advancedSettings.cwEXTRA.readTIOPins() != 3:
time.sleep(0.01)

print(“Capturing voltage”)
scope.capture()

while scope.advancedSettings.cwEXTRA.readTIOPins() == 3:
time.sleep(0.01)

wave = scope.get_last_trace()
print(“Saving waveform”)

As can be seen, capture starts(and ends) when the target shifts the level of one of its GPIO pins.
Did I forget/overlook some configuration which is needed? The CW Lite AD9215(if I see it correctly) is a 10-bit ADC, so at 2Vp-p it should have more(than 2 bits) variation when it measures a noise of 120mV, right?

Hi,

The default clock for the ChipWhisperer on startup is too high to run the ADC off of (with with `clkgen_x1) so you’ll need to lower that. Also I don’t think the scope works as you think it does based on your description and code.

  • scope.arm() arms the scope (think of this like hitting the single button on the oscilloscope). It won’t start capturing until the scope is triggered or the capture times out.
  • scope.capture() reads data back from the ChipWhisperer. It will block until the capture has finished (either from the ADC being triggered or the timeout occurring)
  • scope.get_last_trace() just returns the data that was read during the scope.capture() call.

I think what you’ll want to do is the following based on your code:

  • Set the clock to an appropriate value. Both clock DCMs should be locked (aka no red lights on on the ChipWhisperer)
  • Make sure the appropriate TIO pins are set as inputs (high_z)
  • Set the ChipWhisperer to trigger on whatever event you want to start the capture on (looks like some binary combination of three IO pins)
  • Remove the readTIOPins() calls

You might have to play around with the gain as well. Also keep in mind that the ChipWhisperer’s input is AC coupled (not sure if that’s a big deal with your use case).

Alex

Thanks Alex,

your suggestions helped to resolve the issue.

Happy to help, Norbert!

Let me know if you have any other questions.