Module 4 — Electrical Schematics & Custom PCB Design
| Field | Value |
|---|
| Document ID | MR-HW-ELEC-004 |
| Revision | A |
| Date | 2026-09-13 |
| Owner | Principal Electrical Engineer, Money Roll Hardware Team |
| Status | Released 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
| Rail | Source | Nominal V | Max current | Loads | Margin |
|---|
| 24V_PROT | PS1 via F1/RV1/Q4 | 24.0 V | 6.5 A | U1, J21 (bill validator solenoids 1.5 A), U24 charger 1 A, K1 coil 80 mA | 25% |
| 12V_RAIL | U1 LMR33630 | 12.0 V | 3.0 A | Card dispenser motor 1.8 A, 2x fans 0.3 A ea, U2 input | 30% |
| 5V_RAIL | U2 TPS54560 | 5.0 V | 5.0 A | CM4 (2.5 A peak w/ USB loads), U14 LCD (1.2 A), U7 hub self 0.1 A | 20% |
| 5V_ISO | U18 B0505S | 5.0 V | 0.3 A | U17 isolator, U19 RS-232 driver, bill validator opto side | 40% |
| 3V3_RAIL | U3 TPS62133 | 3.3 V | 3.0 A | U16 STM32 (250 mA), U4, U5, U7 logic, U26, U27, U22 | 60% |
| USB_Px_PWR | U8-U11 TPS2553 | 5.0 V | 1.5 A each | J4-J7 downstream USB peripherals | current-limited, foldback at 1.5 A |
| BATT_SYS_OUT | BT1 via U24 | 7.4 V (2S) | 2.0 A pulse | Q2 FIRE load (squib/solenoid), always live even if mains removed | firing energy reserve >= 10 firings |
4.3.3 Protection
| Function | Component | Notes |
|---|
| Fuse, 24V input | F1, Littelfuse 0453005.MRL, 5 A | Replaceable, in-line with J1 |
| Fuse, battery | F2, Littelfuse 0453003.MRL, 3 A | Protects BT1/U24 path |
| Reverse polarity | Q4, SUM70020E-GE3 P-MOSFET ideal diode | < 0.3 V drop at 3 A, avoids linear diode dissipation |
| Surge/TVS, 24V | RV1, Littelfuse V26MLA0805H | Clamps line transients from solenoid switching |
| Inrush | PS1 internal soft-start; C1/C2 bulk caps sized to limit dV/dt at U1/U2 inputs | Bulk input capacitance 220 uF total at 24V_PROT |
| Solenoid/coil flyback | D6 SS54 Schottky across K1 and firing loads | Prevents inductive kick on Q2 drain |
| Firing line TVS | RV2 SMBJ33A | Clamps 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 name | Source | Sinks | Voltage | Notes |
|---|
| 24V_PROT | Q4 (post reverse-polarity) | U1, U24, J21 | 24 V | Main protected 24V bus |
| 12V_RAIL | U1 output | U2, J20 fans, K1 | 12 V | Card dispenser/fan bus |
| 5V_RAIL | U2 output | U6, U7, U14, U18 | 5 V | CM4/display/hub bus |
| 5V_ISO | U18 output | U17, U19 | 5 V | Isolated bill validator supply |
| 3V3_RAIL | U3 output | U16, U4, U5, U7, U26, U27 | 3.3 V | Logic rail |
| PFAIL | U5 output | U16 EXTI, U6 GPIO39 | 3.3 V logic | Power-fail interrupt, active low |
| UART_STM_TX/RX | U16 | U6 | 3.3 V, 115200 8N1 | Host-RT UART link |
| GPIO_ARM_ENABLE | U6 | U16 | 3.3 V | Hardware-arm handshake, host to RT |
| GPIO_HANDSHAKE_ACK | U16 | U6 | 3.3 V | RT confirms armed state to host |
| FIRE_GATE | U20 | Q2 gate | 3.3/7.4 V | Gated by watchdog U23 |
| FIRE_LOAD/FIRE_RETURN | Q2/BT1 | J18 | 7.4 V | Squib/solenoid firing loop |
| BATT_SYS_OUT | U24 | Q2 | 7.4 V (2S) | Independent of mains |
| CCTALK_BUS | Q1 open collector | J17 | 5 V (ext pull-up) | Alternative validator bus |
| ETH_TXP/TXN/RXP/RXN | U6 | J8 | LVDS-like 2.5 Vpp | Gigabit 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
| Parameter | Requirement |
|---|
| Stack-up | 4-layer, 1.6 mm FR-4, layers: L1 Signal, L2 GND plane, L3 PWR plane, L4 Signal |
| Copper weight | 1 oz outer, 0.5 oz inner (2 oz outer optional for 24V/solenoid traces carrying > 2A) |
| Outline | 150 mm x 100 mm, matches Module 3 chassis boss pattern |
| Mounting holes | 4x 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 slot | Physical 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 vias | 4x Ø0.3 mm filled/tented vias under each of U1, U2, U3 thermal pads, connecting to L2 GND pour as heat spreader |
| Ground partitioning | Single-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 traces | 24V/12V solenoid and motor traces sized for 3A (min 1.5mm width at 1oz, 20C rise) |
| Differential pairs | Ethernet 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 keepout | 3mm keepout around J1, J21 (24V) from any low-voltage isolated circuitry |
| Silkscreen | All designators visible unpopulated; polarity marks on D2-D6, Q2, C-series electrolytics |
4.6.1 Connector placement table
| Ref | Type | Pinout summary | Location |
|---|
| J1 | Phoenix MSTB 2.5/2 | 1=24V_RAW, 2=GND | Board edge, near PS1 harness entry |
| J2/J3 | Hirose DF40C 100-pin | CM4 SODIMM-style B2B, per Raspberry Pi CM4 datasheet pinout | Center, under U6 |
| J4/J5/J7 | USB-A | 1=VBUS,2=D-,3=D+,4=GND,shell=chassis GND | Board edge, front panel access |
| J6 | JST PH 4-pin | 1=VBUS,2=D-,3=D+,4=GND | Internal, near touchscreen ribbon |
| J8 | RJ45 w/ magnetics | 1=TXP,2=TXN,3=RXP,4=NC,5=NC,6=RXN,7=NC,8=NC | Board edge |
| J9 | mini-PCIe socket | Per PCIe mini-card standard; USB, SIM, power, antenna pins | Center-rear, near J10/J11/J12 |
| J10 | Nano-SIM holder | 1=VCC,2=CLK,3=DATA,4=RST,5=GND,6=NC | Adjacent to J9 |
| J11/J12 | U.FL | RF center pin, shield | Board edge, near J9 |
| J13 | Hirose FH12 22-pin FPC | DSI/HDMI + I2C touch + power to U14 | Near U6 |
| J15 | Samtec FTSH 10-pin | SWD: VCC,SWDIO,GND,SWCLK,GND,NC,NC,GND,NC,NRST | Board edge, accessible for programming jig |
| J16 | Molex 6-pin | 1=24V,2=GND,3=TXD,4=RXD,5=NC,6=shield | Board edge, bill validator harness |
| J17 | Molex 4-pin | 1=5V,2=BUS,3=GND,4=shield | Board edge, alt. ccTalk harness |
| J18 | TE 171825-2 keyed 2-pin | 1=FIRE+,2=FIRE- | Isolated corner, near BT1/U24 |
| J19 | JST XH 2-pin | 1=BATT+,2=BATT- | Near U24 |
| J20 | JST XH 3-pin | 1=12V,2=RETURN,3=TACH | Near U1 |
| J21 | Phoenix MSTB 2.5/4 | 1=24V,2=GND,3=BV_24V,4=BV_GND | Near J16 |
| J22 | JST XH 3-pin | 1=12V,2=GND,3=SENSE | Near cassette lock harness exit |
4.7 GPIO Maps
4.7.1 STM32F407VGT6
| Pin | Function | Direction | Net |
|---|
| PA0 (20) | Firing continuity ADC | Analog in | FIRE_CONT_ADC |
| PA2 (23) | UART2_TX to CM4 | Digital out | UART_STM_TX |
| PA3 (24) | UART2_RX from CM4 | Digital in | UART_STM_RX |
| PA5 (5) | SPI1_SCK to IMU | Digital out | IMU_SPI_SCK |
| PA6 (6) | SPI1_MISO from IMU | Digital in | IMU_SPI_MISO |
| PA7 (7) | SPI1_MOSI to IMU | Digital out | IMU_SPI_MOSI |
| PA4 (8) | SPI1_CS to IMU | Digital out | IMU_SPI_CS |
| PA9 (9) | IMU interrupt | Digital in, EXTI9 | IMU_INT1 |
| PB6 (41) | UART1_TX isolated (to bill validator) | Digital out | UART_BV_TX_ISO |
| PB7 (42) | UART1_RX isolated (from bill validator) | Digital in | UART_BV_RX_ISO |
| PB8 (44) | Modem enable | Digital out | MODEM_EN |
| PB9 (45) | ccTalk TX | Digital out (open collector via Q1) | CCTALK_TX |
| PB10 (46) | ARM latch coil drive | Digital out | ARM_LATCH_COIL |
| PB12 (49) | Fire enable | Digital out | FIRE_EN |
| PB13 (50) | Watchdog kick (external U23) | Digital out | WDT_RESET_IN |
| PB14 (60) | Chassis tamper 1 | Digital in, pull-up | TAMPER_SW_1 |
| PB15 (61) | Chassis tamper 2 | Digital in, pull-up | TAMPER_SW_2 |
| PC6 (62) | Chassis tamper 3 | Digital in, pull-up | TAMPER_SW_3 |
| PC7 (64) | Chassis tamper 4 | Digital in, pull-up | TAMPER_SW_4 |
| PC8 (65) | Beam break input | Digital in | BEAM_BREAK_SIG |
| PC9 (66) | Cassette door switch | Digital in, pull-up | DOOR_SW |
| PC0 (34) | Power-fail interrupt / SWDIO shared | Digital in, EXTI | PFAIL / SWDIO |
| PC1 (35) | Host arm-enable input | Digital in | GPIO_ARM_ENABLE |
| PC2 (36) | Host handshake ack output | Digital out | GPIO_HANDSHAKE_ACK |
| PC3 (37) | SWCLK | Debug | SWCLK |
| PB0 (48) | (spare, reserved future dye-pack v2) | Digital out | n/c |
| PB1 (47) | ccTalk RX / bus sense | Digital in | CCTALK_BUS |
| PC12/PC13 | LSE 32.768kHz | Analog | Y2 |
| PH0/PH1 | HSE 8MHz | Analog | Y1 |
| PC14 (14) | NRST | Reset | NRST |
| PB2 (67) | Fan PWM | Digital out (PWM) | FAN_PWM |
| PC5/PC4 (51/52) | I2C1 SCL/SDA | I2C | SCL_RTC/TEMP_SCL, SDA_RTC/TEMP_SDA |
4.7.2 CM4 (Raspberry Pi Compute Module 4) GPIO map
| GPIO | Function | Direction | Net |
|---|
| GPIO14 (TXD0) | UART to STM32 | Digital out | UART_STM_RX (STM32 side label) |
| GPIO15 (RXD0) | UART from STM32 | Digital in | UART_STM_TX (STM32 side label) |
| GPIO23 | Arm-enable handshake output | Digital out | GPIO_ARM_ENABLE |
| GPIO24 | Handshake ack input | Digital in | GPIO_HANDSHAKE_ACK |
| GPIO25 | PFAIL interrupt input | Digital in, edge-triggered | PFAIL |
| GPIO2/GPIO3 (I2C1) | Touch controller / RTC shared bus | I2C | GT911 / DS3231 |
| GPIO4 | Modem power-good sense | Digital in | derived from MODEM_3V8_SW |
| USB2.0 host | Hub, card dispenser, reader, keypad | USB | see 4.4.5 |
| PCIe/USB (CM4 SODIMM) | 4G modem interface | USB over mini-PCIe | J9 |
| DSI0 | Touchscreen display | Diff pairs | J13 |
| RGMII | Gigabit Ethernet PHY-integrated | Diff pairs | J8 |
4.8 EMC and Safety Considerations
| Topic | Requirement |
|---|
| Applicable standards | UL 62368-1 (successor to UL 60950-1) for ITE/AV safety; UL 60950-1 legacy references retained for transition-period certification bodies |
| Isolation class | Bill validator isolated interface (U17/U18) provides basic insulation, 2.5 kV working isolation rating on U17, reinforced by 2 mm PCB creepage slot |
| Fusing | F1 (5A, Littelfuse 0453005.MRL) on 24V input per UL248-14 recognized fuse series; F2 (3A) on battery path |
| Earth bonding | Chassis 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 |
| ESD | USBLC6-2SC6 (D2-D5) on all externally accessible USB lines; contact discharge +/-8kV, air discharge +/-15kV per IEC 61000-4-2 target |
| Surge | RV1 on 24V input rated for IEC 61000-4-5 Class 3 (2kV line-line) transients from field wiring |
| Radiated emissions | Buck 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 immunity | Common-mode choke stage recommended at PS1 input harness entry (ferrite bead + Y-cap, not shown as populated designator, footprint reserved FL1) |
| Fire enclosure | Dye-pack/squib firing section physically separated by slotted PCB boundary and conformal-coated after assembly to prevent moisture-induced false fire |
| Battery safety | BT1 2S 18650 pack managed by U24 BQ25792 with hardware overvoltage/overcurrent/thermal cutoffs independent of firmware |
4.9 Bring-Up Test Procedure
| Step | Test point | Expected value | Condition |
|---|
| 1 | TP1 (24V_PROT) | 23.5-24.5 V DC | PS1 connected, no load beyond quiescent |
| 2 | TP2 (12V_RAIL, U1 output) | 11.8-12.2 V DC | 24V_PROT present, U1 enabled |
| 3 | TP3 (5V_RAIL, U2 output) | 4.9-5.1 V DC | 12V_RAIL present |
| 4 | TP4 (3V3_RAIL, U3 output) | 3.24-3.36 V DC | 5V_RAIL present |
| 5 | TP5 (5V_ISO, U18 output) | 4.75-5.25 V DC | 5V_RAIL present, isolated side floating from main GND |
| 6 | TP6 (PFAIL) | Logic high (3.3V) in normal operation, transitions low within 10ms of 24V removal | Toggle PS1 output |
| 7 | TP7 (U16 pin 14, NRST) | 3.3 V steady after reset release | Power-on reset complete |
| 8 | TP8 (Y1 oscillator, U16 pin OSC_IN) | 8 MHz sine, ~1.2 Vpp | STM32 running |
| 9 | TP9 (UART_STM_TX at U6 GPIO15) | 3.3V logic UART traffic at 115200 8N1, idle high | STM32 heartbeat message observed on CM4 console |
| 10 | TP10 (BATT_SYS_OUT) | 6.0-8.4 V DC depending on charge state | BT1 installed, U24 charging or float |
| 11 | TP11 (ARM_LATCH_COIL) | 0V normally, 3.3-5V pulse when STM32 commands ARM with SW1 key present | SW1 turned + firmware arm command issued in test mode (fire load disconnected) |
| 12 | TP12 (FIRE_GATE) | Q2 OFF (gate at source potential) unless FIRE_EN and watchdog both healthy | Confirm Q2 stays off with FIRE_EN de-asserted, even with ARM latched |
| 13 | TP13 (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 |
| 14 | TP14 (12V_RAIL fan output, J20 pin1) | 11.8-12.2 V DC, PWM at FAN_PWM duty per firmware thermal curve | Thermal test, U27 forced to elevated reading |
| 15 | TP15 (USB_P1_PWR at J4 pin1) | 4.75-5.25 V DC, current limited at 1.5A by U8 | USB load test with card dispenser connected |
| 16 | TP16 (ETH_TXP/TXN at J8) | Valid 1000BASE-T link, verified via CM4 ethtool link-up status | Ethernet cable connected to test switch |
| 17 | Earth bond resistance | < 0.1 ohm between chassis stud and enclosure earth point | Micro-ohmmeter, per UL 62368-1 bonding test |
| 18 | Hi-pot (isolation barrier) | Withstand 1500 VAC for 60s, leakage < 1mA | Applied 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.