CW305 without a cw-capture device

Goodmorning everyone.
I recently bought the CW305 target board, but did not purchase any capture devices, as I already own a Picoscope 5000. Has anyone else found themselves using these two devices, and can give me a couple of tips on how to proceed and setting properly everything?
Thanks in advance,

For setting up the CW305, if you look at our CW305 notebooks, you can use any of the CW305 target methods that you see there without any changes. These are all the target.XXX calls in the notebooks (e.g. for setting PLLs, talking to the FPGA via the SAM3U with target.fpga_write() / target.fpga_read()).

You can program the FPGA and connect to the CW305 like this:
target =, cw.targets.CW305, bsfile="/path/to/bitstream", force=True)

We don’t have a specific getting started guide for this scenario because as you can imagine there are just too many possible third-party oscilloscopes. However if you run into any trouble, post your questions here and we’ll do our best to help you.

Okay. I will try and let you know if there are any problems, thanks!
I have seen some tutorials online using third-party oscilloscopes, but all of them were still using ChipWhisperer Capture v2, and selected from there the third-party oscilloscope as “Scope Module”.
Everything can still be done with Jupyther Notebook? All the tutorials are using cw.scope, supposing having a cw-capture device, and the few ones which give an example of third-party oscilloscopes are still using the old GUI.
Thanks you

The old GUI is unsupported and I don’t advise going down that road.

In our Jupyter tutorials, the CW scope handles two tasks:

  1. Communicating with the target (e.g. setting the encryption parameters, telling it to “go”).
  2. Collect the power traces.

Your picoscope will handle (2). Some scopes can be controlled from Python, and I’ve done this with a Picoscope before, but that was a long time ago.

Let’s take this notebook as an example. Everything in the “Capture Setup” section is scope setup that you’ll have to do for your own scope.

The CW305 can handle (1), even if there is no CW scope attached to it. The “Trace Capture” is a mix of (1) and (2); you have to dive into cw.capture_trace() to see what’s going on there. It arms the scope, communicates with the target (see its various target.X calls; those end up in, and retrieves the power trace.

So here you will have to write your replacement for capture_trace().