Skip to the content
4 layers60 × 80 mmBabel radio, the printed circuit board in 3D

babel pcbs

Size
60 × 80 mm
Copper layers
4
Thickness
1.6 mm
Parts
189
Nets
148
Pads
617
Tracks, vias
2,257, 445
Pours
4
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
22 Oct 2026
Updated
22 Oct 2026

Overview

Babel radio is an open-source printed circuit board by Jconn, from the Jconn/babel_board repository on GitHub. It is a 4-layer board of 60 × 80 mm with 189 parts on 148 nets, routed with 2,257 tracks and 445 vias.

It is built around the ESP32-S3-WROOM-1-N8R8, TPD2E2U06DCKR-TP and SN74LVC1G04DBVR, with the SN74LVC1G08DBVR, SN74CB3Q3245PWRE4 and TPS3700DDCR among its other parts. Its parts include 60 resistors, 36 capacitors, 24 ICs, 3 switches and 2 diodes. It belongs with the radio and wireless boards and the ESP32 boards of this library.

Main components

7

README

hardware/radio/README.md

Babel radio/main board — revision D draft

Onboard charging restored by user decision on 2026-10-19. Revision D combines the revision B charging guard with the connector, footprint and USB protection work from the interrupted revision C. R90 remains DNP until bench qualification. The review note is retained as historical context.

Baseline selected by the user: ESP32-S3-WROOM-1-N8R8. Alif excluded; STM32N6 is not the current implementation. This board owns BLE, WAMR, display, USB programming, power management, and one daughter port. No routing or fabrication release is included.

Open babel-radio.kicad_pro in KiCad 10, then its root schematic. PDF review copy, review BOM, and GPIO allocation accompany the native files. Symbols are embedded and also provided in the project-local library. The native PCB starting file is ready for layout under the shared layout contract. The generated fp-lib-table uses the supplied AppDir footprint libraries; assigned pad-number sets are checked. All 154 radio footprints are assigned. Critical custom land patterns have been dimensionally screened; physical mating and assembly checks remain. Circuit parts staged outside the outline are unplaced, not a finished PCB layout.

Sheets

  1. Overview and release blockers.
  2. Host: WROOM, EN delay, boot/reset/user buttons, 3.3 V SPI display-module header, and UART recovery header. GPIO35/36/37 are unavailable on the R8 module.
  3. USB-C USB2 device input, USB data ESD, BQ24079 4.1 V charger/power path, and protected battery/NTC connector.
  4. TPS63070 3.3 V buck-boost, reference-topology filter, feedback and system switch.
  5. TPS2553 daughter power limit and hardware presence/request gating.
  6. Card edge, dedicated NVM isolation, sensor isolation and switched-rail pull-ups.
  7. Autonomous USB-C permission detection, gated power input and USB data switch.
  8. Hardware charge-temperature window, timer and battery-startup supervision.
  9. Sixteen bring-up test points (including two ground references).

J1 contact numbers match the IR daughter electrical contract and assigned Samtec NP mating footprints. See MECHANICAL.md. SENSOR_TX means host TX, daughter RX. H_ prefixes are MCU-side nets; unprefixed sensor/NVM names are connector-side. Net labels connect across sheets. An NC cross is intentional, not an unfinished wire.

Power and battery precautions

Selected battery and integration status

User selection: Jauch LP523450JU+PCM+JST PHR-3 70MM, Jauch number 251555, protected 1S pouch pack, 3.7 V nominal, 4.2 V maximum, 1000 mAh typical. The pack specification specifies 53 x 34.5 x 5.4 mm at delivery, up to 5.8 mm thick after cycling, and a 10k NTC (B3435). Allow additional enclosure/retention clearance.

J5 now matches the pack's 1 red positive, 2 yellow NTC, 3 black negative. The mating header is JST B3B-PH-K-S; verify its physical pin-1 orientation against the actual harness before connection. R12 is now 5.36k 1%: approximately 166 mA nominal, at most 184 mA using TI's maximum 975 A-ohm factor and minimum resistor tolerance. This is below 190 mA (0.2C using the pack's minimum 950 mAh capacity) for its cold-temperature charge-current limit. U20 now provides a separate hardware temperature window. Keep R90 DNP until physical qualification.

The original direct-NTC connection failed margin screening and has been replaced. Run python3 hardware/radio/tools/audit_charge_limits.py for current, voltage, timer and temperature checks. The new window cuts off nominally below 10.7 C or above 40.0 C. Screened cutoff corners are 7.1..13.7 C and 37.2..43.3 C, including an ASSUMED +/-5% beta spread. The actual pack curve, thermal lag, startup and fault behavior must still be qualified; this is not certification.

Provide a mechanically protective battery compartment with an insulating barrier from solder joints, screw tips and hot components. Protection electronics do not prevent puncture or external heating. Disconnect and remove the pack during soldering/rework. Initial electrical bring-up should use a current-limited supply without the pack, using a valid USB-C current advertisement.

Charging is disabled in the default BOM: R90 is DNP. Do not fit R90 until the cell, its protection, permitted charge current, connector polarity, NTC curve, charging temperature limits, and board thermals have been reviewed. R90 is a hardware assembly option, not a firmware control. Never use an unprotected cell. The charger is not battery overcurrent/undervoltage protection. The selected pack is a protected 1S 4.2 V Li-ion, 1000 mAh typical, with a 10k NTC connected to pack negative. A two-wire pack is not a drop-in replacement. The NTC is measured by U20, independently of the processor, and controls charger CE through U22/U23. The charger's original TS input has a fixed 10k bias because it no longer performs pack-temperature sensing. Never bypass U20 or connect R90 directly to ground.

  • BQ24079 replaces BQ24074: nominal 4.1 V charging (maximum 4.141 V) leaves margin below the pack's 4.2 V limit. This deliberately reduces usable capacity. It is NOT the voltage-based-TS BQ24079T variant. CE is pin 4; SYSOFF pin 15 is low.
  • R108 = 71.5k 0.1% sets nominal 9.53-hour fast-charge and 57.2-minute precharge timers. Fast-charge tolerance is 7.14..11.93 hours before dynamic extensions. Current taper and actual pack capacity need bench testing for completion. Timer expiry is a fault, not permission to repeatedly restart charging. External-temperature CE cycling resets the timer; this is NOT a cumulative wall-clock charge watchdog. Firmware should report faults and avoid retries.
  • USB-C-only policy: require 5 V and advertised 1.5 A or 3 A. U15/U16 run before the main rail; U18 gates input power and U19 gates data. R13 sets nominal 904 mA charger input, at most 976 mA, leaving margin for the CC circuitry. Default-current USB-C and USB-A adapters are unsupported and cannot charge. Native USB programming additionally needs a data-capable C-to-C connection. See USB-STARTUP.md. No USB PD negotiation or USB host mode.
  • GPIO3/45 now remain pulled-low reserved straps, disconnected from charger control. GPIO48 still senses accepted charger input via USB_PGOOD_N.
  • U21 screens battery voltage before main-rail startup; USB permission can start the main rail with no battery. The battery threshold is approximately 3.33 V, with hysteresis but no removal/undervoltage latch. Test near-empty cycling.
  • System switch SW4 disables the buck-boost, not charging. Off is not a physical battery disconnect. The pack must protect against deep discharge.
  • TPS63070 feedback: 0.8*(1+470/150) = 3.307 V nominal. Regulator transient and thermal margins are not yet measured. Capacitor DC-bias derating matters.
  • Daughter power: 226k 1% on TPS2553 gives TI's nominal 120 mA setting, with documented 101.3–142.1 mA limits; continuous daughter budget stays 100 mA.
  • J3 VTREF is for a 3.3 V UART adapter's voltage reference, not a second power input. Do not backfeed the rail or connect RS-232-level signals.

Port sequencing and limitations

Prototype operation requires SW4 OFF before daughter insertion/removal. Hot swapping remains a qualification target, not a supported untested operating mode.

Hardware equations:

text
PORT_EN     = !PRESENT_N && PWR_REQ
NVM_OE_N    = !(PORT_EN && NVM_REQ)
SENSOR_OE_N = !(PORT_EN && SENSOR_REQ)

All requests have pulldowns; switch OEs have pull-ups. The MCU resets with the port isolated and unpowered. Removal detection forces these gates off without waiting for the Wasm driver. This is not a guarantee of early removal detection: the exact card-edge contact lengths, ground-first behavior, bounce and partial insertion must still be designed and tested. Firmware must clear requests on presence loss before a new attachment; the gates are not a removal latch.

Boot/attach: keep requests low and GPIOs high impedance, debounce presence, enable power, wait for validated settling, enable NVM only, validate the image, configure the selected sensor peripheral, then enable sensor isolation. Removal/fault: clear sensor/NVM requests and power, cancel transactions, invalidate readings, and require a fresh attachment/retry sequence. Disable internal MCU pull-ups before disconnecting. WP and reset controls are open-drain.

Revision D retains all sensor signals behind one enable (U13/U14); unused sensor interfaces are high impedance at the MCU but not individually disconnected while the selected bus operates. This is the prototype policy, not the earlier per-interface isolation proposal. Firmware must own/configure every pin and keep unused interfaces high impedance. EEPROM isolation remains independent.

The switches do not recover a stuck I2C bus. Host transactions need deadlines and recovery; EEPROM isolation is independent of sensor isolation. The rail's 10k bleeder gives passive discharge, not an active discharge or power-good check. TPS2553 fault reporting is to firmware; no fault latch is provided. Verify auto-retry, voltage collapse, signal back-powering and removal transients.

USB data, CC and all fourteen card-edge signal contacts now have ESD devices. VBUS now has a 1.5 A fuse and SMBJ6.0A TVS; U18 is TPS22810DBVR with a 27 nF slew-control capacitor. The higher-voltage switch replaces TPS22919 so the TVS clamp is not applied to a 6 V-rated switch. U2 is now ground-referenced TPD2E2U06 rather than USBLC6-2. Protection coordination and physical ESD return paths still need review and measurement; this is not sustained overvoltage protection. IC ratings do not constitute system-level ESD qualification. R120..R123 are populated 0-ohm source-series tuning sites for host-driven SPI/UART signals.

Selected display and mechanical integration

User selection: Adafruit 4741, 1.5-inch 128x128 OLED, SSD1327, 16-level grayscale (not color), using SPI. Use the complete breakout with its onboard regulator and OLED boost converter, not a bare panel. A full 4-bit framebuffer occupies 8192 bytes. Include idle display blanking in firmware to reduce OLED wear.

The Adafruit pinout guide requires cutting the breakout's J1 and J2 jumper traces to select SPI; these jumper names are unrelated to Babel's connector references. It ships in I2C mode.

Babel J2 is a keyed JST PH adapter header, not a pin-for-pin module connector: 1 power (to module Vin), 2 ground, 3 clock, 4 MOSI, 5 CS, 6 D/C, 7 reset, 8 reserved NC. No touchscreen, MISO, or PWM brightness control is allocated. OLED needs no backlight; schematic notes now identify the selected module. Existing LCD_* net names are retained to avoid needless renaming. The source CAD outline, mounting pattern and exact cable mapping are recorded in DISPLAY-INTEGRATION.md. Physical stack height, cable clearance and measured power budget still need checking before layout.

J4 is GCT USB4105-GF-A, with SH shield pads mapped to ground; J5 is selected above. J1, switches, regulator and L1 now have assigned footprints. All assigned footprints still need pad/dimension review. The WROOM antenna needs Espressif's keepout and suitable placement away from battery/display metal.

Verification and reproduction

See PRE-LAYOUT.md for the ordered release checklist and progress. See FEATURES.md for supported design paths and qualification limits.

Run from repository root with the supplied KiCad CLI:

sh
python3 hardware/radio/tools/generate_footprints.py
python3 hardware/radio/tools/generate_schematic.py
squashfs-root/bin/kicad-cli sch erc hardware/radio/babel-radio.kicad_sch --exit-code-violations -o hardware/radio/erc-report.txt
squashfs-root/bin/kicad-cli sch export netlist hardware/radio/babel-radio.kicad_sch --format kicadxml -o hardware/radio/babel-radio.net.xml
python3 hardware/radio/tools/verify_netlist.py
python3 hardware/radio/tools/audit_charge_limits.py
python3 hardware/radio/tools/check_power_policy.py
python3 hardware/radio/tools/check_footprints.py
squashfs-root/bin/kicad-cli sch export pdf hardware/radio/babel-radio.kicad_sch -o hardware/radio/babel-radio.pdf

The generator overwrites the schematic, library, BOM and generated manifest; reconcile manual edits first. Existing project settings are preserved. The checker compares exported connectivity with the manifest and independently checks key IC pin maps, reserved GPIOs, charge-disable assembly, isolation paths and the existing IR daughter's J1. ERC uses normal KiCad defaults, with no project-specific waivers. Neither test proves analog behavior, footprint correctness, battery safety, RF performance or successful hot swapping. WAMR/BLE hardware bring-up remains undone.

Design references

The WROOM stock check from the preceding evaluation supports small-quantity prototype sourcing, not a lifetime supply guarantee. The complete supporting BOM has not yet been stock-qualified. Do not order from this review BOM as a kit.

Parts

189
QtyValueFootprintReferences
1610kResistor_SMD:R_0603_1608MetricR1, R2, R3, R4, R5, R21, R26, R27, R28, R35, R36, R37, R38, R101, R110, R113
12100kResistor_SMD:R_0603_1608MetricR10, R11, R15, R16, R19, R20, R22, R23, R24, R25, R102, R114
10M2 mechanical / NPTHH1, H2, H3, H4, H5, H6, H7, H8, H9, H10
9GNDTestPoint:TestPoint_Pad_D1.0mmTP1, TP7, TP26, TP32, TP33, TP34, TP36, TP37, TP38
9TPD2E2U06DCKRPackage_TO_SOT_SMD:SOT-323_SC-70U2, U24, U30, U31, U32, U33, U34, U35, U36
40R / source tuning near U1Resistor_SMD:R_0603_1608MetricR120, R121, R122, R123
44.7kResistor_SMD:R_0603_1608MetricR31, R32, R33, R34
4SN74LVC1G04DBVRPackage_TO_SOT_SMD:SOT-23-5U5, U8, U10, U17
4SN74LVC1G08DBVRPackage_TO_SOT_SMD:SOT-23-5U6, U7, U9, U22
3100k 0.1%Resistor_SMD:R_0603_1608MetricR105, R107, R112
322uF / 16V X6SCapacitor_SMD:C_0805_2012MetricC12, C13, C14
3SN74CB3Q3245PWRPackage_SO:TSSOP-20_4.4x6.5mm_P0.65mmU12, U13, U14
20R / removable current linkResistor_SMD:R_0603_1608MetricR126, R127
210uF / 25V X7SCapacitor_SMD:C_0805_2012MetricC9, C10
210uF / 25V closeCapacitor_SMD:C_0603_1608MetricC11, C15
21N4148WDiode_SMD:D_SOD-123D1, D2
222R / near U1Resistor_SMD:R_0603_1608MetricR8, R9
2TPS3700DDCRPackage_TO_SOT_SMD:SOT-23-6U20, U21
1046701.5NR / 1.5A fast fuseFuse:Fuse_0603_1608MetricF1
10R / enable guard AFTER bench testResistor_SMD:R_0603_1608MetricR90
10R / removable current linkResistor_SMD:R_0805_2012MetricR125
11.5uH / XFL4020-152MECInductor_SMD:L_Coilcraft_XxL4020L1
11.78k 1% / 904mAResistor_SMD:R_0603_1608MetricR13
1100nF / U1Capacitor_SMD:C_0805_2012MetricC3
1100nF / U10Capacitor_SMD:C_0805_2012MetricC21
1100nF / U12Capacitor_SMD:C_0805_2012MetricC24
1100nF / U13Capacitor_SMD:C_0805_2012MetricC25
1100nF / U14Capacitor_SMD:C_0805_2012MetricC26
1100nF / U15Capacitor_SMD:C_0805_2012MetricC102
1100nF / U17Capacitor_SMD:C_0805_2012MetricC103
1100nF / U19Capacitor_SMD:C_0805_2012MetricC104
1100nF / U20Capacitor_SMD:C_0805_2012MetricC105
1100nF / U21Capacitor_SMD:C_0805_2012MetricC108
1100nF / U22Capacitor_SMD:C_0805_2012MetricC106
1100nF / U23Capacitor_SMD:C_0805_2012MetricC107
1100nF / U5Capacitor_SMD:C_0805_2012MetricC16
1100nF / U6Capacitor_SMD:C_0805_2012MetricC17
1100nF / U7Capacitor_SMD:C_0805_2012MetricC18
1100nF / U8Capacitor_SMD:C_0805_2012MetricC19
1100nF / U9Capacitor_SMD:C_0805_2012MetricC20
1100nF / VAUXCapacitor_SMD:C_0805_2012MetricC8
110k / PS input protectionResistor_SMD:R_0603_1608MetricR124
110k / disable defaultResistor_SMD:R_0603_1608MetricR14
110k / dischargeResistor_SMD:R_0603_1608MetricR30
110k / external NTC guard usedResistor_SMD:R_0603_1608MetricR109
110k 0.1%Resistor_SMD:R_0603_1608MetricR103
110uF / displayCapacitor_SMD:C_0805_2012MetricC4
1150k 1%Resistor_SMD:R_0603_1608MetricR18
11uF / 16V / inputCapacitor_SMD:C_0805_2012MetricC5
11uF / EN delayCapacitor_SMD:C_0805_2012MetricC1
11uF / inputCapacitor_SMD:C_0805_2012MetricC22
11uF / outputCapacitor_SMD:C_0805_2012MetricC23
12.2uF / 10V / LDO OUTCapacitor_SMD:C_0805_2012MetricC101
12.2uF / 16V / LDO INCapacitor_SMD:C_0805_2012MetricC100
1200k 0.1%Resistor_SMD:R_0603_1608MetricR104
1226k 1%Resistor_SMD:R_0603_1608MetricR29
122uF / 10V / U1Capacitor_SMD:C_0805_2012MetricC2
127nF / slew ~2.2ms at 5VCapacitor_SMD:C_0805_2012MetricC109
14.7uF / 10V / BATCapacitor_SMD:C_0805_2012MetricC6
14.7uF / 10V / OUTCapacitor_SMD:C_0805_2012MetricC7
1412k 0.1%Resistor_SMD:R_0603_1608MetricR106
1470k 1%Resistor_SMD:R_0603_1608MetricR17
15.36k 1% / 166mAResistor_SMD:R_0603_1608MetricR12
171.5k 0.1%Resistor_SMD:R_0603_1608MetricR108
1732k 0.1%Resistor_SMD:R_0603_1608MetricR111
1887k 1%Resistor_SMD:R_0603_1608MetricR100
1B3B-PH-K-S / Jauch 251555Connector_JST:JST_PH_B3B-PH-K_1x03_P2.00mm_VerticalJ5
1B3U-1000P / BOOTButton_Switch_SMD:SW_SPST_B3U-1000PSW2
1B3U-1000P / RESETButton_Switch_SMD:SW_SPST_B3U-1000PSW1
1B3U-1000P / USER / HOLDButton_Switch_SMD:SW_SPST_B3U-1000PSW3
1B8B-PH-K-S / OLED cableConnector_JST:JST_PH_B8B-PH-K_1x08_P2.00mm_VerticalJ2
1BAT_OKTestPoint:TestPoint_Pad_D1.0mmTP30
1BQ24079RGTR / 4.1VBabel:BQ24079_RGT0016BU3
1CC_HIGH_NTestPoint:TestPoint_Pad_D1.0mmTP28
1CHARGE_DISABLETestPoint:TestPoint_Pad_D1.0mmTP13
1CHG_NTestPoint:TestPoint_Pad_D1.0mmTP6
1ESP32-S3-WROOM-1-N8R8RF_Module:ESP32-S3-WROOM-1U1
1H_NVM_SCLTestPoint:TestPoint_Pad_D1.0mmTP17
1H_NVM_SDATestPoint:TestPoint_Pad_D1.0mmTP18
1H_NVM_WPTestPoint:TestPoint_Pad_D1.0mmTP19

The 155 most common of 189 parts.

More from Jconn/babel_board

1

Similar boards

  • 4 layers300 × 250 mmSupervision, the printed circuit board in 3D

    Supervision

    pratham-cloud-ctrl/Project-SCCI-RH

    A digital spinal cord-computer interface concept: research, eight KiCad boards, nRF5340 firmware and FreeCAD assemblies.

    483 parts
  • 2 layers80 × 60 mmIRIS C5 RevC, the printed circuit board in 3D

    IRIS C5 RevC

    Benv-B/photo-frame-hardware

    Open hardware carrier for an AirDrop ChLCD color e-paper frame: XIAO ESP32-C5, NFC wake, KiCad, schematic, BOM and Gerbers. CERN-OHL-P-2.0.

    66 partsCERN-OHL-P-2.0
  • 4 layers154 × 81 mmSystem candidate, the printed circuit board in 3D

    System candidate

    bernardopg/ps28-modern-amp

    Infinity Primus PS28 amplifier modernization: TPA3255 engineering, validation and safety-gated workflow

    269 parts1
  • 6 layers450 × 235 mmBaseline, the printed circuit board in 3D

    Baseline

    DeadlySIn777/Controller

    Unfinished CNC controller motherboard: native KiCad sources, rules, DSN and global routing review

    2,723 parts
  • 6 layers164 × 234 mmCooker, the printed circuit board in 3D

    Cooker

    BennetLeff/temper

    a breville control freak ++

    171 parts1
  • 4 layers100 × 100 mmCheap version, the printed circuit board in 3D

    Cheap version

    nikolajevs/ai

    Открыть PCBV1.kicadpro в KiCad 10. После обновления репозитория перечитать открытый проект с диска перед сохранением.

    170 parts
  • 8 layers40 × 94 mmFD MAIN-01, the printed circuit board in 3D

    FD MAIN-01

    Fairank/FieldDock

    Compact iPhone companion hardware: editable PCB, mechanical CAD and portable firmware. Engineering prototype; original work available for noncommercial use.

    424 parts
  • 4 layersRound LED Flash, the printed circuit board in 3D

    Round LED Flash

    xmyoot/custom-round-pcb-led-flash

    Custom circular ring PCB LED flash controller prototype

    237 parts

Questions

How big is the Babel radio PCB?

It measures 60 × 80 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Babel radio use?

189 parts, built around the ESP32-S3-WROOM-1-N8R8, TPD2E2U06DCKR-TP, SN74LVC1G04DBVR and SN74LVC1G08DBVR. 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 Babel radio KiCad files?

From the Jconn/babel_board repository on GitHub, at the commit this page was made from: the board is hardware/radio/babel-radio.kicad_pcb and its schematic hardware/archive/ir-mlx90614-rev-a/babel-ir-daughter.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Babel radio design in my own project?

Its repository states no licence, so its author keeps all rights: ask Jconn before reusing the design.