Copyright 2025 SuperHouse Automation Pty Ltd
www.superhouse.tv
IOMOD is a mechanical and electrical convention for creating pluggable I/O modules for use in test systems and other projects.
The module pinout allows for either I2C or SPI connections to modules, and up to 8 I/O pins per module. Modules can also optionally support two power domains so that data connections to the host can be at a different voltage to connections to the target device.
4 reference implementations have been created so far:
- AD5593R (I2C)
- MCP23008 (I2C)
- MCP23S08 (SPI)
- Serial Wombat 8B (I2C)
These reference implementations have been designed "upside down", so that when they are assembled the parts will be underneath the module. This allows the top of the module to be totally flat except for the tops of the header pins and their solder joints.
Note: The format is DIP, but it's NOT on a 0.1" grid! That means you can't plug it into a breadboard. The format is 2mm pitch metric DIP with 10mm row spacing center-to-center. An adapter module design is also provided to allow easy use in a breadboard.
Originally developed for the Testomatic PCB test jig system. The Testomatic chassis includes sockets for 7 IOMODs, allowing different modules to be installed based on the specific requirements of the test plan for the Device Under Test.
IOMOD designs are not required to implement all signals. Typically an I2C-based module will leave the SPI-related pins unconnected, and vice versa. Modules may also omit signals such as the active-low interrupt output or the reset pin, and they don't need to implement all 8 GPIO signals.
For example, a module designed specifically for a high-speed SPI single-channel high-precision ADC may implement a single GPIO and leave the rest unconnected. This is perfectly valid if it suits your use-case.
Modules may also choose to fully isolate the power domains, with a floating GND on the I/O side split from the signal GND on the control side. The reference designs included here tie both GND pins together as a common reference, but if you want to design a module with full galvanic isolation you can choose to keep the GND pins separated from each other.
| Pin | Name | Use |
|---|---|---|
| 1 | VBUS | Voltage for control interface |
| 2 | !RST | Reset input to module (active low) |
| 3 | !INT | Interrupt output from module (active low) |
| 4 | SDA | I2C data |
| 5 | SCL | I2C clock |
| 6 | !CS | SPI chip select (active low) |
| 7 | MOSI | SPI MOSI |
| 8 | MISO | SPI MISO |
| 9 | SCK | SPI clock |
| 10 | LGND | Logic ground |
| 11 | IOGND | I/O ground |
| 12-19 | IOx | I/O pins |
| 20 | VIO | Voltage for I/O pins |
A 3D-printed cap design is included that can be glued onto the top of the module to give it a large flat area for labels. A dab of Loctite Extreme Gel or other suitable glue will hold it in place. It has recesses to allow it to sit down over the ends of the header pins.
Labels for the reference designs are included as an Affinity document and an A4 PDF. The labels have tabs that wrap underneath the module to hold the label firmly in place.
A 3D-printed tool design is included to make it easier to insert and remove modules from a carrier board. Testomatic has 7 IOMODs mounted close together so they're tricky to get out with your fingers.
The tool uses a compliant-mechanism hinge. The hinge is a little fragile but seems to work OK when printed in PLA. It may be more durable in PETG.
This variant is designed to be a generic I/O module that provides basic features to cover typical use cases where high ADC precision, etc is not required. It's very flexible because it can handle both analog and digital input and output with true analog output via the DAC, but unfortunately the AD5593R chips are quite expensive.
Features
- AD5593R I/O expander.
- I2C interface.
- 8 I/O pins.
- 3.3V or 5V control interface.
- 3.3V or 5V I/O interface.
- Every pin can be individually configured.
- Digital I/O on every pin.
- 12-bit ADC on every pin.
- 12-bit DAC on every pin.
For use with Arduino, see Rob Tillaart's excellent library at github.com/RobTillaart/AD5593R
This variant is based on the extremely popular MCP23008 I2C I/O expander chip, which means it has excellent driver support. However, it is only capable of digital input and output. It doesn't support analog I/O at all. This makes it less flexible than the AD5593R module, but probably simpler to set up in terms of software support. It's also significantly cheaper.
Features
- MCP23008 I/O expander.
- I2C interface.
- 8 I/O pins.
- 3.3V or 5V control interface.
- 3.3V or 5V I/O interface.
- Digital I/O on every pin.
This variant has the same features as the MCP23008 module, except that it uses SPI for communication with the host. It was implemented mostly to validate that the IOMOD header format is also useful for SPI-based modules.
Features
- MCP23S08 I/O expander.
- SPI interface.
- 8 I/O pins.
- 3.3V or 5V control interface.
- 3.3V or 5V I/O interface.
- Digital I/O on every pin.
This variant is based on SerialWombat from Broadwell Consulting, which is a project to create an extremely flexible I/O expander using readily available MCUs. This IOMOD is based on the CH32V003 MCU, the same as used on the SerialWombat 8B.
Because SerialWombat firmware allows advanced functionality to be offloaded to the I/O expander, it can be configured by the host and then left to handle its own tasks such as driving PWM, reading encoder signals, etc.
More information to come.
Schematics and PCBs were created in Fusion360 and exported as EAGLE format, which can be imported back into Fusion360 or various other packages including KiCAD.
Designed by Jonathan Oxer [email protected]
The specific terms of distribution of this project are governed by the license referenced below.
Licensed under the TAPR Open Hardware License (www.tapr.org/OHL). The "license" folder within this repository also contains a copy of this license in plain text format.







