Skip to the content
PCBKitNew board
4 layers97.1 × 26 mmDiveCAN Head2, the printed circuit board in 3D

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

12

README

README.md

DiveCAN 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.

Quality Gate Status Bugs Code Smells Reliability Rating Maintainability Rating

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:

BoardWest targetExternal storage and power
DiveCAN Jrdivecan_jr/stm32l431xx64 MiB SPI NOR; Jr regulator topology
DiveCAN MainPCBdivecan_main/stm32l431xxFirst 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.yml and 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

PathContents
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:

bash
west init -l Firmware
west update --narrow
west zephyr-export
west packages pip --install
cat .west-projects/zephyr/SDK_VERSION

Skip 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:

bash
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.overlay

Always 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/:

bash
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-all

Builds 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/:

bash
npm ci
npm run test:run

Documentation

Start with the documentation index. Frequently used guides:

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
QtyValueFootprintReferences
2510kResistor_SMD:R_0402_1005MetricR1, R4, R10, R11, R12, R13, R15, R16, R17, R18, R19, R32, R33, R34, R44, R45 +9
22100nCapacitor_SMD:C_0603_1608MetricC3, C10, C11, C12, C14, C17, C19, C21, C25, C26, C27, C28, C29, C30, C31, C32 +6
85.1kResistor_SMD:R_0402_1005MetricR36, R37, R38, R39, R40, R41, R42, R43
8LEDLED_SMD:LED_0805_2012MetricD4, D5, D6, D7, D8, D9, D10, D11
7100kResistor_SMD:R_0402_1005MetricR14, R46, R50, R51, R60, R61, R69
7680Resistor_SMD:R_0402_1005MetricR26, R27, R28, R29, R30, R31, R63
610uCapacitor_SMD:C_0603_1608MetricC13, C15, C16, C18, C20, C24
5200Resistor_SMD:R_0402_1005MetricR24, R25, R53, R55, R57
522kResistor_SMD:R_0402_1005MetricR20, R22, R52, R54, R56
312kResistor_SMD:R_0402_1005MetricR2, R3, R47
32.2kResistor_SMD:R_0402_1005MetricR21, R23, R67
3MountingHole_PadMountingHole:MountingHole_3.2mm_M3_PadH1, H2, H3
2100pCapacitor_SMD:C_0402_1005MetricC22, C23
220pCapacitor_SMD:C_0603_1608MetricC1, C2
22AFuse:Fuseholder_Littelfuse_Nano2_154xF1, F2
275kResistor_SMD:R_0402_1005MetricR5, R6
2ADS1115IDGSPackage_SO:TSSOP-10_3x3mm_P0.5mmU6, U7
2BZX584C2V4Diode_SMD:D_SOD-523D2, D3
2MBR0520Diode_SMD:D_SOD-123D1, D12
2RSTButton_Switch_SMD:SW_SPST_EVQPE1SW1, SW2
2SI2302Package_TO_SOT_SMD:SOT-23Q1, Q2
2SMF12ADiode_SMD:D_SOD-123FD13, D14
2TPS2115Library:VSON-8_3.3x3.3mm_P0.65mm_NexFETU8, U9
2TPS7A2533DRVRPackage_SON:WSON-6-1EP_2x2mm_P0.65mm_EP1x1.6mm_ThermalViasU3, U4
11.2kResistor_SMD:R_0402_1005MetricR48
110uLibrary:L_SunItech_SLO0530HL1
115kResistor_SMD:R_0402_1005MetricR49
12N7000Package_TO_SOT_SMD:SOT-23Q3
1560Resistor_SMD:R_0603_1608MetricR35
16V_OUTJumper:SolderJumper-2_P1.3mm_Open_TrianglePad1.0x1.5mmJP1
18MHzCrystal:Crystal_SMD_HC49-SDY1
1Analog ConnectionConnector_IDC:IDC-Header_2x07_P2.54mm_VerticalJ2
1BATT_FUSE_BYPASSJumper:SolderJumper-2_P1.3mm_Open_TrianglePad1.0x1.5mmJP2
1BATT_RVP_BYPASSJumper:SolderJumper-2_P1.3mm_Open_TrianglePad1.0x1.5mmJP4
1BAT_ENTestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mmTP2
1BAT_REGTestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mmTP4
1BUS_STATTestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mmTP6
1Battery_CellConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_HorizontalBT1
1CAN ConnectionConnector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_HorizontalJ4
1CAN_FUSE_BYPASSJumper:SolderJumper-2_P1.3mm_Open_TrianglePad1.0x1.5mmJP3
1CAN_REGTestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mmTP3
1CAN_RVP_BYPASSJumper:SolderJumper-2_P1.3mm_Open_TrianglePad1.0x1.5mmJP5
1Digital ConnectionConnector_IDC:IDC-Header_2x07_P2.54mm_VerticalJ3
1JTAGLibrary:CON10_2X5_DUK_FTSH_SAIJ5
1LMR62014XMFPackage_TO_SOT_SMD:SOT-23-5U5
1LOGOLOGOG***
1Micro_SD_Card_Det1Library:CONN9_0185-02_GSWJ1
1SOLENOID_PWRTestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mmTP10
1SOL_ENTestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mmTP1
1STM32L431RCTxPackage_QFP:LQFP-64_10x10mm_P0.5mmU1
1TCAN334Package_SO:SOIC-8_3.9x4.9mm_P1.27mmU2
1TPS2121Package_DFN_QFN:Texas_VQFN-HR-12_2x2.5mm_P0.5mmU10
1VBUSTestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mmTP9
1VCCTestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mmTP8
1VCC_STATTestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mmTP5

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 mmJr DiveCANHead, the printed circuit board in 3D

    Jr DiveCANHead

    QuickRecon/DiveCANHead

    An open source rebreather head controller

    84 parts13MIT

Similar boards

  • 4 layers65 × 75 mmRp2040 audioboard, the printed circuit board in 3D

    Rp2040 audioboard

    lzptr/rp2040_audioboard

    Mixed signal audio board using the rp2040

    124 partsMIT
  • 4 layers53.9 × 29.1 mmBLE board, the printed circuit board in 3D

    BLE board

    rcardenes/sensor_board_with_ble

    47 parts
  • 4 layers60 × 75 mmMixed Signal Demo PCB, the printed circuit board in 3D

    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 mmScratch-001, the printed circuit board in 3D

    Scratch-001

    CrypticRage/scratch-001

    114 parts
  • 2 layers130 × 164 mmCct main, the printed circuit board in 3D

    Cct main

    syncmeta/PendingHome

    全屋双色温灯光控制方案 基于 HA 和 ESPHome

    217 partsMIT
  • 4 layers30.1 × 30.1 mmMaglev driver, the printed circuit board in 3D

    Maglev driver

    Janky-Jingle-Crew/SouthPoleLevitator

    2025 Christmas card "South Pole Levitator"

    65 parts3
  • 4 layers153 × 48 mmSegway V7, the printed circuit board in 3D

    Segway V7

    jntaimo/2.004-Segway

    78 parts