ECU software defines the algorithm structure — the control logic, state machines, and calculations. Calibration defines the parameter values that tune the algorithm's behaviour for a specific engine, vehicle variant, or emissions region. This separation is enforced by the A2L file and XCP protocol: engineers can modify parameter values without recompiling or reflashing the application binary.
Application Binary (Flash — fixed per software release)
┌─────────────────────────────────────────────────────┐
│ PID controller algorithm │
│ Fuel injection state machine │
│ Ignition timing computation │
│ reads → IDLE_RPM_TARGET, ign_timing[rpm][load] │
└─────────────────────────────────────────────────────┘
reads parameters from ↓
Calibration Data (RAM working page / Flash reference page)
┌─────────────────────────────────────────────────────┐
│ IDLE_RPM_TARGET = 800 (scalar) │
│ throttle_torque = [0,50,120,200,280,...] (curve) │
│ ign_timing[16×16] = {{...}} (map) │
└─────────────────────────────────────────────────────┘
↑ written live via XCP DOWNLOAD
without recompiling or reflashing software💡 Why This Matters
A powertrain ECU for a 2.0L petrol engine and a 1.5L diesel may share identical application code. Only the calibration datasets differ — different injection timing maps, different idle RPM targets, different lambda controller gains. The A2L+XCP toolchain is what makes this variant management possible.