CW Husky inverted target_pwr behavior

I recently upgraded to a ChipWhisperer Husky from a ChipWhisperer Lite. Things have been proceeding smoothly so far, up until this point when I ran into some confusing behavior with the 3.3V target power line.

According to the documentation, when scope.io.target_pwr is set to True, 3.3V @ up to 200ma are output onto this line. When it is set to False, the line outputs 0V and TIO pins are set to high-z to avoid back-powering.

This behavior is matched on my CW Lite. But on my Husky, the behavior is somewhat inverted-- when scope.io.target_pwr is True, 0 volts are output, and when False, 3.3V are output while the TIOs are still disabled.

This seems wrong. What can I do to troubleshoot the issue?

Can you share code that reproduces the issue?
And what does scope.fpga_buildtime show?

Sure, here’s some code to reproduce the problem.

import chipwhisperer as cw

if __name__ == "__main__":
    scope = cw.scope()
    # target_pwr is on by default
    print(scope.io.target_pwr)
    print(scope.fpga_buildtime)
    # Power line is 0V here
    input()
    scope.io.target_pwr = False
    print(scope.io.target_pwr)
    # Power line is 3.3V here
    input()

And here’s the output:

True
4/11/2024, 09:41

False

Works as expected for me on that same scope.fpga_buildtime.

How are you determining that the output power is inverted from what scope.io.target_pwr says?

Testing using a multimeter. Also, experimentally, my target is only powered when target_pwr is set to False (though of course then I can’t communicate with it as the TIOs are off.)

I meant on which pin are you measuring. Also what target is connected?

Non-NewAE target. Measuring on pins 3 and 18 of the 20-pin connector.

Have you checked the behaviour with no target attached? If it’s the same, then some damage may have occurred to the power-on circuitry (Q2/Q3 on the schematic); email sales@newae.com referencing this post and we’ll see what we can do.

If it does work as expected with no target, then there must be some cause on the target side. Be aware that turning off target_pwr tristates a bunch of outputs (docstrings lists them), but this behaviour is identical to CW-lite.