# powershorter **Repository Path**: osr-tech/powershorter ## Basic Information - **Project Name**: powershorter - **Description**: PowerShorter是为电压短路故障注入攻击测试定制的一款专用设备。通过PowerShorter可实现被测设备的瞬时短路,干扰设备正常运行。本仓库给出PowerShorter的控制脚本。 - **Primary Language**: Python - **License**: BSD-3-Clause - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 7 - **Forks**: 1 - **Created**: 2024-08-20 - **Last Updated**: 2025-05-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PowerShorter 一些网上公开链接: - [PowerShorter开箱指南](https://yichen115.github.io/%E4%B8%8A%E6%89%8B%E6%8C%87%E5%8D%97/PowerShorter%E5%BC%80%E7%AE%B1%E4%B8%8E%E7%AE%80%E5%8D%95%E4%BD%BF%E7%94%A8/) ## 产品说明 PowerShorter是为电压短路故障注入攻击测试定制的一款专用设备。通过PowerShorter可实现被测设备的瞬时短路,干扰设备正常运行。 PowerShorter具备两个独立的短路引擎。每个引擎监听触发,并输出精确的电平脉冲模式控制,这些电平脉冲模式在通过高速MOS管时实现瞬时短路。 PowerShorter集成了一路继电器、一路固态继电器和两路GPIO,用于被测设备重启等自动控制。 PowerShorter可以使用`SMA-E1`和`SMA-E2`接口驱动电磁脉冲器`EMPulser`,共同实现电磁脉冲故障注入。 如需实现可视化故障结果显示,可参考[FaultViz项目](https://gitee.com/osr-tech/faultviz)。 ### 设备参数 - 脉冲控制精度: 10ns - 短路脉冲模式最大配置个数:8 - 模式最大重复次数: 256 - GPIO输出:2路 (3.3V) - 继电器输出:1路,最大输入 50V 7A - 固态继电器输出:1路,双向最大输入 12V 3A - 触发模式: + 边沿触发 + 手动触发 + 边沿计数触发 ### 短路故障使用示例 ```python import power_shorter as ps ps_dev = ps.PowerShorter('com4') # 选择串口 ps_dev.gpio(ps.GPIO.GPIO1, 0) # 控制 GPIO1 输出低电平 ps_dev.relay(ps.RELAY.RELAY1, 0) # 控制 RELAY1 断开,RELAY1 为固态继电器 ps_dev.relay(ps.RELAY.RELAY2, 0) # 控制 RELAY2 断开,RELAY2 为机械继电器 ps_dev.engine_cfg(ps.Engine.E1, [(0, 200), (1, 100), (0, 100), (1, 23), (0, 1)]) # 可以使用trigger_mode参数控制触发模式,pattern_repeat控制毛刺重复 ps_dev.arm(ps.Engine.E1) s = ps_dev.state(ps.Engine.E1) assert s == 'armed' ... # 等待上升沿完成触发 assert s == 'glitched' ``` 上述代码关键调用是`engine_cfg`,在该示例中,将上升沿作为触发事件。事件发生后,等待2000ns后,短路1000ns,再等待1000ns后,短路230ns,最后进入正常状态。相当于对目标设备完成了两次短路故障注入。pattern列表最多支持8个状态。`trigger_mode`参数可以用于切换触发事件为上升沿/下降沿,`pattern_repeat`参数可用于控制pattern列表的重复次数。例如,在该示例中,若`pattern_repeat`设置为2,则将重复pattern两次,即完成4次短路故障注入。通过设置`trigger_edges`,可监听多个边沿作为触发事件,`trigger_edges`可用于将一些总线协议(如UART)通信作为触发事件时使用。 ### 驱动EMPulser进行电磁故障注入使用示例 ```python import power_shorter as ps em_dev = ps.EMPulser('com4') # 选择串口 em_dev.gpio(ps.GPIO.GPIO1, 0) # 控制 GPIO1 输出低电平 em_dev.relay(ps.RELAY.RELAY1, 0) # 控制 RELAY1 断开,RELAY1 为固态继电器 em_dev.relay(ps.RELAY.RELAY2, 0) # 控制 RELAY2 断开,RELAY2 为机械继电器 em_dev.engine_cfg(ps.Engine.E1, delay=10, pulse=2, trigger_mode=ps.TRIGGER_MODE.RISE, trigger_edges=1) # 可以使用trigger_mode参数控制触发模式,trigger_edges用于设置触发计数 em_dev.arm(ps.Engine.E1) s = em_dev.state(ps.Engine.E1) assert s == 'armed' ... # 等待上升沿完成触发 assert s == 'glitched' ``` 上述代码关键调用是`engine_cfg`,在该示例中,将上升沿作为触发事件。事件发生后,等待100ns后,PowerShorter控制EMPulser发出`20ns`的电磁脉冲(EMPulser的输出脉宽范围`10ns~80ns`)。 ## OSR-303 for循环完整故障示例 使用OSR-303开发板,我们给出了[OSR-303 FORLOOP 故障注入完整示例](https://gitee.com/osr-tech/osr-303/blob/master/vcc-fault_example.ipynb)。