

DiveCAN Head2
An open source rebreather head controller
- Size
- 97.1 × 26 mm
- Copper layers
- 4
- Thickness
- 1.6 mm
- Parts
- 157
- Nets
- 120
- Pads
- 491
- Tracks, vias
- 1,173, 124
- Pours
- 3
- Routed
- Yes
- KiCad
- KiCad 10.0 (file 20260206)
- Created
- 26 Dec 2023
- Updated
- 7 Nov 2026
Overview
DiveCAN Head2 is an open-source printed circuit board by QuickRecon, from the QuickRecon/DiveCANHead repository on GitHub, published under the MIT licence. It is a 4-layer board of 97.1 × 26 mm with 157 parts on 120 nets, routed with 1,173 tracks and 124 vias.
It is built around the TCAN334D, ADS1115IDGS and LMR62014XMFX, with the GT-TF003-H0185-02, TPS2115ADRBR and TPS7A2533DRV among its other parts. Its parts include 68 resistors, 32 capacitors, 14 diodes, 10 ICs and 5 connectors. It belongs with the STM32 boards of this library.
Main components
12TCAN334D
SOIC-8-40℃~+125℃ 1Mbps 20uA 3V~3.6V 60mA CAN Transceiver SOIC-8 CAN Transceivers ROHSTexas InstrumentsCAN TransceiversADS1115IDGS
MSOP10Ultra-Small, Low-Power, 4 Channels 16-Bit Analog-to-Digital Converter with Internal ReferenceTexas InstrumentsUncategorisedLMR62014XMFX
SOT-23-5-40℃~+125℃@(TJ) 1 1.4A 1.6MHz 2.7V~14V 3V~20V Adjustable Boost Boost Built-in No SOT-23-5 DC-DC Converters ROHSTexas InstrumentsDC-DC ConvertersGT-TF003-H0185-02
SMD-40℃~+90℃ 1.85mm Connector and Ejector MicroSD Card (TF Card) Push-Push SMD SD Card / Memory Card Connector ROHSG-SwitchSD Card / Memory Card ConnectorTPS2115ADRBR
SON-8(3x3)-40℃~+85℃ 2 2.8V~5.5V 2A 84mΩ Active High、Active Low Load Switch Overcurrent Protection(OCP)、Over Temperature Protection SON-8(3x3) Power Distribution Switches ROHSTexas InstrumentsPower Distribution SwitchesTPS7A2533DRV
WSON-6-EP(2x2)-40℃~+125℃@(Tj) 1 18V 2uA 3.3V 300mA 300uVrms 340mV@(300mA) 62dB@(100Hz) Fixed Over Current Protection、Thermal shutdown、Enable control、Input under-voltage protection、Operating status indication、Built-in soft-start Positive WSON-6-EP(2x2) Voltage Regulators - Linear, Low Drop Out (LDO) Regulators ROHSTexas InstrumentsVoltage Regulators - Linear, Low Drop Out (LDO) Regulators0402WGF1002
0402-55℃~+155℃ 10kΩ 50V 62.5mW Thick Film Resistor ±1% ±100ppm/℃ 0402 Chip Resistor - Surface Mount ROHSUNI-ROYALChip Resistor - Surface MountCC0603KRX7R9BB104
0603100nF 50V X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHSYAGEOMultilayer Ceramic Capacitors MLCC - SMD/SMT0402WGF5101
0402-55℃~+155℃ 5.1kΩ 50V 62.5mW Thick Film Resistor ±1% ±100ppm/℃ 0402 Chip Resistor - Surface Mount ROHSUNI-ROYALChip Resistor - Surface MountNCD0805R1
LED0805-30℃~+85℃ 1.6V~2.6V 130° 195mcd 25mA 615nm~630nm 630nm 65mW Discrete Diode Red 0805 LED Indication - Discrete ROHSFoshan NationStar OptoelectronicsLED Indication - Discrete0402WGF1003
0402-55℃~+155℃ 100kΩ 50V 62.5mW Thick Film Resistor ±1% ±100ppm/℃ 0402 Chip Resistor - Surface Mount ROHSUNI-ROYALChip Resistor - Surface Mount0402WGF6800
0402-55℃~+155℃ 50V 62.5mW 680Ω Thick Film Resistor ±1% ±100ppm/℃ 0402 Chip Resistor - Surface Mount ROHSUNI-ROYALChip Resistor - Surface Mount
README
README.mdDiveCAN Head
Open hardware and firmware for a DiveCAN-compatible closed-circuit rebreather PPO₂ monitor and controller. The firmware supports analog galvanic cells, DiveO2 and O2S digital cells, solenoid control, runtime configuration, diagnostics, and persistent telemetry.
Current development
Active firmware lives in Firmware/ and runs Zephyr RTOS on
an STM32L431. It uses MCUboot for updates, Zephyr settings/NVS for persistent
configuration, and flash-backed logs for telemetry and diagnostic text.
The former STM32/ FreeRTOS application and its build/test directories are no
longer part of this checkout. Earlier implementations and their documentation
remain available in Git history.
Two board targets are defined:
| Board | West target | External storage and power |
|---|---|---|
| DiveCAN Jr | divecan_jr/stm32l431xx | 64 MiB SPI NOR; Jr regulator topology |
| DiveCAN MainPCB | divecan_main/stm32l431xx | First 64 MiB of a raw SDMMC card; dual-source power mux |
MainPCB's SD adapter supplies the same flash API and partition layout as Jr for MCUboot, factory backup, settings, and logs. It does not use a filesystem; the first 64 MiB of the card is firmware-owned and may be overwritten. See architecture and board differences.
The checked-in software CI builds the five production variants for Jr. MainPCB has a build target, but is not a second board in that CI matrix. A successful build or simulator test does not establish hardware qualification or handset compatibility. Numbered releases use a separate HIL qualification workflow; see releasing.
Is the development environment public?
The firmware build uses public source and public development tools. Zephyr,
MCUboot, the STM32 HAL, and the compiler are downloaded separately rather than
copied into this repository. Missing .west-projects/, .west/, an SDK, or a
Python virtual environment in a fresh clone is expected.
- West reads the checked-in
Firmware/west.ymland downloads the pinned Zephyr source and its modules, including MCUboot and the STM32 HAL. - Zephyr SDK provides the ARM compiler/linker used to build STM32 images.
- Python packages and host tools run configuration, code generation, and tests.
No private module, paid IDE, GitHub Actions runner, SonarCloud token, or physical
test rig is required to compile the checked-in production variants. The
Firmware/proprietary/ directory is an optional extension hook, not a missing
part of the standard firmware. Physical HIL/release qualification uses a
private, hardware-dependent Test Rig repository and bench. It is a core pillar
of the safety case, although it is not required for local builds or native
module tests. See HIL and the safety case.
New contributor? Follow Development setup: fresh clone to first build. It includes host packages, a Python environment, dependency downloads, SDK installation, a hardware-free test, and troubleshooting. You can compile and run native tests without owning a board.
Repository map
| Path | Contents |
|---|---|
Firmware/ | Zephyr application, board definitions, drivers, variants, tests, and MCUboot configuration |
EDA/ | Electronic design sources and board exports |
CAD/ | Mechanical design assets |
DiveCAN_bt/ | Browser BLE/SLIP/ISO-TP/UDS client, tools, and JavaScript tests |
docs/ | Current documentation index and subsystem guides |
.github/workflows/ | Software CI, HIL, release, and KiCad checks |
Build firmware
After completing the first-time setup, use the revision pinned by Firmware/west.yml and the SDK
version in .west-projects/zephyr/SDK_VERSION. The current pin is Zephyr 4.4.1
with SDK 1.0.1. Install Python, West, CMake, Ninja, a host C/C++ toolchain, and
the device-tree compiler before configuring the workspace. The exact CI
package and Python dependency setup is in
the build workflow.
From the repository root, initialise a new West workspace once:
west init -l Firmware
west update --narrow
west zephyr-export
west packages pip --install
cat .west-projects/zephyr/SDK_VERSIONSkip west init if the checkout already has .west/. Select an installed SDK
matching that version; do not reuse the old NCS toolchain path from historical
notes. To build the Poseidon configuration for Jr:
cd Firmware
export ZEPHYR_SDK_INSTALL_DIR=/absolute/path/to/zephyr-sdk-1.0.1
export ZEPHYR_TOOLCHAIN_VARIANT=zephyr
west build -d build -b divecan_jr/stm32l431xx . --sysbuild -p always -- \
-DBOARD_ROOT=. \
-DEXTRA_CONF_FILE=variants/Poseidon_Aren.conf \
-DEXTRA_DTC_OVERLAY_FILE=variants/Poseidon_Aren.overlayAlways pass the matching .conf and .overlay: the overlay disables unused
peripherals and selects ADC ranges. Use a pristine build when changing board,
variant, or toolchain. For MainPCB, use -b divecan_main/stm32l431xx and a
separate directory such as -d build-main. A board target selects physical
wiring; a variant selects the fitted cell/control topology. Building a pair
does not prove that its configured outputs exist on the assembled hardware.
The five production variants are Poseidon_Aren, AP_Aren, AP_Paul,
eCCR_classic, and Sidewinder_Gabriel. Poseidon_TransducerTest is a bench
variant with a deliberately scaled pressure-input window, not a production
calibration.
Sysbuild produces:
build/merged_divecan_jr_stm32l431xx.hex: MCUboot plus application for SWD;build/Firmware/zephyr/zephyr.signed.bin: application image for UDS OTA;build/Firmware/zephyr/zephyr.elf: application symbols for debugging.
MainPCB uses merged_divecan_main_stm32l431xx.hex in its build directory.
See flashing firmware for image selection and the
Jr-specific helper script.
Test and inspect
Native tests use Zephyr ztest on native_sim. From Firmware/:
python3 scripts/native_test.py list
ZEPHYR_TOOLCHAIN_VARIANT=host python3 scripts/native_test.py build sd_flash
python3 scripts/native_test.py run sd_flash
# Build and run the full native suite:
ZEPHYR_TOOLCHAIN_VARIANT=host python3 scripts/native_test.py run-allBuilds live under Firmware/build-native/. The simulator integration harness
and coverage pipeline are separate from the physical HIL bench. See
testing and
the HIL workflow.
Browser client tests run from DiveCAN_bt/:
npm ci
npm run test:runDocumentation
Start with the documentation index. Frequently used guides:
- Firmware architecture: board topology, storage, threads, power, sensors, control, and build design.
- UDS wire reference and DID catalogue.
- Flash logs and telemetry viewer/CLI.
- Browser client.
- Release process and download contents.
- Engineering compromises and bench-test checklist.
DiveCAN is Shearwater's proprietary rebreather communications bus. This project implements compatible messaging; protocol research is maintained in the QuickRecon DiveCAN repository. Compatibility must be established for the particular handset and configuration.
Contributions and issue reports are welcome. Include the board, variant, firmware revision, and relevant diagnostics when reporting behavior.
Parts
157| Qty | Value | Footprint | References |
|---|---|---|---|
| 25 | 10k | Resistor_SMD:R_0402_1005Metric | R1, R4, R10, R11, R12, R13, R15, R16, R17, R18, R19, R32, R33, R34, R44, R45 +9 |
| 22 | 100n | Capacitor_SMD:C_0603_1608Metric | C3, C10, C11, C12, C14, C17, C19, C21, C25, C26, C27, C28, C29, C30, C31, C32 +6 |
| 8 | 5.1k | Resistor_SMD:R_0402_1005Metric | R36, R37, R38, R39, R40, R41, R42, R43 |
| 8 | LED | LED_SMD:LED_0805_2012Metric | D4, D5, D6, D7, D8, D9, D10, D11 |
| 7 | 100k | Resistor_SMD:R_0402_1005Metric | R14, R46, R50, R51, R60, R61, R69 |
| 7 | 680 | Resistor_SMD:R_0402_1005Metric | R26, R27, R28, R29, R30, R31, R63 |
| 6 | 10u | Capacitor_SMD:C_0603_1608Metric | C13, C15, C16, C18, C20, C24 |
| 5 | 200 | Resistor_SMD:R_0402_1005Metric | R24, R25, R53, R55, R57 |
| 5 | 22k | Resistor_SMD:R_0402_1005Metric | R20, R22, R52, R54, R56 |
| 3 | 12k | Resistor_SMD:R_0402_1005Metric | R2, R3, R47 |
| 3 | 2.2k | Resistor_SMD:R_0402_1005Metric | R21, R23, R67 |
| 3 | MountingHole_Pad | MountingHole:MountingHole_3.2mm_M3_Pad | H1, H2, H3 |
| 2 | 100p | Capacitor_SMD:C_0402_1005Metric | C22, C23 |
| 2 | 20p | Capacitor_SMD:C_0603_1608Metric | C1, C2 |
| 2 | 2A | Fuse:Fuseholder_Littelfuse_Nano2_154x | F1, F2 |
| 2 | 75k | Resistor_SMD:R_0402_1005Metric | R5, R6 |
| 2 | ADS1115IDGS | Package_SO:TSSOP-10_3x3mm_P0.5mm | U6, U7 |
| 2 | BZX584C2V4 | Diode_SMD:D_SOD-523 | D2, D3 |
| 2 | MBR0520 | Diode_SMD:D_SOD-123 | D1, D12 |
| 2 | RST | Button_Switch_SMD:SW_SPST_EVQPE1 | SW1, SW2 |
| 2 | SI2302 | Package_TO_SOT_SMD:SOT-23 | Q1, Q2 |
| 2 | SMF12A | Diode_SMD:D_SOD-123F | D13, D14 |
| 2 | TPS2115 | Library:VSON-8_3.3x3.3mm_P0.65mm_NexFET | U8, U9 |
| 2 | TPS7A2533DRVR | Package_SON:WSON-6-1EP_2x2mm_P0.65mm_EP1x1.6mm_ThermalVias | U3, U4 |
| 1 | 1.2k | Resistor_SMD:R_0402_1005Metric | R48 |
| 1 | 10u | Library:L_SunItech_SLO0530H | L1 |
| 1 | 15k | Resistor_SMD:R_0402_1005Metric | R49 |
| 1 | 2N7000 | Package_TO_SOT_SMD:SOT-23 | Q3 |
| 1 | 560 | Resistor_SMD:R_0603_1608Metric | R35 |
| 1 | 6V_OUT | Jumper:SolderJumper-2_P1.3mm_Open_TrianglePad1.0x1.5mm | JP1 |
| 1 | 8MHz | Crystal:Crystal_SMD_HC49-SD | Y1 |
| 1 | Analog Connection | Connector_IDC:IDC-Header_2x07_P2.54mm_Vertical | J2 |
| 1 | BATT_FUSE_BYPASS | Jumper:SolderJumper-2_P1.3mm_Open_TrianglePad1.0x1.5mm | JP2 |
| 1 | BATT_RVP_BYPASS | Jumper:SolderJumper-2_P1.3mm_Open_TrianglePad1.0x1.5mm | JP4 |
| 1 | BAT_EN | TestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mm | TP2 |
| 1 | BAT_REG | TestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mm | TP4 |
| 1 | BUS_STAT | TestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mm | TP6 |
| 1 | Battery_Cell | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Horizontal | BT1 |
| 1 | CAN Connection | Connector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_Horizontal | J4 |
| 1 | CAN_FUSE_BYPASS | Jumper:SolderJumper-2_P1.3mm_Open_TrianglePad1.0x1.5mm | JP3 |
| 1 | CAN_REG | TestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mm | TP3 |
| 1 | CAN_RVP_BYPASS | Jumper:SolderJumper-2_P1.3mm_Open_TrianglePad1.0x1.5mm | JP5 |
| 1 | Digital Connection | Connector_IDC:IDC-Header_2x07_P2.54mm_Vertical | J3 |
| 1 | JTAG | Library:CON10_2X5_DUK_FTSH_SAI | J5 |
| 1 | LMR62014XMF | Package_TO_SOT_SMD:SOT-23-5 | U5 |
| 1 | LOGO | LOGO | G*** |
| 1 | Micro_SD_Card_Det1 | Library:CONN9_0185-02_GSW | J1 |
| 1 | SOLENOID_PWR | TestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mm | TP10 |
| 1 | SOL_EN | TestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mm | TP1 |
| 1 | STM32L431RCTx | Package_QFP:LQFP-64_10x10mm_P0.5mm | U1 |
| 1 | TCAN334 | Package_SO:SOIC-8_3.9x4.9mm_P1.27mm | U2 |
| 1 | TPS2121 | Package_DFN_QFN:Texas_VQFN-HR-12_2x2.5mm_P0.5mm | U10 |
| 1 | VBUS | TestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mm | TP9 |
| 1 | VCC | TestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mm | TP8 |
| 1 | VCC_STAT | TestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mm | TP5 |
Questions
How big is the DiveCAN Head2 PCB?
It measures 97.1 × 26 mm and has 4 copper layers, 1.6 mm thick.
What parts does the DiveCAN Head2 use?
157 parts, built around the TCAN334D, ADS1115IDGS, LMR62014XMFX and GT-TF003-H0185-02. 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.
Where can I download the DiveCAN Head2 KiCad files?
From the QuickRecon/DiveCANHead repository on GitHub, at the commit this page was made from: the board is EDA/Main PCB/DiveCAN Head2.kicad_pcb and its schematic EDA/Jr PCB/AnalogCell.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the DiveCAN Head2 design in my own project?
Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).
More from QuickRecon/DiveCANHead
1- 2 layers68 × 31.7 mm

Similar boards
- 4 layers65 × 75 mm

- 4 layers65 × 30 mm

- 4 layers53.9 × 29.1 mm

- 4 layers60 × 75 mm

Mixed Signal Demo PCB
rcardenes/FEDEVEL-Mixed-Signal-PCB
KiCAD files for the Mixed-Signal Hardware Design course at Fedevel, by Phil Salmony
114 parts2 - 4 layers65 × 64.5 mm

- 2 layers130 × 164 mm

- 4 layers30.1 × 30.1 mm

Maglev driver
Janky-Jingle-Crew/SouthPoleLevitator
2025 Christmas card "South Pole Levitator"
65 parts3 - 4 layers153 × 48 mm
