Skip to the content
PCBKitNew board
2 layers95 × 91 mmEngModem Modular Routed Rev5, the printed circuit board in 3D

EngModem Modular Routed Rev5

kd4cbm/EngModem-Mini

Retro dial-up-modem-styled ESP32-S3 board (RS-232, VFD status display, SD, LEDs) running Zimodem-VFD. KiCad hardware + qualified firmware; Rev5 built and bench-qualified.

Size
95 × 91 mm
Copper layers
2
Thickness
1.6 mm
Parts
51
Nets
84
Pads
255
Tracks, vias
657, 80
Pours
6
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
3 Sep 2026
Updated
30 Sep 2026

Overview

EngModem Modular Routed Rev5 is an open-source printed circuit board by kd4cbm, from the kd4cbm/EngModem-Mini repository on GitHub, published under the CERN-OHL-S-2.0 licence. It is a 2-layer board of 95 × 91 mm with 51 parts on 84 nets, routed with 657 tracks and 80 vias.

It is built around the 74HCT245, ESP32-S3-WROOM-1U-N4 and LM7805S2/TR. Its parts include 12 capacitors, 11 connectors, 10 resistors, 8 diodes and 5 ICs. It belongs with the lEDs and displays and retro computing and games boards and the ESP32 boards of this library.

Main components

3

README

README.md

EngModem Mini

A retro dial-up-modem-styled ESP32-S3 board: RS-232 (true DCE levels via MAX3237), a 24x2 character VFD status display, a microSD card slot, 8 status LEDs, and USB-C, built around the ESP32-S3-WROOM-1U module. Runs Zimodem - Bo Zimmerman's Hayes AT-command modem emulator/internet gateway - via the Zimodem-VFD fork, which adds the VFD status display this board uses. The firmware qualified on this exact hardware, further specialised for it, is included in firmware/.

Front Back

Status: Rev5 built and functionally qualified

One Rev5 board has been built, brought up and bench-qualified with the firmware in firmware/ (revision firmware-v7-rev1), September 2026: programming over USB, boot and debug UART, WiFi, microSD, the VFD, the status LEDs, RS-232 at every rate from 300 to 921600 baud, RTS/CTS flow control, DTR, DCD and RI, and byte-exact data integrity through TCP connections. The full results - and, just as importantly, what was not tested (no rail-voltage or signal-level measurements, single unit, no long soak, no ESD/EMC) - are in docs/QUALIFICATION.md.

Bring-up turned up a few things worth knowing before you build one:

  • J12's pin order does not match most ready-made header-to-DE-9 cables and the board will appear dead with one - see docs/J12_CABLE_GUIDE.md.
  • Three MAX3237 jumpers (J4/J5/J8) must be fitted - see the jumper table in docs/BRING_UP.md.
  • U3/U5 are hand-soldered and U5 was substituted - see docs/ERRATA.md.
  • Most front-panel LEDs read inverted on boards with the original U4. MR, TR, SD, RD and CD go through U4, originally a non-inverting buffer, from active-low signals, so they were lit when they should be dark. The firmware corrects OH, AA and HS; replacing U4 with a pin-compatible inverting part (a TI CD74HCT640M) fixes the rest and has been built and verified on hardware - see docs/ERRATA.md. Also check the LED order at assembly (two LEDs were swapped on the tested unit).
  • The design-stage "all pins match the firmware" check missed signal direction and LED polarity; nine firmware and design issues were found and eight fixed in firmware during qualification (the LED inversion of five LEDs needs a hardware change) - see docs/ERRATA.md and docs/QUALIFICATION.md.
  • Use RTS/CTS for long transfers. With flow control off, a long full-speed two-way stream can still lose data (the receive-buffer bug behind most of that is fixed in firmware v6b) - see docs/ERRATA.md.

This is a functional qualification of a single unit, not a compliance test. Expect further revisions.

Special thanks

This board exists to run Bo Zimmerman's Zimodem - the Hayes AT-command modem emulator this whole project is built around. None of this would have a reason to exist without that project. Thank you, Bo.

Board overview

  • ESP32-S3-WROOM-1U (external U.FL antenna), 16MB flash / 8MB octal PSRAM
  • MAX3237-based RS-232 level shifting, wired as DCE (straight-through DE-9 cable to a PC/terminal) - full modem control set: TXD, RXD, RTS, CTS, DTR, DSR, DCD, RI
  • Noritake CU24025ECPB-W1J 24x2 character VFD, direct 4-bit parallel drive (no I2C bridge)
  • microSD card slot (Hirose DM3AT-SF-PEJM5), dedicated SPI pins
  • 8 status LEDs, including 3 direct-GPIO-driven (AA/HS/OH)
  • USB-C (native USB-Serial-JTAG)
  • 2-layer PCB, routed with Freerouting 2.3.0

Verification

Design checks - every revision was checked with KiCad's own tools before being carried forward:

  • ERC: 32/32 clean (no unsuppressed errors/warnings)
  • DRC: 1 finding, a pre-existing benign silkscreen-overlap warning on U1; 0 unconnected nets
  • Footprint/schematic sync: clean
  • Firmware/hardware cross-check (design stage): every GPIO the firmware references was traced against the schematic netlist pin-by-pin - 18/18 matched by GPIO number and net name. That check did not compare signal direction and so missed a reversed RTS/CTS assignment, found later on the real board and fixed in the firmware; see docs/ERRATA.md.

Hardware qualification - a real Rev5 board, tested on the bench with the included firmware: docs/QUALIFICATION.md.

Prerequisite libraries

This project uses two public third-party KiCad libraries that aren't bundled here - install both via KiCad's Plugin and Content Manager before opening the project:

  • Espressif KiCad libraries (com_github_espressif_kicad-libraries) - ESP32-S3-WROOM-1U symbol/footprint
  • MAX3237 - U1's symbol/footprint

The project's one genuinely custom dependency, a small RetroWiFiModem library providing the SOIC-20W bus-transceiver symbol/footprint used at U4 (both the original 74HCT245 and the CD74HCT640M it was replaced with share the symbol's underlying pinout), is bundled under hardware/kicad/libraries/ and wired up via the project-local sym-lib-table/fp-lib-table, so it resolves automatically - no separate install needed for that one.

RS-232 (J12) - DE-9 female, DCE pinout

DCE pinout in the AT/Everex header order (header pin n = DE-9 pin n) - wire straight-through to a DTE (PC/terminal). Many ready-made header-to-DE-9 cables use a different (DTK/Intel) order and will not work - read docs/J12_CABLE_GUIDE.md:

Pin123456789
SignalDCDRXDTXDDTRGNDDSRRTSCTSRI

Full connector/power-regulation detail (including the U3/U5 substitution below) is in PIN_MAP.md; a running changelog is in CHANGES.md.

Files

  • firmware/ - the qualified firmware: source, prebuilt binaries with checksums, and the hardware QA test scripts (start with its README)
  • docs/ - BRING_UP.md (builder's guide: jumpers, first power, flashing, troubleshooting), QUALIFICATION.md (test report), ERRATA.md (known issues), J12_CABLE_GUIDE.md (cabling)
  • hardware/kicad/ - full KiCad 10 project (schematic
    • PCB), current as of Rev5
  • hardware/kicad/libraries/ - bundled custom library (see Prerequisite libraries)
  • enclosure/ - Hammond 1455U2201BK panel drill/router jigs (front: VFD window, LEDs, mounting holes; rear: DB9, USB-C, power jack/switch, boot/reset, external antenna) - see its own README for the preliminary-hardware disclaimer and usage instructions
  • manufacturing/Gerbers_EngModem-Mini_Rev5.zip - Gerber + Excellon drill files, ready to upload to a fab
  • manufacturing/BOM_PCBA_JLCPCB.csv - bill of materials for the SMD parts JLCPCB will assemble, with LCSC part numbers verified against LCSC's own listings where a specific manufacturer part is called for. Common passives (resistors, most capacitors) intentionally list full specs with no pinned LCSC number - JLCPCB's basic-parts catalog is a live, dynamic search that isn't reliably scriptable, and these are common enough values that matching one at checkout takes seconds. U3, U4 and U5 are intentionally excluded
    • see below.
  • manufacturing/BOM_full.csv - every part on the board, including the through-hole connectors, headers, LED positions, and U3/U5, for your own hand-assembly shopping list
  • manufacturing/CPL_SMD.csv - placement (component position) file for the JLCPCB-assembled SMD parts, in JLCPCB's expected column format (Designator, Mid X, Mid Y, Layer, Rotation), generated directly from the PCB's real component coordinates. U3, U4 and U5 excluded, same as the PCBA BOM.

Gerbers + BOM_PCBA_JLCPCB + CPL_SMD together are what JLCPCB's PCBA (assembly) order flow asks for. Before ordering, check every SMD part's orientation and position in JLCPCB's assembly preview tool - their preview renders whichever specific LCSC library part it matched to each BOM row, using that part's own reference point, which doesn't always agree with KiCad's footprint origin (for angle or position). Their preview UI lets you nudge/rotate a part and save the correction directly, no file regeneration needed - do that check first, especially for U1 (MAX3237EIPWR) and U2 (the ESP32 module).

U3 and U5 - excluded from PCBA, hand-solder these

JLCPCB's placement preview surfaced a real footprint mismatch on both regulators: the originally spec'd parts (HGSEMI LM7805S2/TR for U3, ST LD1086D2T33TR for U5) don't reliably match this board's 3-lead D2PAK/ TO-263-3 footprint - LCSC's own listings show both as 2-lead packages (and JLCPCB's 3D model for U3 shows "TO263-5" case marking), while ST's LD1086 datasheet itself defines two different D²PAK mechanical variants under one ambiguous order code. Rather than risk a bad PCBA placement, both are DNP for JLCPCB assembly - BOM_full.csv lists verified replacement parts to hand-solder instead, sourced from Mouser/DigiKey:

  • U3: onsemi MC7805CD2TR4G (D2PAK-3, CASE 936) - confirmed via onsemi's own MC7800 datasheet: Pin 1=Input, Pin 2=Ground=Tab, Pin 3=Output, an exact match to this footprint and the schematic.
  • U5: TI LM1086CSX-3.3/NOPB (DDPAK/TO-263, package KTT; the qualified board uses the in-stock LM1086IS-3.3/NOPB, same package and pinout, industrial temp grade) - confirmed via TI's own datasheet: Pin 1=ADJ/GND, Pin 2+Tab=Output, Pin 3=Input, an exact match to this footprint and the schematic (tab wired to Output by design).

U4 - excluded from PCBA, hand-solder this

Unlike U3/U5, this wasn't a footprint mismatch - the schematic's generic 74HCT245 (non-inverting) placed and worked fine, but reads five front-panel LEDs inverted (see docs/ERRATA.md). The fix is a pin/package-compatible inverting part, TI CD74HCT640M (SOIC-20-300mil, same footprint) - hand-swapped on the qualified unit and verified correct (2026-09-29; a pad was pulled during desoldering and needed a trace/pad-level repair, worth planning for). LCSC C1548168 - 0 units in LCSC's own direct stock at last check, ~3,000 available through LCSC's Other Suppliers channel at a 9-18 business day lead time (checked 2026-09-29, re-verify before ordering) - excluded here pending confirmed assembly-line stock. Must be the HCT variant, not HC (HC doesn't meet the 3.3V input threshold at 5V).

Revision history

RevNotes
0-1Original modular layout and placement baseline
2SD card socket swapped from a pin header to the real microSD socket (Hirose DM3AT-SF-PEJM5); full reroute
3Second SD placement experiment; full reroute; 69 net-derived pin-function silkscreen labels added across every header/LED footprint
4Dedicated 0.5mm net class for /DC-IN; solid (non-thermal-relief) zone connections on regulator/shield GND tabs; local /VCC copper pour + thermal vias around U5; ESP32 power-filter components (L1/C11/C12) relocated for shorter real routed-copper paths to U2
5Current - via stitching added under U2's ground-pad cluster (9 vias, exposed copper + matching pads mirrored onto the bottom layer) for bottom-side hand-soldering access; keepout zone added around that cluster, full rip/reroute; U3/U5 excluded from PCBA per the footprint mismatch below

License

Hardware design files (schematic, PCB) are released under CERN-OHL-S v2 - a strongly-reciprocal open hardware license: modifications to these design files must be released under the same license if you distribute hardware built from them. See LICENSE.

Parts

51
QtyValueFootprintReferences
8LEDConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalD1, D2, D3, D4, D5, D6, D7, D8
5750RResistor_SMD:R_0805_2012MetricR1, R2, R3, R4, R5
40.22ufCapacitor_SMD:C_0805_2012MetricC1, C2, C3, C4
4MountingHole_3.2mm_M3MountingHole_3.2mm_M3MH1_TL, MH2_TR, MH3_BL, MH4_BR
3330RResistor_SMD:R_0805_2012MetricR6, R7, R8
21uFCapacitor_SMD:C_0805_2012MetricC10, C12
10.1uFCapacitor_SMD:C_0805_2012MetricC7
10.1ufCapacitor_SMD:C_0805_2012MetricC5
10.33uFCapacitor_SMD:C_0805_2012MetricC6
110KResistor_SMD:R_0805_2012MetricR9
110kResistor_SMD:R_0805_2012MetricR10
110uFCapacitor_SMD:C_1206_3216MetricC8
110uFCapacitor_SMD:C_0805_2012MetricC11
110ufCapacitor_SMD:C_0805_2012MetricC9
174HCT245RetroWiFiModem:SOIC-20W_7.5x12.8mm_P1.27mmU4
1DB9Connector_IDC:IDC-Header_2x05_P2.54mm_VerticalJ12
1DC_PWR_HEADERConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ3
1DFE201210U-2R2M=P2 (2.2uH, 1.2A, 228mR)Inductor_SMD:L_0805_2012MetricL1
1ESP-BOOTConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ9
1ESP-ENABLEConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ10
1ESP32-S3-WROOM-1UPCM_Espressif:ESP32-S3-WROOM-1UU2
1EXPConnector_PinHeader_2.54mm:PinHeader_2x04_P2.54mm_VerticalJ7
1LD1086D2T33TRPackage_TO_SOT_SMD:TO-263-3_TabPin2U5
1LM7805S2/TRPackage_TO_SOT_SMD:TO-263-3_TabPin2U3
1MAX-ENCFGConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ4
1MAX-MBAUDConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ8
1MAX-SHDNConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ5
1MAX3237EIPWRMAX3237:PW28U1
1Micro_SD_CardConnector_Card:microSD_HC_Hirose_DM3AT-SF-PEJM5J11
1USBConnector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_VerticalJ6
1VFDConnector_PinHeader_2.54mm:PinHeader_2x07_P2.54mm_VerticalJ1

Questions

How big is the EngModem Modular Routed Rev5 PCB?

It measures 95 × 91 mm and has 2 copper layers, 1.6 mm thick.

What parts does the EngModem Modular Routed Rev5 use?

51 parts, built around the 74HCT245, ESP32-S3-WROOM-1U-N4 and LM7805S2/TR. 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 EngModem Modular Routed Rev5 KiCad files?

From the kd4cbm/EngModem-Mini repository on GitHub, at the commit this page was made from: the board is hardware/kicad/EngModem_Modular_Routed_Rev5.kicad_pcb and its schematic hardware/kicad/EngModem_Modular_Routed_Rev5.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the EngModem Modular Routed Rev5 design in my own project?

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

Similar boards

  • 4 layers56 × 60 mmPCBA KNOT, the printed circuit board in 3D

    PCBA KNOT

    intechstudio/knot

    Knot is the bridge between old-school MIDI gear like synthesizers, groove boxes, guitar pedals and neat USB MIDI devices.

    111 parts58GPL-3.0
  • 4 layers65 × 30 mmSonatino, the printed circuit board in 3D

    Sonatino

    luminationlabs/Sonatino

    Audio development board based on ESP32-S3

    129 parts41CERN-OHL-P-2.0
  • 2 layers59.5 × 101 mmMouse, the printed circuit board in 3D

    Mouse

    unknownusername504/WirelessMouse

    A wireless mouse with open source pcb/schematic as well as drivers to come.

    54 parts35GPL-3.0
  • 4 layers60 × 100 mmMIDAS MK1, the printed circuit board in 3D

    MIDAS MK1

    ISSUIUC/ISS-PCB

    Building custom flight computers

    221 parts33
  • 4 layers145.5 × 64 mmMuffin, the printed circuit board in 3D

    Muffin

    JunOllyLi/TX_PCB

    NOTE: the latest PCB had been manufactured was v2.0. But it had the Gimbal ZH-connector reversed. The schematics and PCB drawing had been updated to v2.1 to fix that. But v2.1 had not been really manufactured yet.

    138 parts17
  • 4 layers60 × 89.5 mm4 layer Batch, the printed circuit board in 3D

    4 layer Batch

    Cyberspecies/Synth-Head

    103 parts10
  • 2 layers100 × 62 mmEsp32s3aprs, the printed circuit board in 3D

    Esp32s3aprs

    mcapdeville/esp32s3aprs

    ESP32s3 APRS beacon/tracker/logger, USB kiss TNC , USB audio FM tranceiver with Micropython shell

    156 parts8CERN-OHL-S-2.0