Hi,
- I am using latest ChipWhisperer development version.
- I successfully updated CW305 firmware.
- Made sure the FPGA is in USB mode.
- ERROR while programming SPI flash.
I am running the following code:
import chipwhisperer as cw
bitstream = "..." # Here I am using config. mem. file generated by Vivado.
fpga = cw.target(None, cw.targets.CW305, fpga_id='100t') #for CW305_100t
spi = fpga.spi_mode()
spi.erase_chip()
spi.program(bitstream) # ERROR happens here.
I am getting following error message:
Traceback (most recent call last):
File "/home/canaknesil/.local/lib/python3.6/site-packages/usb/core.py", line 1021, in ctrl_transfer
buff = util.create_buffer(data_or_wLength)
File "/home/canaknesil/.local/lib/python3.6/site-packages/usb/util.py", line 162, in create_buffer
return array.array('B', _dummy_s * length)
TypeError: can't multiply sequence by non-int of type 'list'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/canaknesil/.local/lib/python3.6/site-packages/usb/_interop.py", line 92, in as_array
return array.array('B', data)
TypeError: an integer is required (got type str)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/canaknesil/standalone-programs/chipwhisperer/software/chipwhisperer/hardware/naeusb/naeusb.py", line 300, in txrx
self.usbdev().ctrl_transfer(payload[0], payload[1], payload[2], payload[3], payload[5:], timeout=self._timeout)
File "/home/canaknesil/.local/lib/python3.6/site-packages/usb/core.py", line 1023, in ctrl_transfer
buff = _interop.as_array(data_or_wLength)
File "/home/canaknesil/.local/lib/python3.6/site-packages/usb/_interop.py", line 97, in as_array
a.fromstring(data) # deprecated since 3.2
TypeError: a bytes-like object is required, not 'list'
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
~/Documents/summer-job-repo/bitstream-extraction/program_flash/program_spi_flash_cw305.py in <module>
10 spi = fpga.spi_mode()
11 spi.erase_chip() # can also use spi.erase_block() for smaller/faster erases
---> 12 spi.program(bitstream) # also verifies by default
13
14
~/standalone-programs/chipwhisperer/software/chipwhisperer/capture/targets/CW305.py in program(self, data, addr, verify, timeout)
739 while len(data) > data_written:
740 to_write = min(self.PAGE_SIZE, len(data)-data_written)
--> 741 self.cmd_write_mem(data[data_written:data_written+to_write], addr + data_written, timeout=timeout)
742 data_written += to_write
743
~/standalone-programs/chipwhisperer/software/chipwhisperer/capture/targets/CW305.py in cmd_write_mem(self, data, addr, timeout)
688 while data_len > data_written:
689 cmd = data[data_written:data_written + min(64, data_len-data_written)]
--> 690 self.spi_tx_rx(cmd)
691 data_written += len(cmd)
692
~/standalone-programs/chipwhisperer/software/chipwhisperer/capture/targets/CW305.py in spi_tx_rx(self, data)
602 if len(data) > 64:
603 raise ValueError("Data is tooooooo long!")
--> 604 self.sendCtrl(self.REQ_FPGASPI_PROGRAM, 0xA4, data)
605 readdata = self.readCtrl(self.REQ_FPGASPI_PROGRAM, dlen=len(data))
606 return readdata
~/standalone-programs/chipwhisperer/software/chipwhisperer/hardware/naeusb/naeusb.py in sendCtrl(self, cmd, value, data)
676 """
677 # Vendor-specific, OUT, interface control transfer
--> 678 self.usbseralizer.sendCtrl(cmd, value, data)
679
680 def readCtrl(self, cmd, value=0, dlen=0):
~/standalone-programs/chipwhisperer/software/chipwhisperer/hardware/naeusb/naeusb.py in sendCtrl(self, cmd, value, data)
177 cmdpacket = self.make_cmd(self.WRITE_CTRL, cmdpacket)
178
--> 179 self.process_rx(self.txrx(tx=cmdpacket))
180
181 def readCtrl(self, cmd, value=0, dlen=0):
~/standalone-programs/chipwhisperer/software/chipwhisperer/hardware/naeusb/naeusb.py in process_rx(self, inp)
152
153 if resp == self.ERROR:
--> 154 raise payload
155
156 return payload
TypeError: a bytes-like object is required, not 'list'