FixturIO is a versatile digital and analog I/O device designed for PCBA test bench applications. It provides 37 GPIO pins (16 with ADC capability) and multiple communication interfaces.
Hardware Specifications#
| Feature | Specification |
|---|---|
| GPIO pins | 37 total (4mA output per pin) |
| Analog inputs | 16 channels, 12-bit ADC, 3.3V reference |
| I2C buses | 3 independent channels |
| Power input | 9-12V or 5V (USB) |
| Regulated outputs | 3.3V and 5V (250mA each) |
| MCU | Teensy 4.1 (600MHz ARM Cortex-M7) |
Core Capabilities#
GPIO#
37 general-purpose pins for digital I/O:
- Configurable as input or output
- 4mA drive current per pin
- Internal pull-up/pull-down available
- 3.3V-12V input tolerant with series resistor protection
Analog Input#
16 channels with 12-bit resolution:
- 3.3V reference voltage
- Suitable for voltage monitoring, sensor reading
- Software-configurable sampling
I2C Expansion#
Three independent I2C buses:
- Standard mode: 100 kbit/s
- Fast mode: 400 kbit/s
- Fast+ mode: 1 Mbit/s
Two channels include Qwiic connectors for easy peripheral connection.
Interfaces#
USB Serial#
Primary communication via USB serial interface. A Python wrapper in f3ts-hardware-utils provides high-level control.
Card Edge Connector#
PCIe-style card edge connector for integration into test systems. The connector includes card identifier pins enabling automatic detection of up to four FixturIO controllers in a single system.
Protection Architecture#
Multi-layer ESD defense:
- TVS diodes on all interfaces
- Series resistors for current limiting
- Voltage clamping circuits
- 3.3V-12V input tolerance on GPIO pins
This protection accommodates varied signal voltages without requiring external level-shifting.
Software Integration#
Command Console#
Native command-line interface for direct interaction via serial terminal.
Python Module#
from f3ts_hardware_utils import FixturIO
fio = FixturIO('/dev/ttyACM0')
# Read analog input
voltage = fio.analog_read(0)
print(f"Channel 0: {voltage:.3f}V")
# Set GPIO output
fio.gpio_set(10, 1)
# Read GPIO input
state = fio.gpio_get(15)I2C Communication#
# Read from I2C device
data = fio.i2c_read(bus=0, address=0x48, length=2)
# Write to I2C device
fio.i2c_write(bus=0, address=0x48, data=[0x01, 0x00])Firmware Customization#
Firmware is fully customizable:
- Arduino IDE — Standard development environment
- Visual Micro — Visual Studio integration
- PlatformIO — Modern embedded development
A recessed programming button allows recovery mode access if needed during development.
Getting Started with Custom Firmware#
- Install Teensyduino (Arduino IDE plugin)
- Clone the FixturIO firmware repository from GitLab
- Modify firmware for your application
- Upload via USB
Open Source Resources#
Hardware designs, firmware source, and Python modules are publicly available:
- Hardware schematics and PCB files
- Firmware source code
- Python module with examples
- Documentation
All resources available via FixturFab GitLab repositories.
Multiple Controller Systems#
Card identifier pins enable multi-controller configurations:
- Up to 4 FixturIO units per system
- Automatic address detection
- Software identifies each controller by card ID
- Useful for high-pin-count applications
Typical Applications#
| Application | Features Used |
|---|---|
| DUT power control | GPIO outputs, analog monitoring |
| Sensor reading | ADC inputs, I2C peripherals |
| Status indication | GPIO outputs to LEDs |
| Button input | GPIO inputs with interrupts |
| I2C device testing | I2C buses for DUT communication |
Related Documentation#
- FixturCtrl — USB hub with cycle counter
- Instrumentation Overview — All supported instruments
- pytest-f3ts — Testing framework integration