Skip to main content
FixturFab

FixturIO

Documentation for the FixturIO digital and analog I/O controller. GPIO pins, ADC inputs, I2C buses, and firmware customization.

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#

FeatureSpecification
GPIO pins37 total (4mA output per pin)
Analog inputs16 channels, 12-bit ADC, 3.3V reference
I2C buses3 independent channels
Power input9-12V or 5V (USB)
Regulated outputs3.3V and 5V (250mA each)
MCUTeensy 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#

  1. Install Teensyduino (Arduino IDE plugin)
  2. Clone the FixturIO firmware repository from GitLab
  3. Modify firmware for your application
  4. 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#

ApplicationFeatures Used
DUT power controlGPIO outputs, analog monitoring
Sensor readingADC inputs, I2C peripherals
Status indicationGPIO outputs to LEDs
Button inputGPIO inputs with interrupts
I2C device testingI2C buses for DUT communication
Last updated:January 25, 2025