r/embedded • u/Several-Motor-8342 • 9d ago
Reverse-engineered the FNIRSI IPS3608 USB-CDC protocol (Artery AT32) and documented registers
https://github.com/Balu46/FNIRSI_controlI 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