
Eps
ngrabbs/ember
Open pvpanel.kicadpro with KiCad 10. The project contains the recovered schematic, routed PCB, project-local footprint libraries, and solar-module STEP model.

The Manafish Mainboard is the main electronics board of the Manafish ROV. It replaces the Raspberry Pi 3B, the USB-connected Raspberry Pi Pico and the wiring between them with one board:
Manafish is an open-source printed circuit board by Tropaion, from the Tropaion/Manafish_Mainboard repository on GitHub, published under the AGPL-3.0 licence. It is a 4-layer board of 70 × 109.2 mm with 127 parts on 248 nets, routed with 2,121 tracks and 813 vias.
It is built around the RP2354A, SHT45-AD1F-R2 and TPSM53604RDAR, with the LTV-817S-TA1, TPD4EUSB30DQAR and BMI270 among its other parts. Its parts include 48 capacitors, 28 resistors, 14 ICs, 13 connectors and 7 diodes. It belongs with the RP2350 and Raspberry Pi (Linux) boards of this library.
The Manafish Mainboard is the main electronics board of the Manafish ROV. It replaces the Raspberry Pi 3B, the USB-connected Raspberry Pi Pico and the wiring between them with one board:
[!WARNING] Work in progress. The schematic and the 4-layer PCB layout are drawn, but no board has been built or tested. Don't manufacture from this repository yet.

View the latest PCB Interactive BOM or KiCad Design.
flowchart LR
tether["Tether (Ethernet)"] --> magjack["MagJack + ESD"]
magjack -->|4 pairs| cm5["Compute Module 5"]
magjack -.->|center taps| poe["PoE module IC5 (Ag59824, 24 V)"]
cm5 -->|MIPI0| cam["Camera connector J5"]
cm5 -->|MIPI1| cam2["Camera connector J11"]
cm5 -->|"USB 2.0 (data only)"| service["USB-C service port J8"]
cm5 -->|I2C1| sensors["BMI270, SHT45, MS5837 connector"]
cm5 -->|"USB 2.0 (USB3-1 port)"| mcu["RP2354A"]
cm5 -->|"GPIO24 RUN, GPIO25 BOOTSEL"| mcu
mcu -->|GP6-GP9| escA["ESC A, 4-in-1 (AM32)"]
mcu -->|GP18-GP21| escB["ESC B, 4-in-1 (AM32)"]
poe --> chg["Charger IC8 (LTC4162-L)"]
bat["Battery J6 (5S, XT60)"] <--> chg
bat --> escsw["ESC power switch Q3 / IC16"]
mcu -->|GP14| escsw
escsw -->|"J14 (XT60)"| escA
escsw --> escB
chg -->|VSYS| buck["5 V buck IC9 (TPSM53604)"]
mag["Magnet switch board J12"] -->|MAG_ON| lsw
buck -->|5 V always on| lsw["Load switch IC15 (TPS22965)"]
lsw -->|5 V| cm5| Sheet | File | Contents | Origin |
|---|---|---|---|
| Manafish (top level) | manafish.kicad_sch | Sheet hierarchy, battery input J6 (XT60), switched ESC power output J14 (XT60, switch Q3/IC16), USB-C service port J8, magnet switch connector J12 | Original; USB-C port adapted from the CM5 IO Board |
| Raspberry Pi Compute Module 5 | cm5.kicad_sch | CM5 module connectors, boot and EEPROM jumper header J7 | Adapted from the CM5 IO Board |
| Camera Serial Interface | csi.kicad_sch | 22-pin MIPI camera connectors J5 (MIPI0) and J11 (MIPI1), vertical Molex 501951-2230, 3.3 V from CM5_3.3V with 10 µF at each connector | Adapted from the CM5 IO Board |
| Ethernet | ethernet.kicad_sch | MagJack IC3 (YAGEO JXF0-1012NL, 4-pair PoE center taps), ESD protection IC1/IC2, link LEDs | Adapted from the CM5 IO Board |
| Serial Peripherals | serial_peripherals.kicad_sch | BMI270 IMU (SPI to the RP2354A), SHT45 humidity and temperature sensor, WSEN-PADS pressure sensor IC10, MS5837 connector | Original |
| RP2354A | rp2354a.kicad_sch | RP2354A with core regulator, USB, SWD connector J2, ESC connectors J3/J4 | Original, following Hardware design with RP2350 |
| Power Management | power_management.kicad_sch | PoE bridges D2–D5, PoE module IC5, LTC4162-L charger IC8, 5 V buck IC9, load switch IC15 | Original |
"Adapted from the CM5 IO Board" means the sheet started from Raspberry Pi's reference design; see Origin and attribution.
Compute Module 5:
| Signal | CM5 pin | Connects to |
|---|---|---|
| Ethernet pairs 0–3 | 3–12 | MagJack IC3 |
| GPIO2 / GPIO3 (I2C1) | 58 / 56 | BMI270, SHT45, MS5837 connector |
| GPIO24 | 45 | RP2354A RUN |
| GPIO25 | 41 | RP2354A QSPI_SS (BOOTSEL) |
| USB3-1 D+ / D− (USB 2.0 pair) | 163 / 165 | RP2354A USB |
| MIPI0 data and clock lanes | 115–141 | Camera connector J5 |
| SDA0 / SCL0 | 82 / 80 | Camera connector J5 |
| CAM_GPIO0 / CAM_GPIO1 | 97 / 100 | Camera connector J5 |
| MIPI1 data and clock lanes | 175–196 | Camera connector J11 |
| ID_SD / ID_SC (I2C, 2.2 kΩ pull-ups R4/R5) | 36 / 35 | Camera connector J11 |
| GPIO14 / GPIO15 | 55 / 51 | Camera connector J11 pins 17 / 18 (CAM1_GPIO0 / CAM1_GPIO1) |
| USB_P / USB_N (USB 2.0) | 105 / 103 | USB-C service port J8, data only |
| nRPIBOOT, EEPROM_nWP, SYNC_OUT, USB_OTG_ID, PMIC_ENABLE, PWR_BUT | 93, 20, 18, 101, 99, 92 | Jumper header J7 |
| GPIO_VREF | 78 | CM5_3.3V (3.3 V GPIO levels) |
| +5 V input | 77–87 | Power management, through load switch IC15 |
| CM5_3.3V output | 84 / 86 | RP2354A and sensors |
RP2354A (QFN-60):
| Signal | RP2354A pin | Connects to |
|---|---|---|
| GP6–GP9 | 9, 10, 12, 13 | ESC A connector J3 |
| GP18–GP21 | 29, 31, 32, 33 | ESC B connector J4 |
| GP14 | 18 | ESC power switch: high = battery on ESC power connector J14 |
| USB_DP / USB_DM | 52 / 51 | CM5 USB3-1, 27 Ω in series |
| RUN | 26 | CM5 GPIO24 |
| QSPI_SS | 60 | CM5 GPIO25 |
| SWCLK / SWDIO | 24 / 25 | Debug connector J2 |
| XIN / XOUT | 21 / 22 | 12 MHz crystal Y1 (ABM8-272-T3) |
The ESC power switch connects the battery to J14 (both ESCs) through MOSFET Q3, driven by the photovoltaic MOSFET driver IC16 from GP14. It is a static switch: switch it only with the motors stopped, and it has no current limit (the battery BMS protects). A soft start ramps the ESC supply in about 1.5 s, up to about 12 s worst case. So the firmware must:
The camera connectors are vertical, so the cable plugs in from above. Their footprint numbers the pads in reverse (pad n = Molex circuit 23 − n), the same way Raspberry Pi numbers the Hirose connector on the CM5 IO Board, so a standard Pi 22-pin cable lands pin 1 (GND) on pin 1.
Breakout headers (1.27 mm pitch; the pin tables are also on the bottom silkscreen):
| Pin | J9, CM5 GPIO | J13, RP2354A GPIO |
|---|---|---|
| 1 / 2 | +5 V / GND | +5 V / GND |
| 3 / 4 | GND / +3.3 V | GND / +3.3 V |
| 5 / 6 | GPIO9 / GPIO13 | GP29 / GP22 |
| 7 / 8 | GPIO10 / GPIO17 | GP27 / GP24 |
| 9 / 10 | GPIO27 / GPIO22 | GP25 / GP26 |
| 11 / 12 | GPIO18 / GPIO5 | GP23 / GP28 |
| 13 / 14 | GPIO7 / GPIO23 | |
| 15 / 16 | GPIO16 / GPIO20 |
GP26–GP29 on J13 are the RP2354A's ADC inputs.
I2C devices on the CM5's I2C1 bus:
| Device | Address | Notes |
|---|---|---|
| BMI270 IMU | 0x68 | 0x69 if SDO is pulled to VDDIO |
| SHT45-AD1F (with PTFE membrane) | 0x44 | |
| MS5837-30BA pressure sensor (external module) | 0x76 | Fixed address |
hardware/
├── manafish.kicad_pro KiCad project
├── *.kicad_sch schematic sheets
├── manafish.kicad_pcb PCB, 4 layers
├── manafish.kicad_dru custom DRC rules (PoE isolation barriers, impedance pairs, edge parts)
├── sym-lib-table project symbol libraries
├── fp-lib-table project footprint libraries
└── custom_components/
├── symbols/ CM5IO, BMI270, SHT45, ABM8-272-T3, Silvertel, V6K100DUHM3, FDMC8327L, LTC4162, YAGEO symbols
├── footprints/ CM5IO, BMI270, SHT45, ABM8-272-T3, RP2350_Minimal, Silvertel, V6K100DUHM3, FDMC86139P, LTC4162, YAGEO footprints
└── 3d/ STEP modelsmanafish.kicad_pcb is a 70 × 109.2 mm, 4-layer board (revision 3). It sits
centred on the axis of a tube with a 74 mm inner diameter, so a part at lateral
distance d from the axis may stand at most √(37² − d²) − 0.8 mm above the
board surface. Every part fits with this conservative rule; the board note
gives a 74.5 mm tube, which adds margin. The tightest are the CM5 stack at the
right edge (1.2 mm margin) and the battery connector J6 (2.6 mm). The tall
parts sit near the centre line: the MagJack IC3 7.7 mm and the bulk capacitor
C20 6.4 mm off it.
Placement:
All connectors are on the top side. Every part except IC5 is on the top.
The SHT45's tongue has no copper pour and no vias; only four thin tracks cross its bridge. Its bypass capacitor C4 sits just outside the tongue. Four M2 mounting holes are at H1–H4. H3 lies inside the PoE input lines: use a nylon screw and a nylon standoff there.
The planes under the charger inductor L2 are cut out on all layers, and nothing sits under it on the other side.
JLCPCB JLC04161H-7628, 1.6 mm, ENIG finish:
| Layer | Thickness | Use |
|---|---|---|
| F.Cu | 35 µm | Parts, signals, GND and power pours |
| Prepreg 7628 | 0.21 mm, εr 4.4 | |
| In1.Cu | 15 µm | Solid GND reference, no tracks |
| Core | 1.065 mm, εr 4.6 | |
| In2.Cu | 15 µm | GND, power pours (VSYS, MCU 3.3 V, 5 V, battery, ESC power), signals; solid GND under the B.Cu pairs |
| Prepreg 7628 | 0.21 mm, εr 4.4 | |
| B.Cu | 35 µm | PoE module IC5, PoE input lines, signals, GND and 24 V pours |
Order the board with impedance control:
| Net class | Nets | Width / gap | Target |
|---|---|---|---|
DP100 | Ethernet TRD*, camera DPHY0_* and DPHY1_* | 0.21 / 0.19 mm on F.Cu and B.Cu | 100 Ω differential |
USB90 | USB2_*, RP2354A USB_D* | 0.24 / 0.15 mm on F.Cu and B.Cu | 90 Ω differential |
Inside the CM5 and camera connector pin fields the pairs neck down to 0.127 mm. Pours keep 0.3 mm from the pairs everywhere.
The default clearance is 0.1 mm (JLCPCB's minimum is 0.09 mm). Power nets and the impedance pairs keep 0.2 mm. All traces use 45° bends.
The PoE input side (the Primary net class: center taps, bridges, IC5 input,
TYP outputs) is isolated from the rest of the board. manafish.kicad_dru
enforces:
PRI_ISLAND_U5), no vias of other nets and no
other copper on B.Cu or In2. The module's isolation barrier strip stays
empty on B.Cu and In2.In1 and In2 are voided 2 mm around primary copper. Where the four Ethernet pairs cross the PoE input lines, this leaves them without a reference plane for about 5.4 mm. Only IC5, the optocouplers IC6/IC7 and the Y-capacitors C21/C24 cross the barrier.
The same notes are on the board's User.Comments layer, which isn't part of the Gerbers: copy them into the order remarks for the assembler.
KiCad's DRC shows 0 errors. The warnings are the 85 PoE advisories above and 13 footprints whose silkscreen or mask the layout changed on the board (marks moved off pads or the board edge, IC9's vias tented). Updating footprints from the library would undo those changes. The 11 "PTH inside courtyard" items (IC9's thermal vias above IC5, on the other side) are excluded with a comment.
Use the 1500 V 10/700 µs impulse test only, at normal air pressure. Don't run a 1500 Vrms or 2250 Vdc hipot: the Ag59824 is rated only for the impulse test, and 2250 V exceeds the Y-capacitors' 2 kV rating. Afterwards the primary side must measure at least 2 MΩ to GND at 500 Vdc.
The USB-C port J8 carries data only. Its VBUS isn't connected, so the board needs its normal supply while you flash it.
nRPIBOOT).rpiboot
-d mass-storage-gadget64. The eMMC appears as a USB drive.Set PSU_MAX_CURRENT=5000 in the bootloader EEPROM configuration. The CM5
isn't powered over USB-C, so it can't detect the supply's capability itself.
Jumper header J7 (odd pins are GND):
| Pins | Signal | Fitted means |
|---|---|---|
| 1–2 | USB_OTG_ID | USB 2.0 port in host mode; leave open for flashing |
| 3–4 | PWR_BUT | For a push button: short press shuts down or wakes, holding over 5 s forces power-off |
| 5–6 | PMIC_ENABLE | CM5 switched off |
| 7–8 | Not connected | |
| 9–10 | nRPIBOOT | Boot from USB, for flashing |
| 11–12 | EEPROM_nWP | Bootloader EEPROM write-protected; blocks EEPROM updates |
| 13–14 | SYNC_OUT | Ethernet timing output; never fit a jumper |
hardware/manafish.kicad_pro. The project libraries in
custom_components/ are registered in sym-lib-table and fp-lib-table;
everything else comes from KiCad's standard libraries.Datasheets aren't stored in the repository. Use the links below.
This board builds on the Raspberry Pi Compute Module 5 IO Board (CM5IO) reference design by Raspberry Pi Ltd.
custom_components/symbols/CM5IO.kicad_sym, all footprints in
custom_components/footprints/CM5IO.pretty/, and eight 3D models in
custom_components/3d/.cm5.kicad_sch, csi.kicad_sch and
ethernet.kicad_sch, including the boot and EEPROM jumper header J7, and
the USB-C service port J8 in manafish.kicad_sch.The RP2354A circuit follows Raspberry Pi's Hardware design with RP2350 (RP-008280-DS). The footprints for the core regulator inductor L1 and the SWD connector J2 come from Raspberry Pi's RP2350A minimal design, published under the MIT license.
Raspberry Pi is a trademark of Raspberry Pi Ltd. This project is not affiliated with or endorsed by Raspberry Pi Ltd.
NOTICE.md lists every third-party file and its terms.
The original work in this repository is licensed under the GNU Affero General Public License v3.0 or later; see LICENSE. Third-party files keep their own terms, listed in NOTICE.md.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 18 | 100n | Capacitor_SMD:C_0402_1005Metric | C1, C2, C3, C4, C5, C6, C7, C10, C11, C12, C13, C16, C22, C23, C38, C43 +2 |
| 6 | 10uF 50V | Capacitor_SMD:C_1210_3225Metric | C26, C28, C30, C33, C34, C40 |
| 6 | 1kR 1.5A | Inductor_SMD:L_0805_2012Metric | FB1, FB2, FB3, FB4, FB5, FB6 |
| 4 | 10uF | Capacitor_SMD:C_0603_1608Metric | C42, C44, C45, C47 |
| 4 | MountingHole_2.2mm_M2 | MountingHole_2.2mm_M2 | H1, H2, H3, H4 |
| 4 | V6K100DUHM3_H | V6K100DUHM3:V6K100DUHM3H | D2, D3, D4, D5 |
| 3 | 10kR | Resistor_SMD:R_0603_1608Metric | R25, R26, R27 |
| 3 | 33R | Resistor_SMD:R_0402_1005Metric | R8, R16, R17 |
| 3 | 4.7uF | Capacitor_SMD:C_0402_1005Metric | C14, C15, C17 |
| 3 | 47uF 10V | Capacitor_SMD:C_1210_3225Metric | C35, C36, C41 |
| 2 | 100kR | Resistor_SMD:R_0603_1608Metric | R22, R23 |
| 2 | 100nF 50V | Capacitor_SMD:C_1206_3216Metric | C25, C27 |
| 2 | 15pF | Capacitor_SMD:C_0402_1005Metric | C18, C19 |
| 2 | 1N4148WS | Diode_SMD:D_SOD-323 | D6, D7 |
| 2 | 1kR | Resistor_SMD:R_0402_1005Metric | R10, R12 |
| 2 | 2.2kR | Resistor_SMD:R_0402_1005Metric | R4, R5 |
| 2 | 27R | Resistor_SMD:R_0402_1005Metric | R6, R7 |
| 2 | 4.7nF 2kV | Capacitor_SMD:C_1812_4532Metric | C21, C24 |
| 2 | 470R | Resistor_SMD:R_0402_1005Metric | R2, R3 |
| 2 | 5.1kR | Resistor_SMD:R_0402_1005Metric | R14, R15 |
| 2 | Conn_01x22_Female | Molex:Molex_501951-2230_1x22-1MP_P0.50mm_Vertical_RPi-CSI | J5, J11 |
| 2 | FDMC8327L | FDMC86139P:FDMC86139P | Q1, Q2 |
| 2 | LTV-817S | Package_DIP:SMDIP-4_W9.53mm_Clearance8mm | IC6, IC7 |
| 2 | TPD4EUSB30 | Package_SON:USON-10_2.5x1.0mm_P0.5mm | IC1, IC2 |
| 1 | 100kR | Resistor_SMD:R_0402_1005Metric | R29 |
| 1 | 100nF 50V | Capacitor_SMD:C_0603_1608Metric | C37 |
| 1 | 10kR | Resistor_SMD:R_0402_1005Metric | R13 |
| 1 | 10mR | Resistor_SMD:R_1206_3216Metric | R20 |
| 1 | 10nF 50V | Capacitor_SMD:C_0402_1005Metric | C48 |
| 1 | 180R | Resistor_SMD:R_0402_1005Metric | R31 |
| 1 | 1uF 50V | Capacitor_SMD:C_1206_3216Metric | C31 |
| 1 | 1uF 50V | Capacitor_SMD:C_0603_1608Metric | C46 |
| 1 | 2.2MR | Resistor_SMD:R_0402_1005Metric | R32 |
| 1 | 2.43kR | Resistor_SMD:R_0603_1608Metric | R24 |
| 1 | 22nF 50V | Capacitor_SMD:C_0603_1608Metric | C29 |
| 1 | 3.3uH 2.1A | RP2350_Minimal:abracon_aota-b201610s3r3-101-t | L1 |
| 1 | 330R | Resistor_SMD:R_0402_1005Metric | R9 |
| 1 | 4.7kR | Resistor_SMD:R_0402_1005Metric | R11 |
| 1 | 4.7uF 50V | Capacitor_SMD:C_1206_3216Metric | C32 |
| 1 | 470uF 35V | Capacitor_THT:CP_Radial_D10.0mm_P5.00mm | C20 |
| 1 | 47uF 35V | Capacitor_SMD:CP_Elec_6.3x5.8 | C39 |
| 1 | 6.8uH | Inductor_SMD:L_Coilcraft_XAL6060-XXX | L2 |
| 1 | 63.4kR | Resistor_SMD:R_0603_1608Metric | R21 |
| 1 | 8mR | Resistor_SMD:R_1206_3216Metric | R1 |
| 1 | ABM8-272-T3 | ABM8-272-T3:ABM8272T3 | Y1 |
| 1 | AM32_1 | Connector_JST:JST_GH_BM05B-GHS-TBT_1x05-1MP_P1.25mm_Vertical | J3 |
| 1 | AM32_2 | Connector_JST:JST_GH_BM05B-GHS-TBT_1x05-1MP_P1.25mm_Vertical | J4 |
| 1 | Ag59824-LPB | Silvertel:Silvertel_Ag59800-LPB | IC5 |
| 1 | BMI270 | BMI270:BMI270 | IC11 |
| 1 | Battery | Connector_AMASS:AMASS_XT60PW-M_1x02_P7.20mm_Horizontal | J6 |
| 1 | ComputeModule5-CM5 | CM5IO:Raspberry-Pi-5-Compute-Module | Module1 |
| 1 | Conn_01x04_Pin | Connector_JST:JST_GH_SM04B-GHS-TB_1x04-1MP_P1.25mm_Horizontal | J1 |
| 1 | Conn_02x06_Odd_Even | Connector_PinHeader_1.27mm:PinHeader_2x06_P1.27mm_Vertical | J13 |
| 1 | Conn_02x07_Odd_Even | Connector_PinHeader_1.27mm:PinHeader_2x07_P1.27mm_Vertical | J7 |
| 1 | Conn_02x10_Odd_Even | Connector_PinHeader_1.27mm:PinHeader_2x10_P1.27mm_Vertical | J9 |
| 1 | ESC power | Connector_AMASS:AMASS_XT60PW-F_1x02_P7.20mm_Horizontal | J14 |
| 1 | JXF0-1012NL | YAGEO:YAGEO_JXF0-1012NL | IC3 |
| 1 | LTC4162-LAD | LTC4162:QFN-28-1EP_4x5mm_P0.5mm_EP2.65x3.65mm_ThermalVias0.3mm | IC8 |
| 1 | Magnet | Connector_JST:JST_GH_SM03B-GHS-TB_1x03-1MP_P1.25mm_Horizontal | J12 |
| 1 | NTMFS5C404NL | Package_SO:ONSemi_SO-8FL_488AA | Q3 |
| 1 | RP2354A | Package_DFN_QFN:QFN-60-1EP_7x7mm_P0.4mm_EP3.4x3.4mm | IC4 |
| 1 | SHT45-AD1F-R2 | SHT45:SON80P150X150X59-5N | IC12 |
| 1 | SM03B-SRSS-TB | RP2350_Minimal:jst_sm03b-srss-tb-lf--sn- | J2 |
| 1 | SMAJ58A | Diode_SMD:D_SMA | D1 |
| 1 | TPS22965DSGR | Package_SON:Texas_DSG0008A_WSON-8-1EP_2x2mm_P0.5mm_EP0.9x1.6mm_ThermalVias | IC15 |
| 1 | TPSM53604RDA | Package_DFN_QFN:Texas_B3QFN-14-1EP_5x5.5mm_P0.65mm_ThermalVia | IC9 |
| 1 | USB_C_Receptacle_USB2.0_14P | Connector_USB:USB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_Horizontal | J8 |
| 1 | VOM1271T | Vishay:Vishay_SOP-4_P2.54mm_VOM1271T | IC16 |
| 1 | WSEN-PADS_2511020213301 | Package_LGA:ST_HLGA-10_2x2mm_P0.5mm_LayoutBorder3x2y | IC10 |

ngrabbs/ember
Open pvpanel.kicadpro with KiCad 10. The project contains the recovered schematic, routed PCB, project-local footprint libraries, and solar-module STEP model.


joachimda/modbus-to-x
ESP32 based hardware and firmware stack that bridges modbus RTU devices to modern network services.





It measures 70 × 109.2 mm and has 4 copper layers, 1.6 mm thick.
127 parts, built around the RP2354A, SHT45-AD1F-R2, TPSM53604RDAR and LTV-817S-TA1. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
From the Tropaion/Manafish_Mainboard repository on GitHub, at the commit this page was made from: the board is hardware/manafish.kicad_pcb and its schematic hardware/cm5.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository publishes it under the AGPL-3.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).