Skip to the content
2 layers56.5 × 40.5 mmUSBC M2E HaLow Adapter, the printed circuit board in 3D

USBC M2E HaLow Adapter

Diode663/USBC_M2E_HaLow_Adapter

USB-C (USB 2.0) to M.2 Key-E carrier for the Gateworks GW16170 Wi-Fi HaLow card. KiCad 10, generated from Python, Rev A sent to JLCPCB.

Size
56.5 × 40.5 mm
Copper layers
2
Thickness
1.6 mm
Parts
30
Nets
63
Pads
179
Tracks, vias
125, 44
Pours
2
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
20 Sep 2026
Updated
30 Sep 2026

Overview

USBC M2E HaLow Adapter is an open-source printed circuit board by Diode663, from the Diode663/USBC_M2E_HaLow_Adapter repository on GitHub, published under the CERN-OHL-P-2.0 licence. It is a 2-layer board of 56.5 × 40.5 mm with 30 parts on 63 nets, routed with 125 tracks and 44 vias.

It is built around the TPS563201DDCR, USBLC6-2SC6 and CL21A226MAQNNNE, with the CL31A107MQHNNNE, CYA0630-2.2UH and FRC0402F3322TS among its other parts. Its parts include 9 capacitors, 4 resistors, 2 ICs, 2 connectors and 1 diode. It belongs with the radio and wireless and computers and single-board computers boards of this library.

Main components

10

README

README.md

USB-C to M.2 Key-E HaLow adapter

USB 2.0 over a USB-C receptacle to an M.2 2230 Key-E socket, for the Gateworks GW16170 (Morse Micro MM8108-M20) Wi-Fi HaLow card. 56.5 x 40.5 mm, 2-layer (JLCPCB JLC0216A), single-sided assembly.

Top view with the card envelope

Status: Rev A is built and works as designed (boards assembled by JLCPCB, confirmed by the author on 2026-09-29). The project is closed; no Rev B is planned. Test procedure: docs/Test_Procedure.md. Pre-fabrication review: docs/Design_Review_2026-09-20.md.

BlockParts
USB-C inputJ1 HRO TYPE-C-31-M-12, R1/R2 5.1k CC pull-downs, U1 USBLC6-2SC6, D1 SMF5.0A
3.3 V / 3 A buckU2 TPS563201, L1 2.2 uH, C1/C2 in, C4/C5 out, R3/R4 33.2k/10k = 3.32 V
M.2 socketJ2 MLD-NGFF-E-4.2H, C6 100 uF, C7 10 uF, C8/C9 100 nF
MechanicalH1-H4 M3, H5 SMTSOM225BTR M2 x 2.5 mm SMT nut for the card

Only USB D+/D- (M.2 pins 3 and 5), 3.3 V and ground go to the card. W_DISABLE1# (the card's reset) and W_DISABLE2# (wake) are left open on purpose: the card has its own pull-ups, and its reset pin uses a power-on RC that an external pull-up would defeat.

Bill of materials

Full BOM with notes and the parts you supply yourself: BOM.md. The CSV that went to JLCPCB: fab/USBC_M2E_HaLow_Adapter_bom.csv.

RefQtyValuePart numberLCSC
U213 A buck regulatorTPS563201DDCRC116592
U11USB ESD arrayUSBLC6-2SC6C7519
D115 V TVSSMF5.0AC19077497
L112.2 µHCYA0630-2.2UHC5189746
J11USB-C receptacleTYPE-C-31-M-12C165948
J21M.2 Key-E socket, 4.2 mmMLD-NGFF-E-4.2HC52766479
H51M2 x 2.5 mm SMT nutSMTSOM225BTRC5301773
C1110 µF 25 V, 1210GRM32DR71E106KA12LC77100
C61100 µF 6.3 V, 1206CL31A107MQHNNNEC15008
C4, C5222 µF 25 V, 0805CL21A226MAQNNNEC45783
C7110 µF 10 V, 0603CL10A106KP8NNNCC19702
C2, C3, C8, C94100 nF 16 V, 0402CL05B104KO5NNNCC1525
R1, R225.1 kΩ 1 %, 04020402WGF5101TCEC25905
R3133.2 kΩ 1 %, 0402FRC0402F3322TSC2930001
R4110 kΩ 1 %, 04020402WGF1002TCEC25744

You also need the GW16170 card, an M2 x 3–4 mm screw, an MMCX antenna or pigtail, and a short 3 A USB-C cable on a port that can supply about 0.9 A.

How it was made

Everything is generated from Python. Edit the scripts, not the KiCad files. Run with KiCad's Python:

text
"C:\Program Files\KiCad\10.0\bin\python.exe" generate_schematic.py --force
"C:\Program Files\KiCad\10.0\bin\python.exe" autoplace.py . --floorplan
"C:\Program Files\KiCad\10.0\bin\python.exe" autoplace.py . --place --force
"C:\Program Files\KiCad\10.0\bin\python.exe" setup_fab.py
"C:\Program Files\KiCad\10.0\bin\python.exe" route_board.py
"C:\Program Files\KiCad\10.0\bin\python.exe" drc_report.py
"C:\Program Files\KiCad\10.0\bin\python.exe" check_m2_clearance.py
"C:\Program Files\KiCad\10.0\bin\python.exe" build_package.py

--place resets every unlocked footprint. Designators moved by hand in KiCad are detected and kept (.pcbgen-refs.json). route_board.py redraws every track, via and pour each time it runs. build_package.py writes fab/ and refuses to run unless DRC is clean.

Mechanical facts, from the MLD-NGFF-E-4.2H drawing:

  • the card extends from the even-pin / locating-peg side of the socket;
  • the card stop is 1.75 mm behind the pegs, so the 2230 notch is 29.75 mm from the socket centre;
  • the card's underside is 2.52 mm above the board; parts under it must be 0.90 mm or lower.

JLCPCB: setup_fab.py writes their 2-layer rules into the project and into USBC_M2E_HaLow_Adapter.kicad_dru, with the source pages and date in its docstring. The USB pair is 0.3345 / 0.1524 mm with ground pour 0.2032 mm either side, from JLCPCB's own calculator for stackup JLC0216A. JLCPCB does not test impedance on 2-layer boards. jlc_rotations.json holds the placement-file corrections with the evidence for each.

Repository contents

  • USBC_M2E_HaLow_Adapter.kicad_*: the KiCad 10 project, schematic, routed board and custom design rules.
  • fab/: the package sent to JLCPCB for Rev A (gerbers zip, BOM, placement file, order notes).
  • docs/: schematic PDF, renders, copper images, the pre-fabrication design review and the board test procedure.
  • library/: project symbols, footprints and 3D models.
  • *.py: the generators. schlib.py, subcircuits.py, pcblib.py, autoplace.py, recipes.py and jlc_cpl.py are copies of the libraries the project was generated with.
  • Vendor datasheets are not included.

Licence

Copyright Diode663 2026.

Hardware (the KiCad project, schematic, board, the project's own symbols and footprints, fabrication outputs and documentation): this source describes Open Hardware and is licensed under the CERN-OHL-P v2. You may redistribute and modify this source and make products using it under the terms of the CERN-OHL-P v2 (https://ohwr.org/cern_ohl_p_v2.txt), a copy of which is in LICENSE. This source is distributed WITHOUT ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING OF MERCHANTABILITY, SATISFACTORY QUALITY AND FITNESS FOR A PARTICULAR PURPOSE. Please see the CERN-OHL-P v2 for applicable conditions. Source location: https://github.com/Diode663/USBC_M2E_HaLow_Adapter

Software (every *.py file): MIT, see LICENSE-MIT.

Not covered by either licence — third-party material, included for convenience and owned by its respective rights holders:

  • footprints and 3D models obtained from LCSC / EasyEDA with easyeda2kicad: library/HaLowAdapter.pretty/CONN-SMD_MLD-NGFF-E-4.2H.kicad_mod, IND-SMD_L7.2-W6.6_GPSR07X0.kicad_mod, SMTSO_M2_H2.5_SMTSOM225BTR.kicad_mod, and in library/HaLowAdapter.3dshapes/ the USB-C_SMD-TYPE-C-31-M-12_1, IND-SMD_L7.2-W6.6-H3.0_GPSR07X0 and SMD_BD5.6-D3.6 models;
  • USB_C_Receptacle_HRO_TYPE-C-31-M-12.kicad_mod and the M.2 socket symbol, which are modified copies from the KiCad libraries (CC-BY-SA 4.0 with the KiCad library exception).

Gateworks, Morse Micro, JLCPCB and the part manufacturers are not affiliated with this project.

Parts

30
QtyValueFootprintReferences
4100nFCapacitor_SMD:C_0402_1005MetricC2, C3, C8, C9
4M3MountingHole:MountingHole_3.2mm_M3_Pad_ViaH1, H2, H3, H4
3FiducialFiducial:Fiducial_1mm_Mask2mmFID1, FID2, FID3
222uFCapacitor_SMD:C_0805_2012MetricC4, C5
25.1kResistor_SMD:R_0402_1005MetricR1, R2
1+3V3TestPoint:TestPoint_Pad_D1.5mmTP1
1100uFCapacitor_SMD:C_1206_3216MetricC6
110kResistor_SMD:R_0402_1005MetricR4
110uFCapacitor_SMD:C_0603_1608MetricC7
110uF/25VCapacitor_SMD:C_1210_3225MetricC1
12.2uHHaLowAdapter:IND-SMD_L7.2-W6.6_GPSR07X0L1
133.2kResistor_SMD:R_0402_1005MetricR3
1GNDTestPoint:TestPoint_Pad_D1.5mmTP3
1M.2 Key-E (GW16170)HaLowAdapter:CONN-SMD_MLD-NGFF-E-4.2HJ2
1M2 standoff H2.5HaLowAdapter:SMTSO_M2_H2.5_SMTSOM225BTRH5
1SMF5.0ADiode_SMD:D_SOD-123FD1
1TPS563201DDCRPackage_TO_SOT_SMD:SOT-23-6U2
1USB-CHaLowAdapter:USB_C_Receptacle_HRO_TYPE-C-31-M-12J1
1USBLC6-2SC6Package_TO_SOT_SMD:SOT-23-6U1
1VBUSTestPoint:TestPoint_Pad_D1.5mmTP2

Similar boards

  • 4 layers64.6 × 55.2 mmWhisker, the printed circuit board in 3D

    Whisker

    HeyPCB/whisker

    Drop-in controller for Petoi's Nybble robot cat running the stock OpenCat firmware: ATmega328P, PCA9685, MPU-6050, USB-C, 3 A buck, protected battery input. 4-layer KiCad 10 board plus printed cradle.

    118 partsCERN-OHL-S-2.0
  • 4 layers60 × 120 mmTheoros, the printed circuit board in 3D

    Theoros

    Majorwhiskey/gps-lora

    Theoros is a USB-C GPS logger and LoRa tracker built on the ESP32-S3. It logs 1 Hz u-blox M10 fixes to microSD, shows status on an OLED and sends AES-128-CCM encrypted position over 868 MHz LoRa.

    88 partsCERN-OHL-P-2.0
  • 4 layers30.5 × 68.6 mm32bit-5v, the printed circuit board in 3D

    32bit-5v

    bread-modular/bread-modular

    Modular Synths for Everyone

    61 parts67MIT
  • 4 layers98 × 48 mmEsphome pressure, the printed circuit board in 3D

    Esphome pressure

    gcormier/esphome-pressure

    esphome board with a differential pressure sensor, supporting a variety of power sources

    51 parts102
  • 2 layers50 × 80 mmHelgatchi front PCB, the printed circuit board in 3D

    Helgatchi front PCB

    Pips801/Helgatchi

    Handheld BLE/WiFi detector and foxhunter

    43 parts15
  • 2 layers50 × 50 mmStarter, the printed circuit board in 3D

    Starter

    vaknin/PCB

    Hardware ideas to fab-ready PCBs as code: Rust pcbgen on KiCad 10, Freerouting, ESP-IDF firmware with QEMU/Wokwi simulation, CadQuery enclosures

    37 parts
  • 4 layers64 × 56 mmAlec sensor, the printed circuit board in 3D

    Alec sensor

    eshelton328/forge

    Hardware design monorepo with software-grade CI/CD. KiCad PCB projects with automated ERC/DRC, multi-fab rule validation, schematic & BOM checks, and auto-generated board documentation.

    100 parts
  • 4 layers50 × 36 mmPower dual buck, the printed circuit board in 3D

    Power dual buck

    HeyPCB/power-kit

    Six open power and charging boards: KiCad 10, JLCPCB-ready, CERN-OHL-S-2.0

    34 partsCERN-OHL-S-2.0

Questions

How big is the USBC M2E HaLow Adapter PCB?

It measures 56.5 × 40.5 mm and has 2 copper layers, 1.6 mm thick.

What parts does the USBC M2E HaLow Adapter use?

30 parts, built around the TPS563201DDCR, USBLC6-2SC6, CL21A226MAQNNNE and CL31A107MQHNNNE. 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 USBC M2E HaLow Adapter KiCad files?

From the Diode663/USBC_M2E_HaLow_Adapter repository on GitHub, at the commit this page was made from: the board is USBC_M2E_HaLow_Adapter.kicad_pcb and its schematic USBC_M2E_HaLow_Adapter.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the USBC M2E HaLow Adapter design in my own project?

Its repository publishes it under the CERN-OHL-P-2.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).