Jessie's Cars
← Back to ECU

Engine Management · Technical Specification

Standalone Engine Management ECU

A from-scratch automotive ECU that drives fuel injectors and ignition coils directly, runs closed-loop on engine sensors, and covers 4-, 6- and 8-cylinder engines from a single board — with both USB-C and Bluetooth as full firmware-flashing paths.

Board
165.8 × 130.2 mm
Stackup
8 layers
Components
224
Nets
236
Cylinders
4 / 6 / 8
Status

In development — design complete, not yet built. The schematic and PCB are finished, fully routed and pass electrical- and design-rule checks, but no board has been fabricated, assembled, powered or run on an engine, and the bill of materials is not yet costed. Nothing here is a tested or purchasable product.

3D render of the assembled ECU board, angled view, showing the USB-C connector, main relay, MCU, and both AMPSEAL harness connectors
Rendered from the real PCB and footprint filesAngled view
3D render of the assembled ECU board, straight top-down view
165.8 × 130.2 mmTop view

At a glance

8Injector ch.
8Ignition ch.
3Crank / cam
2Wideband O₂
2Knock ch.
2CAN buses
4Throttle sensors
1Boost ch.
1EGT ch.
1Flex-fuel ch.

Engine control

Sequential injection and per-cylinder ignition, with cam phasing measured on two independent hardware capture channels — enough for a DOHC engine varying intake and exhaust timing separately.

FunctionCh.Implementation
Fuel injection8Sequential low-side drive — 2 × NXP MC33810
Ignition8Per-cylinder IGBT — 8 × ON Semi FGP3040G2, MC33810 gate drive
Crank position1Variable-reluctance, hardware input capture — MAX9924
Cam position2Independent intake / exhaust capture — 2 × MAX9924
Cam phaser control2PWM solenoid drive, flyback clamped
Overcurrent protection—Autonomous per-chip latch-off; no firmware involvement

Sensor inputs

InputCh.Front end
Manifold pressure (MAP)1RC-filtered analogue
Throttle position (TPS)1RC-filtered analogue
Intake air temp (IAT)1NTC pull-up divider
Coolant temp (CLT)1NTC pull-up divider
Oil pressure1RC-filtered analogue — enables low-pressure protection
Fuel pressure1RC-filtered analogue — enables pressure-loss protection
Battery voltage1Divider, ~25.7 V full scale — a 24 V jump-start still reads on-scale
Knock2One per bank — 2 × TI TLV2372-Q1
Wideband oxygen2One per bank, Bosch LSU 4.2 / 4.9 — 2 × Bosch CJ125 + heater drive
Exhaust gas temp (EGT)1Type-K thermocouple read directly by a differential ADC over SPI, with cold-junction compensation and linearization in firmware — Texas Instruments ADS1118-Q1
Flex-fuel (ethanol %)1Frequency/duty capture, open-collector sensor pulled to 3.3 V

Actuator outputs

Measuring cam phase is only useful if the phasers can also be driven — all six outputs are MOSFET low-side with Schottky flyback clamps.

OutputCh.Type
Cam phaser solenoids (VVT)2PWM
Idle air valve1PWM
Fuel pump relay1Switched
Tachometer1Open-drain signal, pulled to 5 V
Main power relay1Switched, gates the whole power stage
Boost control solenoid1PWM, flyback clamped — wastegate or boost-control valve

Electronic throttle control

Drive-by-wire, with the redundant sensing a safety-critical throttle needs: two independent readings on the pedal and two on the throttle body, so the firmware can cross-check for an implausible signal before trusting it.

FunctionCh.Implementation
Pedal position2Independent redundant sensors — APP1 / APP2
Throttle body position2Independent redundant sensors — TPS1 / TPS2
Motor drive1H-bridge, current-sense feedback to the MCU — NXP MC33926
Hardware disable2Independent of the PWM path — one active-high, one active-low
Scope

The board provides the redundant sensing and an independent hardware cutoff. Deciding when the two readings disagree enough to disable the motor is firmware's job — this is not a certified drive-by-wire safety system on its own.

Communications & programming

Both flashing paths are complete reflash paths, not telemetry. They share the bootloader lines through an analogue switch, so plugging in USB automatically takes priority — no firmware decision, no mode button.

InterfaceDetail
CAN2 independent buses, split termination, wakes with ignition off — 2 × NXP TJA1043T
USB-CBootloader UART plus JTAG debug — FTDI FT4232HA
Bluetooth LEFull over-the-air firmware reflash — TI CC2640R2F-Q1
Bus arbitrationUSB takes priority automatically when connected — TI SN3257-Q1
AntennaU.FL external — suits a metal enclosure
Bench debugDedicated JTAG header

Power

StageDetail
Input protectionReverse-battery and load-dump — LM74700-Q1 ideal-diode controller + 100 A MOSFET + TVS
5 V railBuck regulator, sensors and analogue — TI LMR33630-Q1
3.3 V railLDO, MCU and logic — TI TLV733P-Q1
Power stageRelay-gated, separately fused injector and ignition rails (4 × mini blade)

Harness connectors

Two 35-way TE AMPSEAL 776180-1 connectors, split by function the way a production ECU splits them. Physical layout is the connector's own real numbering — the centre row is staggered a half-pitch relative to the outer rows, not a simplification: pins run left–to–right along the top row, then the staggered middle row, then the bottom row. “Connects to” traces each signal through its real front-end IC or, where it reaches the MCU with only a passive filter in between, the real silicon pin.

PowerGroundDigital / driveAnalog / senseCommsSpare

J4 — Engine harness

35-position · 3-row · 4 mm pitch · right-angle THT · 33 of 35 cavities used · 2 spare

Pin 1 index · top-left
1VIN
2GND
3GND
4VBATT_INJ
5INJ1_LO
6INJ2_LO
7INJ3_LO
8INJ4_LO
9INJ5_LO
10INJ6_LO
11INJ7_LO
12INJ8_LO
13VBATT_IGN
14IGN1_COIL
15IGN2_COIL
16IGN3_COIL
17IGN4_COIL
18IGN5_COIL
19IGN6_COIL
20IGN7_COIL
21IGN8_COIL
22CRANK_VR_HI
23CRANK_VR_LO
24CAM_VR_HI
25CAM_VR_LO
26CAM2_VR_HI
27CAM2_VR_LO
28TPS1_SIG
29TPS2_SIG
30ETC_MOTOR_A
31ETC_MOTOR_B
32BOOST_OUT
33+5V
34—
35—
Row 1 · pins 1–12Row 2 (staggered) · pins 13–23Row 3 · pins 24–35
PinSignalDirectionConnects toNotes
1VINPower inQ1/D1/U2 reverse-battery + load-dump stageUpstream of F1 (30A automotive fuse).
2GNDGroundChassis / battery negative—
3GNDGroundChassis / battery negative—
4VBATT_INJPower outF3 fuse output (15A)Feeds MC33810 #1/#2 VPWR, upstream of the injector low-side drivers.
5INJ1_LOActuator outMC33810 #1 (U5) OUT0Sequential low-side injector drive.
6INJ2_LOActuator outMC33810 #1 (U5) OUT1—
7INJ3_LOActuator outMC33810 #1 (U5) OUT2—
8INJ4_LOActuator outMC33810 #1 (U5) OUT3—
9INJ5_LOActuator outMC33810 #2 (U6) OUT0—
10INJ6_LOActuator outMC33810 #2 (U6) OUT1—
11INJ7_LOActuator outMC33810 #2 (U6) OUT2—
12INJ8_LOActuator outMC33810 #2 (U6) OUT3—
13VBATT_IGNPower outF4 fuse output (25A)Feeds the 8 ignition IGBT collectors, separately fused from the injector rail.
14IGN1_COILActuator outQ3 IGBT collectorGate driven by MC33810 #1 GD0, real-time firing from MCU eMIOS via DIN/GIN.
15IGN2_COILActuator outQ4 IGBT collector—
16IGN3_COILActuator outQ5 IGBT collector—
17IGN4_COILActuator outQ6 IGBT collector—
18IGN5_COILActuator outQ7 IGBT collectorGate driven by MC33810 #2 GD0.
19IGN6_COILActuator outQ8 IGBT collector—
20IGN7_COILActuator outQ9 IGBT collector—
21IGN8_COILActuator outQ10 IGBT collector—
22CRANK_VR_HISensor inMAX9924 crank interface (U7)Variable-reluctance sensor pair.
23CRANK_VR_LOSensor inMAX9924 crank interface (U7)—
24CAM_VR_HISensor inMAX9924 intake-cam interface (U8)—
25CAM_VR_LOSensor inMAX9924 intake-cam interface (U8)—
26CAM2_VR_HISensor inMAX9924 exhaust-cam interface (U16)Second cam channel - independent intake/exhaust phasing on a DOHC engine.
27CAM2_VR_LOSensor inMAX9924 exhaust-cam interface (U16)—
28TPS1_SIGSensor inRC filter → MCU pin 70 (ADC0_P11_TPS1)Redundant throttle-body position sensor 1 of 2 - electronic throttle control.
29TPS2_SIGSensor inRC filter → MCU pin 71 (ADC0_P12_TPS2)Redundant throttle-body position sensor 2 of 2.
30ETC_MOTOR_AActuator outMC33926 H-bridge (U20) OUT1Throttle-body motor drive, one of two leads.
31ETC_MOTOR_BActuator outMC33926 H-bridge (U20) OUT2Throttle-body motor drive, other lead.
32BOOST_OUTActuator outQ18 MOSFET drainGate driven by MCU pin 109 (E1UC19_BOOST) - wastegate / boost-control solenoid.
33+5VPower outRegulated 5V railDedicated excitation feed for the throttle-body TPS1/TPS2 potentiometers.
34—Spare——
35—Spare——

J5 — Sensor & CAN harness

35-position · 3-row · 4 mm pitch · right-angle THT · 35 of 35 cavities used · 0 spare

Pin 1 index · top-left
1+5V
2GND
3MAP_SIG
4TPS_SIG
5IAT_ADC
6CLT_ADC
7KNOCK_SIG
8O2_UN
9O2_IP
10O2_IA
11O2_VM
12OILP_SIG
13HTR_DRAIN
14VBATT_SW
15CAN0_H
16CAN0_L
17CAN1_H
18CAN1_L
19FUELP_SIG
20KNOCK2_SIG
21O2B_UN
22O2B_VM
23O2B_IP
24O2B_IA
25HTR2_DRAIN
26VVT1_OUT
27VVT2_OUT
28IDLE_OUT
29FPUMP_OUT
30TACH_OUT
31APP1_SIG
32APP2_SIG
33EGT_TC_P
34EGT_TC_M
35FLEXFUEL_SIG_RAW
Row 1 · pins 1–12Row 2 (staggered) · pins 13–23Row 3 · pins 24–35
PinSignalDirectionConnects toNotes
1+5VPower outRegulated 5V railSensor excitation - MAP/TPS/IAT/CLT/APP1/APP2 dividers.
2GNDGroundChassis / sensor return—
3MAP_SIGSensor inRC filter → MCU pin 72 (ADC0_MAP)—
4TPS_SIGSensor inRC filter → MCU pin 75 (ADC0_TPS)Conventional single-channel throttle input - a separate, legacy signal from the redundant TPS1/TPS2 pair on J4.
5IAT_ADCSensor inNTC pull-up divider → MCU pin 76Intake air temperature.
6CLT_ADCSensor inNTC pull-up divider → MCU pin 77Coolant temperature.
7KNOCK_SIGSensor inTLV2372 op-amp (U10) → MCU pin 53Knock sensor, bank 1.
8O2_UNSensor inBosch CJ125 #1 (U9) Nernst inputWideband O2, bank A - real LSU 4.2/4.9 sensor wire.
9O2_IPSensor inBosch CJ125 #1 (U9) pump current—
10O2_IASensor inBosch CJ125 #1 (U9) trim/calibration—
11O2_VMSensor inBosch CJ125 #1 (U9) virtual ground—
12OILP_SIGSensor inRC filter → MCU pin 64 (ADC0_P5_OILP)Enables low-oil-pressure protection.
13HTR_DRAINActuator outQ11 MOSFET drainO2 bank-A heater, gate driven by MCU pin 12 (GPIO_HTR_CTRL).
14VBATT_SWPower outRelay-switched battery (K1)Common feed for every solenoid/relay driven by the *_OUT low-side pins below.
15CAN0_HCommsCAN transceiver → MCU pins 28/27FlexCAN pair 1.
16CAN0_LCommsCAN transceiver → MCU pins 28/27—
17CAN1_HCommsCAN transceiver → MCU pins 117/116FlexCAN pair 2, fully independent bus.
18CAN1_LCommsCAN transceiver → MCU pins 117/116—
19FUELP_SIGSensor inRC filter → MCU pin 65 (ADC0_P6_FUELP)Enables fuel pressure-loss protection.
20KNOCK2_SIGSensor inTLV2372 op-amp (U17) → MCU pin 66Knock sensor, bank 2.
21O2B_UNSensor inBosch CJ125 #2 (U18) Nernst inputWideband O2, bank B.
22O2B_VMSensor inBosch CJ125 #2 (U18) virtual ground—
23O2B_IPSensor inBosch CJ125 #2 (U18) pump current—
24O2B_IASensor inBosch CJ125 #2 (U18) trim/calibration—
25HTR2_DRAINActuator outQ17 MOSFET drainO2 bank-B heater, gate driven by MCU pin 88 (GPIO_HTR2_CTRL).
26VVT1_OUTActuator outMOSFET gate ← MCU pin 129 (E0UC19_VVT1)Cam phaser solenoid 1, PWM.
27VVT2_OUTActuator outMOSFET gate ← MCU pin 132 (E0UC20_VVT2)Cam phaser solenoid 2, PWM.
28IDLE_OUTActuator outMOSFET gate ← MCU pin 133 (E0UC21_IDLE)Idle-air valve, PWM.
29FPUMP_OUTActuator outRelay ← MCU pin 67 (GPIO_FPUMP)Fuel pump, switched.
30TACH_OUTActuator outQ16 MOSFET ← MCU pin 84 (E0UC25_TACH)Open-drain tachometer signal.
31APP1_SIGSensor inRC filter → MCU pin 68 (ADC0_P9_APP1)Redundant accelerator pedal position 1 of 2 - electronic throttle control.
32APP2_SIGSensor inRC filter → MCU pin 69 (ADC0_P10_APP2)Redundant accelerator pedal position 2 of 2.
33EGT_TC_PSensor inADS1118-Q1 (U19) AIN0Type-K thermocouple, positive leg.
34EGT_TC_MSensor inADS1118-Q1 (U19) AIN1Type-K thermocouple, negative leg.
35FLEXFUEL_SIG_RAWSensor inPull-up/filter → MCU pin 103 (E1UC20_FLEXFUEL)Open-collector flex-fuel sensor - frequency = ethanol %, duty cycle = fuel temp.

TPS_SIG and TPS1/TPS2 are not the same signal

J5 pin 4 (TPS_SIG) is the original single-channel throttle input from a conventional cable-actuated throttle body. J4 pins 28/29 (TPS1/TPS2) are the new, independent redundant pair for electronic throttle control. Both exist on this board; only one set applies depending on which throttle body is actually wired up.

VBATT_SW is switched, not raw battery

J5 pin 14 passes through the main relay (K1) — it is live only when the relay is energized, unlike J4 pin 1 (VIN), which is always live off the battery through the reverse-battery protection stage. Every solenoid and heater on J5 draws from this switched rail.

Injector and ignition rails are separately fused

VBATT_INJ (J4 pin 4) runs through a 15 A fuse (F3); VBATT_IGN (J4 pin 13) runs through a 25 A fuse (F4) — sized independently per the real worst-case draw of each rail, not a single shared fuse for both.

Two independent +5 V feeds

J4 pin 33 and J5 pin 1 are both regulated +5 V, but serve different sensor groups (throttle-body pots vs. the MAP/TPS/IAT/CLT/pedal dividers) — real, separate traces back to the same regulator, not a single shared harness pin.

Hardware

ItemSpecification
MicrocontrollerNXP MPC5606B, 144-LQFP, Power Architecture — 1 MB flash, 80 KB RAM, eMIOS timer coprocessor
Timer capacity25 of 64 eMIOS channels used — injection, ignition, crank, cam, VVT, idle, tach, boost, flex-fuel, throttle drive
PCB165.8 × 130.2 mm, 8 layers, 4 signal layers each against a reference plane
Planes3 × ground, 1 × 3.3 V
QualificationAutomotive-rated (AEC-Q100 / Q101 / Q200) throughout
Spare capacity2 harness cavities, 59 microcontroller pins, 39 timer channels

Known limitations

Recorded openly rather than discovered later.

  • Before fabNo costed bill of materials. Parts are chosen and datasheet-verified, but not yet priced or checked for distributor stock.
  • By choiceNo per-channel diagnostics on the actuator outputs. Discrete MOSFETs were chosen over an integrated driver to avoid introducing an unverified part; the trade is no open-load or short reporting on those six outputs.
  • By choice10- and 12-cylinder engines are not supported. The microcontroller has ample headroom, but a third driver chip and four more IGBTs would consume the remaining engine-harness cavities for a small slice of the market.
  • UnverifiedTwo Bluetooth details need confirming at bring-up. The radio's UART and boot pin assignments, and the antenna matching values.
  • UnverifiedITS-90 Type-K linearization is not yet implemented in firmware. The EGT front end (ADS1118-Q1) reads the raw thermocouple voltage correctly, but converting that to a temperature currently uses only two anchor points from the datasheet rather than the full ITS-90 piecewise polynomial — accurate near those points, drifting off elsewhere in the range.
  • By designThrottle plausibility checking is a firmware responsibility. The board provides redundant pedal and throttle-body sensing plus an independent hardware motor cutoff; deciding when the two readings disagree enough to act on it is not implemented in hardware.