CW305 - USB device not found (CW Windows)

Hi,

I am using a Windows installation of Chipwhisperer v4.0.1 with Chipwhisperer-Lite and CW305 target. I did install the USB drivers and select the USB programming mode by turning on M0,M1,M2. When I try to program the Artix 7 FPGA on the CW305 target I get a USB device not found error message. I am using the appropriate example bitstream that came with the software. Both CW-Lite and CW305 show up in Windows Device manager, so they are found but somehow CW software is not recognizing CW305. However, the CW software seems to be able to recognize CW-Lite.

Traceback (most recent call last):

File "C:\Program Files (x86)\ChipWhisperer\chipwhisperer\software\chipwhisperer\common\utils\parameter.py", line 391, in callAction

act(self)

File "C:\Program Files (x86)\ChipWhisperer\chipwhisperer\software\chipwhisperer\common\utils\util.py", line 302, in call

return self.method(self.target(), *args, **kwargs)

File "C:\Program Files (x86)\ChipWhisperer\chipwhisperer\software\chipwhisperer\capture\targets\CW305.py", line 164, in gui_programfpga

result = self.fpga.FPGAProgram(open(bsfile, "rb"), exceptOnDoneFailure=False)

File "C:\Program Files (x86)\ChipWhisperer\chipwhisperer\software\chipwhisperer\hardware\naeusb\fpga.py", line 60, in FPGAProgram

self.sendCtrl(self.CMD_FPGA_PROGRAM, 0xA0)

File "C:\Program Files (x86)\ChipWhisperer\chipwhisperer\software\chipwhisperer\hardware\naeusb\naeusb.py", line 207, in sendCtrl

return self.usbdev().ctrl_transfer(0x41, cmd, value, 0, data, timeout=self._timeout)

File "C:\Program Files (x86)\ChipWhisperer\chipwhisperer\software\chipwhisperer\hardware\naeusb\naeusb.py", line 185, in usbdev

if not self._usbdev: raise Warning("USB Device not found. Did you connect it first?")

Warning: USB Device not found. Did you connect it first?

Hi,

The reason that you’re getting this error is because the FPGA isn’t connected yet (which is understandable, since there’s no connect script). The following script should work:

from chipwhisperer.capture.targets.CW305 import CW305
import chipwhisperer as cw

bitstream_file = r"C:\chipwhisperer\hardware\victims\cw305_artixtarget\fpga\vivado_examples" \
        r"\aes128_verilog\aes128_verilog.runs\impl_35t\cw305_top.bit"

scope = cw.scope()
self.scope = scope

target = cw.target(scope, type=CW305, bsfile=bitstream_file, force=False)
self.target = target

replacing bitstream_file with the location of the bitstream you want to upload. If that doesn’t work for you, you may have to switch to ChipWhisperer 5, since CW305 support is kind of spotty for v4.

Alex

Hi Alex,

Thank you for your response. I did try to connect using a similar script but still got USB device not found error. I also tried using a Virtual Machine with ChipWhisperer 5.1.1 but I am getting a FPGA done pin failed to go high error. I am using the sample bitstream for CW305 (Artix 7 100t FPGA) that came with the software.

-Siva

Hi Siva,

Just to confirm, your CW305 has a 100t on it, not a 35t? If so, you’ll need to use the 35t bitstream instead.

Alex

Yes the CW305 has a 100t FPGA.

Siva

Hi Siva

Can you try connecting over Jupyter (localhost:8888) in Windows and running the CW305 tutorial in Jupyter?

Alex

Hi Alex,

I am seeing the same error when I run the tutorial:

Siva

Hi Siva,

In that case, can you try running the device outside of the VM? Also, have you installed the Windows drivers for the CW305?

Alex

Hi Alex,

When I ran ChipWhisperer 4 in Windows I got the “USB device not found” error like I mentioned in my first post. Yes I did install the Windows drivers. Interestingly only the CW305 had this error and not the CW-Lite.

Also I did try a linux installation of ChipWhisperer 5.1.1 on Cent OS 7 which also gave me the “FPGA done pin failed to go high” error.

Siva

Hi Siva,

Can you confirm the jumper settings on your CW305:

  • J16 set to 0
  • K16 set to 1

Also make sure that S1 is set to:

  • M0=1
  • M1=1
  • M2=1

Additionally, make sure your CW305 is powered directly from a USB port and not through a hub.
Alex

Hi Alex,

Yes all of the those are my current settings.

I have been able to program the FPGA through JTAG using Vivado. I am currently trying to figure out the IO connectivity to directly talk to the FPGA and do power measurements using an actual scope.

-Siva

Interesting. To confirm, did you change S1 to allow for programming the FPGA over JTAG?

Alex

Yes I did change S1 to allow for JTAG programming.

-Siva

Hi Siva,

I think Colin might have a better idea of what’s going on and hopefully how to solve it. Unfortunately, he just left for a conference, so he’ll probably be a bit busy for the next week or so.

In the meantime, I can point you towards some info that will hopefully allow you to talk to the FPGA without needing to go through USB. I can get more details to you later on today if you’d like.

Alex

Hi Alex,

Yes info on directly talking to FPGA would be helpful.

Thanks,
-Siva

Hi Siva,

Communication with the FPGA is done through a series of 21 address lines and 8 data lines, along with a pin write enable, one for read enable, and one for chip select. These lines are used to read and write registers on the FPGA. You have a few options regarding how to do this.

  1. Program the FPGA over JTAG and communicate over USB as usual:
    This is probably your best option, since you won’t have to worry about any of the communication stuff. You should be able to do this by programming the FPGA first, then connecting after. I’d recommend using CW5 on your CentOS machine for this since it at least allows you to connect to the CW305.

    If that doesn’t work try editing chipwhisperer/software/capture/targets/CW305.py line 167 from if self.fpga.isFPGAProrammed() == False or force to if False:

    From then on, you can simply interact with the CW305 as usual (i.e. target.simplserial_read/write).

  2. Next you can try reprogramming the SAM3U on the CW305. This will avoid you having to make any hardware modifications or worry about the various pins (since reading/writing to the FPGA is done through a memory mapped peripheral). Instructions for this one are a bit lengthy, so I’ll address how to program and build firmware for the SAM3U in a later post if necessary

  3. Finally you can solder wires on to the actual communication lines and use another device (maybe another microcontroller) to do it. Once again, I can provide more info here if necessary.

You can find information about the actual location of registers in the file chipwhisperer/software/capture/targets/CW305.py. Here _naeusb.cmdWrite/ReadMem() writes/reads memory from the FPGA and sendCtrl() and readCtrl() are used for commands for the SAM3U.

Let me know if you have any questions,

Alex