| doc | ||
| pcb | ||
| pcb-card-base-stm32 | ||
| pcb-powersupply | ||
| wurth-fdsm/KiCad_WPME-FDSM (rev26a) | ||
| CERN_OHL_S_V2.txt | ||
| LICENSE.md | ||
| modulab-coremod.drawio.pdf | ||
| README.md | ||
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.
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.
