What's on the board
v1 of BenchPod consolidates everything onto a single 100x80mm 4-layer PCB. The high-level layout is on the build log; this is what's actually on it.
Compute
The main MCU is the RP2350B, the 80-pin variant for the extra GPIO. It pairs with a W25Q64 SPI flash for boot and an APS6404L 8MB QSPI PSRAM used for buffering the digital and analog capture data before it gets streamed out.
Next to it sits an iCE40 UltraPlus 5K FPGA with its own dedicated W25Q64 flash. The FPGA loads its bitstream autonomously at power-up, which keeps the configuration path independent of the MCU and lets the RP2350B stay focused on orchestration.
For connectivity, an ESP32-C3-MINI-1 module handles WiFi over UART using Espressif's official AT firmware. The MCU treats it as a connectivity peripheral rather than a co-processor.
Analog input and output
A BNC connector feeds into an ADC08060 (8-bit, 60 MSPS) with a REF3030 3.0V precision reference and OPA354 op-amps for front-end conditioning. The ADC's parallel output goes straight into the FPGA, which handles capture.
A MCP4728 four-channel 12-bit I2C DAC drives an OPA354 buffer feeding a second BNC for analog output. The DAC handles static voltages and slow waveforms; faster output can come from the FPGA via PWM through the same OPA354 path.
The analog front-end is the part of v1 most clearly meant as a learning exercise. v2 schematics are already drawn with 14 or 16-bit resolution, support for additional voltage ranges, SMA connectors instead of BNC, and DAC-to-ADC loopback for calibration.
Logic analyzer
The logic analyzer is FPGA-based. Capture happens into the iCE40's internal SPRAM (128KB), triggered and read back by the RP2350B which streams it out to the host. How deep and how fast it can go in practice is one of the things v1 will tell us.
Power and current monitoring
Two independent TPS259470A eFuses sit on the two switchable power paths: one for the on-board 5V output rail and one for the external 5 to 20V DUT supply input. Two INA219 current and voltage monitors on I2C track each path. The internal power tree uses a TPS82130 3A buck MicroSiP for the 3.3V digital rail, with AP2112K LDOs for the 1.2V FPGA core, 2.5V FPGA aux, and a separate analog 3.3V to keep digital noise off the analog side.
CAN bus
A SN65HVD230 3.3V CAN transceiver is wired to the FPGA's GPIOs, so the FPGA can drive CAN timing directly and act as a mocked node. CAN is on the board so simulations can be run over it as well. How that gets exposed to the SDK is still to be defined.
DUT interface
The DUT side exposes I2C, SPI, and a set of GPIO for running sensor simulations. The logic analyzer pins can also drive output to mock protocols when needed, and seven SN74LVC2G66 dual analog switches sit on those lines so pull-ups can be switched in when emulating something that needs them. A PCA9555 16-bit I2C IO expander adds slow control GPIO without burning more pins on the MCU. Three screw terminals carry the external power input and the switched outputs to the DUT.
USB and user interface
USB-C with support for drag-and-drop firmware updates, and also used to send over the WiFi SSID and password during initial setup. Status LEDs, two tactile switches (BOOT/RUN), and seven test points scattered around the design for bring-up.
What you can do with it (in theory, v1)
Capture and replay digital and analog signals, simulate sensors and protocols, control DUT power, and tie it all into CI. Everything is exposed over WiFi via a Python SDK with pytest integration, so the same board you use on the bench is the one your automated tests drive.
Current status
Schematic and PCB for v1 are done and at JLCPCB. Nothing on this board is bring-up validated yet.
Edward Viaene




Dave Vandenbout
P
J. Ian Lindsay