No description
Find a file
2026-08-29 20:10:21 +03:00
doc Initial docs 2026-08-29 19:34:41 +03:00
pcb Core update: 2026-08-29 18:27:44 +03:00
pcb-card-base-stm32 Card Base STM32: initial commit 2026-08-29 18:28:00 +03:00
pcb-powersupply Initial commit: v0.1.0 2026-08-22 09:59:40 +03:00
wurth-fdsm/KiCad_WPME-FDSM (rev26a) Initial commit: v0.1.0 2026-08-22 09:59:40 +03:00
CERN_OHL_S_V2.txt Initial commit: v0.1.0 2026-08-22 09:59:40 +03:00
LICENSE.md License update for CM4 stuff. 2026-08-29 20:10:21 +03:00
modulab-coremod.drawio.pdf Initial commit: v0.1.0 2026-08-22 09:59:40 +03:00
README.md Initial docs 2026-08-29 19:34:41 +03:00

Modulab

Modulab aims to create an open hardware and software ecosystem for a modular homelab system. The cards should be capable of implementing common laboratory functionality (power supplies, scopes, etc), and they should be easy to create and integrate into the rest of the system.

Architecture

The Modulab system consists of 3 types of objects:

  • A Core Module, of which there is one.
  • A Backplane.
  • Cards, of which there can be many.

Core Module

The Core Module is responsible for the following:

  • Providing ethernet connectivity to the end-user device (PC or laptop typically).
  • Serving the main web app to the end-user device.
  • Handling Card identification.
  • Providing power to the rest of the system.
  • Providing I2C connectivity to the end-user device.

Core Module Architecture

Backplane

The Backplane provides distribution of communication lines and power. Ideally, simple forms of backplane would only require an ethernet switch IC and nothing else. But the Core Module connector is capable of also transmitting a SPI connection, to connect to a Backplane controller IC. This can be used for advanced features, such as soft-start of cards.

Cards

Cards provide user functionality to the system. Cards have multiple different ways to communicate with the end-user device:

  • Via ethernet.
  • Via I2C.
  • None :) A Card does not have to implement any communication if it's all self-contained.

Via the Backplane, a Card gets access to the following resources:

  • 3V3, up to 6A shared between all Cards.
  • 5V, up to 6A shared between all Cards.
  • 36V, up to 5A shared between all Cards.

A Card is required to identify itself to the Core Module. The most basic ID is pulling the ID line high, to indicate presence. Further ID is achieved by having a Microchip UNI/O single-wire EEPROM connected to the ID line, through which extra information can be attained.

Connectors

All connectors used for the Modulab system are 2x30, 2.54 mm pin header format. Canonical implementations will use the Samtec LS2 connectors.

Core Module Pinout

Pin # Side A Side B
1 +36 144 - 180 W (4 - 5 A) +36 144 - 180 W (4 - 5 A)
2 +36 144 - 180 W (4 - 5 A) +36 144 - 180 W (4 - 5 A)
3 GND +3.3 19.8 W (6 A) shared
4 GND +3.3 19.8 W (6 A) shared
5 GND +3.3 19.8 W (6 A) shared
6 GND +5 30 W (6 A) shared
7 GND +5 30 W (6 A) shared
8 GND +5 30 W (6 A) shared
9 GND GND
10 GND GND
11 I2C_SDA Shared bus JTDI/NC Programming
12 I2C_SCK Shared bus JTMS/SWDIO Programming
13 GND JCLK/SWCLK Programming
14 DET0/BP_SCLK Card detection/
Backplane SPI SCLK
SRST Programming
15 DET1/BP_MOSI Card detection/
Backplane SPI MOSI
JTDO/SWO Programming
16 DET2/BP_MISO Card detection/
Backplane SPI MISO
JTRST/NC Programming
17 DET3/BP_SS0 Card detection/
Backplane SPI SS0
VCP_RX Programming
18 DET4/BP_SS1 Card detection/
Backplane SPI SS1
VCP_TX Programming
19 DET5/BP_CTRL_RESET Card detection/
Backplane copro RESET
GND
20 DET6/BP_NC Card detection/
NC if Backplane SPI
GND
21 GND ETH_TX_P/
ETH_BI_DA_P
Ethernet TX; BI_DA+ in 1G
22 GND ETH_TX_N/
ETH_BI_DA_N
Ethernet TX; BI_DA- in 1G
23 ETH_RX_P/
ETH_BI_DB_P
Ethernet, RX; BI_DB+ in 1G GND
24 ETH_RX_N/
ETH_BI_DB_N
Ethernet, RX; BI_DB- in 1G GND
25 GND NC/ETH_BI_DC_P NC if 10/100 eth; BI_DC+ in 1G
26 GND NC/ETH_BI_DC_N NC if 10/100 eth; BI_DC- in 1G
27 NC/ETH_BI_DD_P NC if 10/100 eth; BI_DD+ in 1G GND
28 NC/ETH_BI_DD_N NC if 10/100 eth; BI_DD- in 1G GND
29 GND GND
30 RSVD Reserved for future RSVD Reserved for future

Card Pinout

Pin # Side A Side B
1 +36 144 - 180 W (4 - 5 A) +36 144 - 180 W (4 - 5 A)
2 +36 144 - 180 W (4 - 5 A) +36 144 - 180 W (4 - 5 A)
3 GND +3.3 19.8 W (6 A) shared
4 GND +3.3 19.8 W (6 A) shared
5 GND +3.3 19.8 W (6 A) shared
6 GND +5 30 W (6 A) shared
7 GND +5 30 W (6 A) shared
8 GND +5 30 W (6 A) shared
9 GND GND
10 GND GND
11 I2C_SDA Shared bus JTDI/NC Programming
12 I2C_SCK Shared bus JTMS/SWDIO Programming
13 GND JCLK/SWCLK Programming
14 DET_IO Detection/UNI-O signal output. SRST Programming
15 ID_0 Slot ID, bit 0 JTDO/SWO Programming
16 ID_1 Slot ID, bit 1 JTRST/NC Programming
17 ID_2 Slot ID, bit 2 VCP_RX Programming
18 ID_3 Slot ID, bit 3 VCP_TX Programming
19 CONNECTED Connect to pull-up via 3V3. GND
20 RSVD Reserved for future GND
21 GND ETH_TX_P/
ETH_BI_DA_P
Ethernet TX; BI_DA+ in 1G
22 GND ETH_TX_N/
ETH_BI_DA_N
Ethernet TX; BI_DA- in 1G
23 ETH_RX_P/
ETH_BI_DB_P
Ethernet, RX; BI_DB+ in 1G GND
24 ETH_RX_N/
ETH_BI_DB_N
Ethernet, RX; BI_DB- in 1G GND
25 GND NC/ETH_BI_DC_P NC if 10/100 eth; BI_DC+ in 1G
26 GND NC/ETH_BI_DC_N NC if 10/100 eth; BI_DC- in 1G
27 NC/ETH_BI_DD_P NC if 10/100 eth; BI_DD+ in 1G GND
28 NC/ETH_BI_DD_N NC if 10/100 eth; BI_DD- in 1G GND
29 GND GND
30 RSVD Reserved for future RSVD Reserved for future

Concious Design Decisions

Using ethernet over USB or some such. USB is fun and all, but implementing proper marketable USB devices requires that you worry about Vendor and Product IDs. So right from that angle, USB becomes a headache.

I also find it easier to reason about ethernet connections, since UDP and TCP are easy. Whereas dealing with USB is likely to be more complicated.

Both require a switch IC on the backplane. So from that perspective, the difference isn't that big.