CW310 IDs as CW305 after firmware update?

Hello,

I’m attempting to use the CW310 Bergen Board with the OpenTitan project design, but I’m having trouble communicating with the CW310 board through any of the example scripts. I thought this might be due to an older firmware in the SAM3X, so I’ve attempted erasing / reprogramming it to ensure it’s on the most recent version (1.5).

However, after I reprogram the firmware, cw.list_devices() is reporting the board as a “CW305 Artix FPGA Board”.

I’ve tried erasing / reprogramming the flash using both:

cw.program_sam_firmware(hardware_type=“cwbergen”)

and:

target = cw. target (None, cw. targets.CW310)
programmer = cw.SAMFWLoader (scope=target)
programmer.auto_program()

Both of these appear to successfully update the firmware, but cw.list_devices always reports the board as a CW305 afterword. I’ve installed a fresh python environment with a fresh pull from the latest ChipWhisperer github repo with the same result.

Is this a known issue, or am I doing something wrong?

Thank you!

auto_program() won’t do what you want here because the device is identifying itself as a CW305, so it’ll get programmed with CW305 firmware again.

First, explicitly erase the firmware according to the instructions here. (You’ll probably have to specify ‘cw305’ instead of ‘cw310’ for the software method to work.)

Then run cw.program_sam_firmware(hardware_type='cw310') .

When doing this, it’s best to disconnect any other chipwhisperer devices.

Thank you – I’ll give this a try, but two follow-up questions:

  1. I erased the firmware by shorting J20 before trying both “cw.program_sam_firmware” and “programmer.auto_program()”. Both approaches still resulted in the CW305 firmware being programmed, or at least the board still identified as a CW305. How does auto_program decide what firmware to load if the firmware was erased and the board is in bootloader mode?
  2. Should the cw.program_sam_firmware command use hardware_type = ‘cwbergen’ or ‘cw310’? Is there a difference? Both look like they are whitelisted as valid types in the ChipWhisperer source.
  1. There was a bug where cw310 (and cw340) were incorrectly reported as being a cw305 by cw.list_devices(). This was probably the cause of your confusion, sorry about that! It’s fixed now in the latest commit.
  2. Only ‘cwbergen’ will work; ‘cw310’ is no longer allowed. Also fixed.

Finally the firmware programming instructions have been updated:

If you’re on the develop branch or the 6.0.0 release, you can follow the updated instructions without having to update your installation (but if you don’t update, list_devices() will still show your 310 as a 305). But if you’re on an older release you will have to update your installation.

That did the trick. Thanks!