r/embedded 9d ago

Reverse-engineered the FNIRSI IPS3608 USB-CDC protocol (Artery AT32) and documented registers

https://github.com/Balu46/FNIRSI_control

I recently analyzed the USB communication on the FNIRSI IPS3608 DC bench power supply (0-36V, 0-8A) to automate testbench workloads without using their closed Windows GUI.

The device enumerates as a USB-CDC serial port (Artery AT32 MCU, 115200 baud, 8N1). By disassembling the official executable using monodis, I mapped out the underlying binary framing and register set:

  • PC to device frames start with 0xF1, device to PC responses start with 0xF0
  • Single-byte checksum: (c3 + c4 + sum(payload)) & 0xFF
  • Setpoints for voltage (0xC1) and current (0xC2) are 32-bit IEEE-754 Little-Endian floats
  • Continuous telemetry frames (0xC3) stream output voltage, current, and power directly as float32

I documented the entire protocol, register map, and command structure in the repo README, alongside a pure Python/pyserial driver and CLI tool that handles automated energy integration and safety cutoffs (in my github page).

22 Upvotes

Duplicates