ChipWhisperer-Lite Communication Failure After Successful Firmware Flash

Subject: ChipWhisperer-Lite Communication Failure After Successful Firmware Flash

I’m experiencing a persistent serial communication failure between my ChipWhisperer-Lite and its internal STM32F3 target, despite successfully flashing the simpleserial-base firmware. I’ve performed extensive troubleshooting and am now seeking assistance.


The Problem

The Python code target.simpleserial_read() returns no response, and the console shows the following warning:

This indicates the target is not communicating with the main board.


Troubleshooting Steps Taken

Here is a list of the checks and actions I’ve performed:

  • Firmware Compilation & Flashing: I successfully compiled the simpleserial-base firmware and flashed it to the target using cw.program_target(). This process verified my entire toolchain is working, including:
    • make
    • arm-none-eabi-gcc
    • dfu-util
  • Hardware and Software Reset: I’ve performed both a software reset (target.go_offline()/go_online()) and a physical hardware reset by toggling scope.io.nrst to confirm the target is not in a frozen state.
  • USB Driver Verification: I checked the device in Windows Device Manager, and the device instance path includes MI_00, confirming that the correct WinUSB driver is installed.
  • Jupyter Kernel and Device State: I have power-cycled the ChipWhisperer and restarted my Jupyter kernel after every flashing attempt to ensure a clean slate.
  • Configuration Settings: I’ve confirmed that the scope’s settings are correctly configured, including running scope.default_setup() and explicitly setting scope.tio_baud = 38400.

I suspect the problem is now either:

  • A corrupted bootloader on the STM32F3 microcontroller.
  • A physical hardware fault on the CW-Lite itself.

Any insights or further troubleshooting steps would be greatly appreciated. Thanks for your help!

I think you’re using the wrong firmware. IIRC simpleserial-base doesn’t contain crypto commands. You’re trying to send the command p, which typically gives the plaintext to encrypt with AES. For this command to be implemented, you need to use simpleserial-aes firmware.

I think your target is not answering because the command you send is not implemented.

There are some commands you can try though:

  • y should return the number of supported commands
  • w should return you the list of supported commands. Each command is represented as a triplet (command byte, argument length, flags).

I’m assuming you’re trying to run this notebook chipwhisperer-jupyter/1 - Connecting to Hardware.ipynb at main · newaetech/chipwhisperer-jupyter · GitHub?

Then yes the “p” command is supported and should give you a response. You mean simply need to reset the target (after programming it).

If you have a CW308 you can use the nRST button on it to do this; in all cases you can also call reset_target(scope).