MR

Money Roll Engineering Package

Rev A · 2026-09-13 · Released for review

← Kiosk

Module 04

Electrical Schematics & Custom PCB

CM4 + STM32 carrier board architecture, power tree, optoisolated ID-003 transceiver, dye-pack arm/fire circuit, USB hub, netlist and BOM.

Build files · ready to send to a shop

money-roll-pcb-MR-RTIO-A.zip

MR-RTIO-A real-time I/O controller (STM32F407 HAT for the CM4): KiCad 9 project, fully routed 150×100 mm 2-layer board (DRC clean, 0 unconnected), Gerbers + Excellon drill, pick-and-place, BOM with LCSC/DigiKey numbers, schematic PDF, STEP model, ERC/DRC reports.

  • gerbers/ — RS-274X copper/mask/paste/silk/edge, Excellon drill + map, ODB++ and IPC-2581
  • assembly/ — MR-RTIO-A_BOM.csv (grouped, LCSC + DigiKey), pick-and-place CSV, flat parts list, netlist
  • schematic/ — schematic PDF/SVG, top/bottom copper and assembly-drawing PDFs
  • kicad/ — .kicad_pro / .kicad_sch / .kicad_pcb / .kicad_dru, custom symbol lib, STEP board model, Specctra DSN/SES
  • reports/ — ERC and DRC reports (0 errors / 0 violations / 0 unconnected)
  • previews/ — PNG renders of top, bottom, copper and the schematic
  • scripts/ — design.py single source of truth and the generators that built every file above
Download zip · 6.1 MB

Module 4 — Electrical Schematics & Custom PCB Design

FieldValue
Document IDMR-HW-ELEC-004
RevisionA
Date2026-09-13
OwnerPrincipal Electrical Engineer, Money Roll Hardware Team
StatusReleased for review

4.1 Scope

This module defines the electrical architecture, power tree, interface circuits, netlist, PCB layout requirements, GPIO maps, EMC/safety considerations, and bring-up test procedure for the Money Roll carrier board. It covers the dual-tier compute architecture (Raspberry Pi CM4 host + STM32F407VGT6 real-time controller) and all safety-critical subsystems: bill validator interface, cassette tamper/dye-pack firing circuit, and tamper sensing. Component designators match hardware/bom.csv; the full net table is in hardware/netlist.md.

4.2 System Block Diagram

                                   +-------------------------------------------+
  24VDC IN (PS1: LRS-150-24)  --> | 24V PROTECTION: F1 5A, RV1 TVS, Q4 ideal-D |
                                   +---------------------+-----------------------+
                                                          |
        +-------------------------+--------------+-------+--------+-----------------+
        v                         v              v                v                 v
  U1 24V->12V buck         J21 24V dist    U24 BQ25792      U5 PFAIL comp     C22 10mF hold-up
  (fans, card dispenser)   (bill validator  (charges BT1     (24V divider)     (bulk cap bank)
        |                   solenoids)       2S 18650)             |
        v                                        |                 v
  U2 12V->5V buck  <----------------------- BATT_SYS_OUT     PFAIL GPIO --> U16 (STM32) + U6 (CM4)
        |
        v
  U3 5V->3.3V buck --> 3V3_RAIL (logic, MCU, sensors, isolators)

  =========================== HOST TIER (Linux) ===========================
  U6 CM4104032 (J2/J3 100-pin B2B)
   |-- USB2.0 --> U7 USB2514B hub --+-- J4 Card dispenser (USB2553 port sw + ESD)
   |                                +-- J5 Hybrid card reader
   |                                +-- J6 Touchscreen controller (internal)
   |                                +-- J7 External ruggedized keypad
   |-- Gigabit Ethernet --> J8 RJ45 w/ integrated magnetics (HanRun HR911105A)
   |-- DSI/HDMI --> J13 FPC --> U14 LCD driver board --> 10.1in touchscreen panel
   |                              U15 GT911 touch controller (I2C, via J6)
   |-- mini-PCIe --> J9 4G LTE modem, J10 SIM, U13 sequenced power, J11/J12 antennas
   |-- UART (3.3V, 115200) <----------------------------------------------+
   |-- GPIO_ARM_ENABLE / GPIO_HANDSHAKE_ACK  <-----------------------+    |
                                                                      |    |
  ========================= REAL-TIME TIER (Bare metal) ==============|====|=====
  U16 STM32F407VGT6                                                   |    |
   |-- UART2 (isolated) --> U17 ADuM1201 --> U19 MAX3232 --> J16 Bill validator
   |-- GPIO open-collector --> Q1 --> J17 ccTalk alt. bus
   |-- SPI --> U26 LSM6DSO IMU (tamper/shock)
   |-- GPIO --> SW2-SW5 chassis tamper switches, SW6 cassette door switch
   |-- GPIO --> U25 EE-SX671 beam-break sensor
   |-- I2C --> U27 TMP1075 temperature, U4 DS3231 RTC (shared bus with CM4 via level match)
   |-- ARM/FIRE chain --> SW1 key switch -> K1 relay -> Q2 P-MOSFET -> J18 dye-pack/squib
   |-- Independent watchdog U23 gates FIRE_EN
   +-- SWD debug J15

4.3 Power Tree

4.3.1 Topology

PS1 (LRS-150-24, 24V/6.5A, 156W) --> J1 --> F1(5A) --> RV1(TVS) --> Q4(reverse-polarity ideal diode)
   --24V_PROT-->  U1 LMR33630 (24V->12V, up to 3A)         --> 12V_RAIL: card dispenser, fans (J20), K1 coil
   --24V_PROT-->  U2 TPS54560 (12V-derived path shown separately below for CM4 5V)
   --24V_PROT-->  J21 direct 24V distribution: bill validator solenoids, cassette lock motor (J22)
   --24V_PROT-->  U24 BQ25792 charger --> BT1 (2x 18650, 2S, 7.4V nominal) --> Q2 FIRE circuit supply
12V_RAIL --> U2 TPS54560 (12V->5V @5A) --> 5V_RAIL: CM4 (U6), touchscreen (U14/U15), USB hub (U7)
5V_RAIL  --> U3 TPS62133 (5V->3.3V @3A) --> 3V3_RAIL: STM32 (U16), sensors, isolators logic side
5V_RAIL  --> U18 B0505S isolated DC-DC --> 5V_ISO: bill validator isolated interface (U17, U19)

4.3.2 Per-rail current budget

RailSourceNominal VMax currentLoadsMargin
24V_PROTPS1 via F1/RV1/Q424.0 V6.5 AU1, J21 (bill validator solenoids 1.5 A), U24 charger 1 A, K1 coil 80 mA25%
12V_RAILU1 LMR3363012.0 V3.0 ACard dispenser motor 1.8 A, 2x fans 0.3 A ea, U2 input30%
5V_RAILU2 TPS545605.0 V5.0 ACM4 (2.5 A peak w/ USB loads), U14 LCD (1.2 A), U7 hub self 0.1 A20%
5V_ISOU18 B0505S5.0 V0.3 AU17 isolator, U19 RS-232 driver, bill validator opto side40%
3V3_RAILU3 TPS621333.3 V3.0 AU16 STM32 (250 mA), U4, U5, U7 logic, U26, U27, U2260%
USB_Px_PWRU8-U11 TPS25535.0 V1.5 A eachJ4-J7 downstream USB peripheralscurrent-limited, foldback at 1.5 A
BATT_SYS_OUTBT1 via U247.4 V (2S)2.0 A pulseQ2 FIRE load (squib/solenoid), always live even if mains removedfiring energy reserve >= 10 firings

4.3.3 Protection

FunctionComponentNotes
Fuse, 24V inputF1, Littelfuse 0453005.MRL, 5 AReplaceable, in-line with J1
Fuse, batteryF2, Littelfuse 0453003.MRL, 3 AProtects BT1/U24 path
Reverse polarityQ4, SUM70020E-GE3 P-MOSFET ideal diode< 0.3 V drop at 3 A, avoids linear diode dissipation
Surge/TVS, 24VRV1, Littelfuse V26MLA0805HClamps line transients from solenoid switching
InrushPS1 internal soft-start; C1/C2 bulk caps sized to limit dV/dt at U1/U2 inputsBulk input capacitance 220 uF total at 24V_PROT
Solenoid/coil flybackD6 SS54 Schottky across K1 and firing loadsPrevents inductive kick on Q2 drain
Firing line TVSRV2 SMBJ33AClamps squib/solenoid line transients

4.3.4 RTC and power-loss detection (hold-up for orderly shutdown)

                24V_PROT
                   |
             +-----+-----+          PFAIL_SENSE
             |  R divider |------------+
             +-----+-----+             |
                   |                   v
                  GND            U5 LM393 comparator (Vref from 3V3_RAIL/R2 divider)
                                        |
                                    PFAIL (open-drain, pulled up to 3V3)
                                    /            \
                          U16 STM32 EXTI34    U6 CM4 GPIO39
                                        |
                         C22: 5x 2200uF (10mF) bulk bank on 24V_PROT
                         holds bus above U1/U2 UVLO for >= 500 ms after
                         PS1 removal, giving CM4 time to sync filesystem
                         and cleanly unmount eMMC before 5V collapses.

  U4 DS3231 RTC: VCC=3V3_RTC, VBAT=C21 (0.47F EDLC) charged through internal
  trickle diode. Maintains time-of-day through outages up to ~10 days.
  CM4 also retains its own hardware RTC backup via VBAT header (optional,
  not populated on rev A carrier; DS3231 is primary time source over I2C).

4.4 Interface Circuits

4.4.1 (a) Optoisolated bill validator UART (TTL/RS-232)

STM32 UART2                 U17 ADuM1201 (isolator)              U19 MAX3232          J16 Bill Validator
TX (3V3) --[R6 100R]--> VIA1 >>>isolation barrier>>> VOA1 -----> T1IN --> T1OUT ------> pin3 BV_TXD
RX (3V3) <----------------- VOB1 <<<isolation barrier<<< VIB1 <-- R1OUT <-- R1IN <------ pin4 BV_RXD
3V3_RAIL --> U17 pin1 (VDD1)         5V_ISO (from U18) --> U17 pin8 (VDD2), U19 pin16 (VCC)
GND --> U17 pin5 (GND1)              GND_ISO --> U17 pin5(iso side)/U19 pin15
                                      U18 B0505S: pin1=5V_RAIL in, pin2=GND, pin3=5V_ISO out, pin4=GND_ISO
                                      (creepage >= 2mm maintained across U17/U18 isolation slot, see 4.6)
For ID-003 TTL-only validators: bypass U19, tap UART_BV_TX_ISO_OUT / UART_BV_RX_ISO_IN
directly to J16 pins 3/4 at 3.3V TTL levels (U19 stuffed only for RS-232 variants).

4.4.2 (b) ccTalk single-wire open-collector alternative

                 5V (CCTALK_5V, external pull-up in validator)
                        |
                       [R3 1k]
                        |
STM32 GPIO -->[R3 1k]-- Q1 (BC847, base) 
                        |
   CCTALK_BUS <---------+---- collector (open collector to bus)
                        |
                       GND (emitter)
J17 pin1=CCTALK_5V, pin2=CCTALK_BUS, pin3=CCTALK_GND, pin4=shield
Bus is wire-ORed; STM32 reads bus state on a separate input GPIO (not shown,
shares CCTALK_BUS net) with Schmitt-trigger input enabled.

4.4.3 (c) Dye-pack tamper circuit — two-stage arm/fire

STAGE 1 - MECHANICAL ARM (service technician key):
  ARM_KEY_IN --SW1(key switch)--> K1 coil driven by STM32 ARM_LATCH_COIL (GPIO + flyback diode)
  K1 contacts (NO) close only when: key inserted+turned AND STM32 commands latch (software AND)

STAGE 2 - ELECTRONIC FIRE (STM32-gated, watchdog-supervised):
  ARM_LATCH_OUT (from K1 NO contact) --> Q2 (AOD417 P-MOSFET) source
  U20 (TC4427A) gate driver drives Q2 gate from FIRE_GATE, enabled by FIRE_EN (STM32 GPIO)
  U20 driver itself is inhibited by U23 independent watchdog (WDT_OUT_INHIBIT) --
  if STM32 firmware hangs, WDT_OUT_INHIBIT forces FIRE_GATE high (Q2 OFF) within 1.6s.
  Q2 drain --> FIRE_LOAD --> J18 --> squib/solenoid --> FIRE_RETURN --> D6 flyback + RV2 TVS
  For pyrotechnic squib: U21 (LM317 as constant-current) + R4 (1.2R) sets 1.00A firing pulse
  (limited to 200ms via STM32 timer). Continuity checked pre-arm with 1mA test current through
  R6, sensed by U22 comparator/ADC on FIRE_CONT_ADC (STM32 ADC1_IN0) — confirms squib bridge
  wire intact (typically 1-2 ohm) before allowing ARM state.
  Firing supply is BATT_SYS_OUT (from BT1 via U24), NOT the 24V mains-derived rail, so cutting
  building power does not disarm or prevent firing.

Safety interlock table:

| Interlock | Signal | Condition to allow FIRE | Failure mode |
|---|---|---|---|
| Mechanical key | SW1 | Technician key present and turned | Open = cannot arm |
| Software arm | GPIO_ARM_ENABLE (CM4->STM32 handshake) | Host confirms cassette full/removal event | Absent = ARM latch not energized |
| Relay latch | K1 | Both above true simultaneously (hardware AND, not software-only) | De-energized = FIRE_GATE cannot reach Q2 |
| Watchdog | U23 | STM32 main loop kicking IWDG and U23 within window | Timeout = forces Q2 off, logs event |
| Continuity | U22 / FIRE_CONT_ADC | Squib resistance in 0.8-3.0 ohm window | Out of range = ARM refused, alarm raised |
| Door switch | SW6 | Cassette door closed | Open = fire inhibited, treated as extraction in progress (different response path) |
| Battery present | BT1 via U24 PG pin | Battery voltage > 6.0V (2S) | Below threshold = fire inhibited, maintenance alert |

Independent watchdog: U23 TPS3813K33 runs from a separate RC timing network unrelated to the
STM32 core clock; it is not reset by the same code path as the STM32 internal IWDG, providing
two independent watchdog domains for the fire-enable chain.

4.4.4 (d) Tamper sensor inputs

Chassis micro-switches (SW2-SW5, Omron D2F-01L), normally-closed loop:
  3V3_RAIL --[R5 10k pull-up]-- TAMPER_SW_n --SW_n(NC)-- GND
  RC debounce: C5 100nF from TAMPER_SW_n to GND, tau = R5*C5 = 1ms; firmware applies
  additional 20ms majority-vote software debounce (5 samples at 4ms).

Optical beam break (U25, Omron EE-SX671), slotted photointerrupter across cassette slide rail:
  BEAM_BREAK_5V --> U25 emitter anode (through internal 330R), collector output
  BEAM_BREAK_SIG pulled up 10k to 3V3, open when beam is broken (object/tamper present).
  Firmware requires beam state to correlate with expected bill-transport timing window;
  break outside expected window flags tamper.

IMU (U26, LSM6DSO) over SPI1 (SCK/MISO/MOSI/CS as in netlist section 14):
  Configured for 6.66 kHz accel ODR, +-16g range, high-pass filtered wake-on-motion
  interrupt (IMU_INT1) wired to STM32 EXTI9, used to detect drilling/prying vibration
  signatures independent of door/chassis switches. Firmware runs an RMS-over-window
  vibration classifier; sustained > 2g RMS for > 200ms raises a tamper event.

4.4.5 (e) USB 2.0 hub with per-port power switching and ESD

U6 CM4 USB2.0 host --> U7 USB2514B (4-port hub)
  Port1 --> U8 TPS2553 (ILIM=1.5A) --> D2 USBLC6-2SC6 --> J4 (card dispenser)
  Port2 --> U9 TPS2553                --> D3 USBLC6-2SC6 --> J5 (hybrid card reader)
  Port3 --> U10 TPS2553               --> D4 USBLC6-2SC6 --> J6 (touchscreen controller, internal)
  Port4 --> U11 TPS2553               --> D5 USBLC6-2SC6 --> J7 (external ruggedized keypad)
Each TPS2553: ILIM resistor sets 1.5A current limit, FLT# open-drain fault flag routed to
U7 hub OVERCURRENT pins for per-port fault reporting to the CM4 USB stack.
D2-D5 placed within 5mm of connector shells with short, direct GND return to chassis stitch.

4.4.6 (f) Ethernet magnetics and 4G modem power sequencing

J8 (HanRun HR911105A) integrates 1:1 magnetics + common-mode choke + bob-bias resistors
internally; CM4 RGMII PHY drives TXP/TXN/RXP/RXN differential pairs directly to J8, 100 ohm
differential trace impedance, length-matched to +-5 mils within each pair.

4G modem sequencing (J9 mini-PCIe):
  Power-up sequence: 3V3_RAIL stable -> t=0
    t=0ms    : U13 TPS22919 EN held low (modem unpowered)
    t=50ms   : STM32 asserts MODEM_EN high once 3V3 and 5V rails confirmed good
    t=50-55ms: U13 ramps MODEM_3V8_SW with controlled slew (internal soft-start)
    t=200ms  : modem asserts its own PWRGD; CM4 begins USB enumeration over J9 pins 34/36
    t>=1500ms: modem control interface (AT/QMI) available to CM4 for network registration
  This sequencing avoids inrush on the shared 5V_RAIL when CM4, touchscreen, and modem
  all power up simultaneously at mains-return.

4.5 Netlist Summary

Full text netlist: hardware/netlist.md (121 named nets across 17 functional blocks). Key nets:

Net nameSourceSinksVoltageNotes
24V_PROTQ4 (post reverse-polarity)U1, U24, J2124 VMain protected 24V bus
12V_RAILU1 outputU2, J20 fans, K112 VCard dispenser/fan bus
5V_RAILU2 outputU6, U7, U14, U185 VCM4/display/hub bus
5V_ISOU18 outputU17, U195 VIsolated bill validator supply
3V3_RAILU3 outputU16, U4, U5, U7, U26, U273.3 VLogic rail
PFAILU5 outputU16 EXTI, U6 GPIO393.3 V logicPower-fail interrupt, active low
UART_STM_TX/RXU16U63.3 V, 115200 8N1Host-RT UART link
GPIO_ARM_ENABLEU6U163.3 VHardware-arm handshake, host to RT
GPIO_HANDSHAKE_ACKU16U63.3 VRT confirms armed state to host
FIRE_GATEU20Q2 gate3.3/7.4 VGated by watchdog U23
FIRE_LOAD/FIRE_RETURNQ2/BT1J187.4 VSquib/solenoid firing loop
BATT_SYS_OUTU24Q27.4 V (2S)Independent of mains
CCTALK_BUSQ1 open collectorJ175 V (ext pull-up)Alternative validator bus
ETH_TXP/TXN/RXP/RXNU6J8LVDS-like 2.5 VppGigabit Ethernet

KiCad-style excerpt (isolation and firing circuits):

(net (code 100) (name "UART_BV_TX_ISO") (node (ref U16) (pin 45)) (node (ref U17) (pin 2)))
(net (code 101) (name "UART_BV_RX_ISO") (node (ref U16) (pin 46)) (node (ref U17) (pin 3)))
(net (code 103) (name "5V_ISO") (node (ref U18) (pin 3)) (node (ref U17) (pin 8)) (node (ref U19) (pin 16)))
(net (code 122) (name "ARM_LATCH_OUT") (node (ref K1) (pin 3)) (node (ref Q2) (pin 1)))
(net (code 123) (name "FIRE_GATE") (node (ref U20) (pin 6)) (node (ref Q2) (pin 1)))
(net (code 125) (name "FIRE_LOAD") (node (ref Q2) (pin 3)) (node (ref D6) (pin 2)) (node (ref RV2) (pin 1)) (node (ref J18) (pin 1)))

See hardware/netlist.md for the complete, block-organized listing.

4.6 PCB Layout Requirements

ParameterRequirement
Stack-up4-layer, 1.6 mm FR-4, layers: L1 Signal, L2 GND plane, L3 PWR plane, L4 Signal
Copper weight1 oz outer, 0.5 oz inner (2 oz outer optional for 24V/solenoid traces carrying > 2A)
Outline150 mm x 100 mm, matches Module 3 chassis boss pattern
Mounting holes4x M3, Ø3.2 mm plated, positioned at (7.5,7.5), (142.5,7.5), (7.5,92.5), (142.5,92.5) mm from origin
Isolation slotPhysical routed slot beneath U17/U18 isolation barrier, >= 2.0 mm creepage each side, no copper crossing except U17/U18 pins
24V section clearance>= 0.4 mm clearance / 0.5 mm creepage minimum per IPC-2221B for uncoated boards at 24V; increased to 2 mm at connector pin fields per J1/J21/J22
Thermal vias4x Ø0.3 mm filled/tented vias under each of U1, U2, U3 thermal pads, connecting to L2 GND pour as heat spreader
Ground partitioningSingle-point GND stitch between GND_ISO (bill validator isolated side) and main GND, only via U17/U18 barrier; analog tamper sensor GND star-connected near U16 pin 63
High-current traces24V/12V solenoid and motor traces sized for 3A (min 1.5mm width at 1oz, 20C rise)
Differential pairsEthernet 100 ohm diff, USB2.0 90 ohm diff, length-matched within 5 mils intra-pair, routed away from switching buck inductors (L1-L3) by >= 5mm
Connector keepout3mm keepout around J1, J21 (24V) from any low-voltage isolated circuitry
SilkscreenAll designators visible unpopulated; polarity marks on D2-D6, Q2, C-series electrolytics

4.6.1 Connector placement table

RefTypePinout summaryLocation
J1Phoenix MSTB 2.5/21=24V_RAW, 2=GNDBoard edge, near PS1 harness entry
J2/J3Hirose DF40C 100-pinCM4 SODIMM-style B2B, per Raspberry Pi CM4 datasheet pinoutCenter, under U6
J4/J5/J7USB-A1=VBUS,2=D-,3=D+,4=GND,shell=chassis GNDBoard edge, front panel access
J6JST PH 4-pin1=VBUS,2=D-,3=D+,4=GNDInternal, near touchscreen ribbon
J8RJ45 w/ magnetics1=TXP,2=TXN,3=RXP,4=NC,5=NC,6=RXN,7=NC,8=NCBoard edge
J9mini-PCIe socketPer PCIe mini-card standard; USB, SIM, power, antenna pinsCenter-rear, near J10/J11/J12
J10Nano-SIM holder1=VCC,2=CLK,3=DATA,4=RST,5=GND,6=NCAdjacent to J9
J11/J12U.FLRF center pin, shieldBoard edge, near J9
J13Hirose FH12 22-pin FPCDSI/HDMI + I2C touch + power to U14Near U6
J15Samtec FTSH 10-pinSWD: VCC,SWDIO,GND,SWCLK,GND,NC,NC,GND,NC,NRSTBoard edge, accessible for programming jig
J16Molex 6-pin1=24V,2=GND,3=TXD,4=RXD,5=NC,6=shieldBoard edge, bill validator harness
J17Molex 4-pin1=5V,2=BUS,3=GND,4=shieldBoard edge, alt. ccTalk harness
J18TE 171825-2 keyed 2-pin1=FIRE+,2=FIRE-Isolated corner, near BT1/U24
J19JST XH 2-pin1=BATT+,2=BATT-Near U24
J20JST XH 3-pin1=12V,2=RETURN,3=TACHNear U1
J21Phoenix MSTB 2.5/41=24V,2=GND,3=BV_24V,4=BV_GNDNear J16
J22JST XH 3-pin1=12V,2=GND,3=SENSENear cassette lock harness exit

4.7 GPIO Maps

4.7.1 STM32F407VGT6

PinFunctionDirectionNet
PA0 (20)Firing continuity ADCAnalog inFIRE_CONT_ADC
PA2 (23)UART2_TX to CM4Digital outUART_STM_TX
PA3 (24)UART2_RX from CM4Digital inUART_STM_RX
PA5 (5)SPI1_SCK to IMUDigital outIMU_SPI_SCK
PA6 (6)SPI1_MISO from IMUDigital inIMU_SPI_MISO
PA7 (7)SPI1_MOSI to IMUDigital outIMU_SPI_MOSI
PA4 (8)SPI1_CS to IMUDigital outIMU_SPI_CS
PA9 (9)IMU interruptDigital in, EXTI9IMU_INT1
PB6 (41)UART1_TX isolated (to bill validator)Digital outUART_BV_TX_ISO
PB7 (42)UART1_RX isolated (from bill validator)Digital inUART_BV_RX_ISO
PB8 (44)Modem enableDigital outMODEM_EN
PB9 (45)ccTalk TXDigital out (open collector via Q1)CCTALK_TX
PB10 (46)ARM latch coil driveDigital outARM_LATCH_COIL
PB12 (49)Fire enableDigital outFIRE_EN
PB13 (50)Watchdog kick (external U23)Digital outWDT_RESET_IN
PB14 (60)Chassis tamper 1Digital in, pull-upTAMPER_SW_1
PB15 (61)Chassis tamper 2Digital in, pull-upTAMPER_SW_2
PC6 (62)Chassis tamper 3Digital in, pull-upTAMPER_SW_3
PC7 (64)Chassis tamper 4Digital in, pull-upTAMPER_SW_4
PC8 (65)Beam break inputDigital inBEAM_BREAK_SIG
PC9 (66)Cassette door switchDigital in, pull-upDOOR_SW
PC0 (34)Power-fail interrupt / SWDIO sharedDigital in, EXTIPFAIL / SWDIO
PC1 (35)Host arm-enable inputDigital inGPIO_ARM_ENABLE
PC2 (36)Host handshake ack outputDigital outGPIO_HANDSHAKE_ACK
PC3 (37)SWCLKDebugSWCLK
PB0 (48)(spare, reserved future dye-pack v2)Digital outn/c
PB1 (47)ccTalk RX / bus senseDigital inCCTALK_BUS
PC12/PC13LSE 32.768kHzAnalogY2
PH0/PH1HSE 8MHzAnalogY1
PC14 (14)NRSTResetNRST
PB2 (67)Fan PWMDigital out (PWM)FAN_PWM
PC5/PC4 (51/52)I2C1 SCL/SDAI2CSCL_RTC/TEMP_SCL, SDA_RTC/TEMP_SDA

4.7.2 CM4 (Raspberry Pi Compute Module 4) GPIO map

GPIOFunctionDirectionNet
GPIO14 (TXD0)UART to STM32Digital outUART_STM_RX (STM32 side label)
GPIO15 (RXD0)UART from STM32Digital inUART_STM_TX (STM32 side label)
GPIO23Arm-enable handshake outputDigital outGPIO_ARM_ENABLE
GPIO24Handshake ack inputDigital inGPIO_HANDSHAKE_ACK
GPIO25PFAIL interrupt inputDigital in, edge-triggeredPFAIL
GPIO2/GPIO3 (I2C1)Touch controller / RTC shared busI2CGT911 / DS3231
GPIO4Modem power-good senseDigital inderived from MODEM_3V8_SW
USB2.0 hostHub, card dispenser, reader, keypadUSBsee 4.4.5
PCIe/USB (CM4 SODIMM)4G modem interfaceUSB over mini-PCIeJ9
DSI0Touchscreen displayDiff pairsJ13
RGMIIGigabit Ethernet PHY-integratedDiff pairsJ8

4.8 EMC and Safety Considerations

TopicRequirement
Applicable standardsUL 62368-1 (successor to UL 60950-1) for ITE/AV safety; UL 60950-1 legacy references retained for transition-period certification bodies
Isolation classBill validator isolated interface (U17/U18) provides basic insulation, 2.5 kV working isolation rating on U17, reinforced by 2 mm PCB creepage slot
FusingF1 (5A, Littelfuse 0453005.MRL) on 24V input per UL248-14 recognized fuse series; F2 (3A) on battery path
Earth bondingChassis GND stitched to enclosure earth stud via dedicated 14 AWG bonding strap (< 0.1 ohm resistance), separate from signal GND pours; verified per bonding-resistance test in 4.9
ESDUSBLC6-2SC6 (D2-D5) on all externally accessible USB lines; contact discharge +/-8kV, air discharge +/-15kV per IEC 61000-4-2 target
SurgeRV1 on 24V input rated for IEC 61000-4-5 Class 3 (2kV line-line) transients from field wiring
Radiated emissionsBuck converter switching frequencies (U1 400kHz-equivalent LMR33630 fixed, U2 500kHz TPS54560, U3 3MHz TPS62133) selected to spread harmonics away from FM band; ground plane L2 continuous under all switchers
Conducted immunityCommon-mode choke stage recommended at PS1 input harness entry (ferrite bead + Y-cap, not shown as populated designator, footprint reserved FL1)
Fire enclosureDye-pack/squib firing section physically separated by slotted PCB boundary and conformal-coated after assembly to prevent moisture-induced false fire
Battery safetyBT1 2S 18650 pack managed by U24 BQ25792 with hardware overvoltage/overcurrent/thermal cutoffs independent of firmware

4.9 Bring-Up Test Procedure

StepTest pointExpected valueCondition
1TP1 (24V_PROT)23.5-24.5 V DCPS1 connected, no load beyond quiescent
2TP2 (12V_RAIL, U1 output)11.8-12.2 V DC24V_PROT present, U1 enabled
3TP3 (5V_RAIL, U2 output)4.9-5.1 V DC12V_RAIL present
4TP4 (3V3_RAIL, U3 output)3.24-3.36 V DC5V_RAIL present
5TP5 (5V_ISO, U18 output)4.75-5.25 V DC5V_RAIL present, isolated side floating from main GND
6TP6 (PFAIL)Logic high (3.3V) in normal operation, transitions low within 10ms of 24V removalToggle PS1 output
7TP7 (U16 pin 14, NRST)3.3 V steady after reset releasePower-on reset complete
8TP8 (Y1 oscillator, U16 pin OSC_IN)8 MHz sine, ~1.2 VppSTM32 running
9TP9 (UART_STM_TX at U6 GPIO15)3.3V logic UART traffic at 115200 8N1, idle highSTM32 heartbeat message observed on CM4 console
10TP10 (BATT_SYS_OUT)6.0-8.4 V DC depending on charge stateBT1 installed, U24 charging or float
11TP11 (ARM_LATCH_COIL)0V normally, 3.3-5V pulse when STM32 commands ARM with SW1 key presentSW1 turned + firmware arm command issued in test mode (fire load disconnected)
12TP12 (FIRE_GATE)Q2 OFF (gate at source potential) unless FIRE_EN and watchdog both healthyConfirm Q2 stays off with FIRE_EN de-asserted, even with ARM latched
13TP13 (FIRE_CONT_ADC)ADC reading corresponding to 0.8-3.0 ohm bridge (mock resistor load in test jig)1mA test current applied, mock squib resistor installed
14TP14 (12V_RAIL fan output, J20 pin1)11.8-12.2 V DC, PWM at FAN_PWM duty per firmware thermal curveThermal test, U27 forced to elevated reading
15TP15 (USB_P1_PWR at J4 pin1)4.75-5.25 V DC, current limited at 1.5A by U8USB load test with card dispenser connected
16TP16 (ETH_TXP/TXN at J8)Valid 1000BASE-T link, verified via CM4 ethtool link-up statusEthernet cable connected to test switch
17Earth bond resistance< 0.1 ohm between chassis stud and enclosure earth pointMicro-ohmmeter, per UL 62368-1 bonding test
18Hi-pot (isolation barrier)Withstand 1500 VAC for 60s, leakage < 1mAApplied across isolation slot beneath U17/U18, all other circuits disconnected

Test sign-off requires all 18 steps passed and logged with unit serial number before the carrier board is released to final assembly.