EJ20 Engine

Technical Library › Engine Information › SubaruUpdated Sep 2026

The turbo EJ20 went through a lot of changes across the WRX years, and most wiring mistakes we see come from mixing up which version is actually in the car. This guide sorts the variants out, then walks through every sensor and actuator you'll connect to a Haltech ECU.

Start by identifying your EJ20

This guide covers the turbocharged EJ20 as fitted to the WRX. Subaru changed trigger wheels, coils, idle control and cam hardware several times over the years, so before you order parts or start pinning connectors, work out exactly which engine and model year you're dealing with. Swapped engines are common in these cars, so check the hardware on the engine rather than trusting the chassis code alone.

Basic specEJ20 turbo
LayoutFlat four (boxer), horizontally opposed
Capacity1994 cc (121.7 ci)
Firing order1-3-2-4
Cylinder numberingCylinders 1 and 3 on the right bank, 2 and 4 on the left. Cylinder 1 is the front right one as seen from the driver's seat

Variant cheat sheet

Engine codeWhat sets it apart
EJ20G8.0:1 compression, direct fire ignition, three-pin idle air valve
EJ20KWaste spark ignition. Regular versions have cast pistons, the STI versions got forged ones
EJ205US-market engine from 2001 to 2006, 9.0:1 compression, direct fire ignition
EJ2078.0:1 compression, top-feed injectors. Early Australian and Japanese 1999-2000 WRX versions have a stepper idle motor on the throttle body
EJ207 v7Adds AVCS variable intake cams, a two-pin idle valve and a single scroll turbo
EJ207 v8Drops the tumble generator valves (TGVs) and uses a twin scroll turbo

Cars from 2006 onward also run a CAN network linking the dash, ABS and body control. The Haltech Elite range supports this, which keeps factory gauges and systems alive after the swap.

Crank and cam triggers

Every EJ20 in this family uses magnetic reluctor sensors for crank and cam position, but the tooth patterns come in two main flavors.

  • EJ20G and EJ20K: the crank wheel has six teeth, and the cam signal comes from seven teeth on the back of the cylinder 2 intake cam pulley.
  • EJ207: the crank wheel is based on 36 teeth with several gaps. On one side there's a single gap of two missing teeth; directly opposite are two gaps of two missing teeth with one tooth between them. You'll find the same pattern on some Ford, Mazda and Suzuki engines. Early EJ207 cam wheels have two teeth 90 degrees apart, later ones have three, still at 90 degree spacing.

The crank sensor sits at the front of the engine near the crank pulley. The cam sensor is also at the front, tucked behind the cylinder 2 intake cam gear, and the same part is used across all models. Wiring is identical for both sensors apart from which shielded cable you use:

Sensor pinSignalCrank sensor goes toCam sensor goes to
1Positive side of the reluctorYellow wire, Trigger 4-coreYellow wire, Home 4-core
2Negative side of the reluctorGreen wire, Trigger 4-coreGreen wire, Home 4-core

The trigger settings in the software differ between the EJ20G/EJ20K layout and the EJ207 layout. Haltech's configuration screenshots for both are something we can send you, and we'd rather check your settings against a real sync test than have you guess. See how engine trigger systems work if reluctor signals are new to you.

Ignition

The ignition hardware is where the variants differ most:

  • Early EJ20G: individual coils on each plug, fired by an external four-channel igniter module. Each coil has a yellow wire for switched 12V; the other wire runs to the igniter. If the factory module is missing or tired, a Haltech HPI4 igniter does the same job.
  • EJ20K: waste spark. Two dual-post coils are built into one assembly and driven by an external two-channel igniter. Several versions of this coil exist, but they all work the same way.
  • EJ205 and EJ207 with coil-on-plug: each coil has its own built-in igniter, so it can be driven straight from the ECU's ignition outputs.

EJ20K waste spark wiring

ConnectionWire it like this
Coil pin 2Switched 12V
Coil pin 1 (cylinders 1 and 2)Igniter pin 5
Coil pin 3 (cylinders 3 and 4)Igniter pin 6
Igniter pins 1 and 2Haltech Ignition Outputs 1 and 2
Igniter pin 3Ground at the cylinder head
Igniter pin 4Unused

Smart coil wiring (EJ205 / EJ207)

With pin 1 being the one closest to the locking tab: pin 1 takes the ECU ignition output, pin 2 grounds to the cylinder head, and pin 3 is switched 12V. Dwell values for each coil type were published by Haltech as charts. Ask us and we'll pass on the right figures for your coils.

Throttle, MAP and AVCS

All of these engines use a cable throttle with a three-wire position sensor, but the pin order changed, which catches people out:

FunctionEJ20G / EJ20K pinEJ207 pin
5V supply31
Signal ground12
Position signal (to an AVI)23

The factory MAP sensor lives on the right side of the engine bay near the strut tower. Subaru only used it for boost control, and it can't read the full vacuum range the engine produces, so we don't tune off it. Run a vacuum line from the intake manifold to the MAP sensor built into your Haltech ECU, or for higher boost fit an external sensor such as the 5 bar TI MAP sensor on a spare AVI. If you do want to read the EJ207 factory sensor, pin 1 is signal, pin 2 is ground and pin 3 is the 5V feed.

AVCS (Subaru's variable cam timing) arrived on the late-2002 EJ207, on the intake cams only. Those engines keep the normal crank and cam sensors and add one extra reluctor sensor per intake cam, plus a duty-controlled solenoid on each cam actuator. Wire each extra cam sensor's positive pin to a spare SPI and its negative pin to signal ground. Each solenoid gets switched 12V on pin 1 and its pin 2 goes to any spare output that isn't an ignition output.

Idle control by model year

  • MY93-97 (GC8A to GC8E, EJ20G): a three-pin valve on the intake manifold. Pin B is switched 12V, and pins A (open) and C (close) each go to a spare output. Set it up as a BAC 3-wire Bi-Directional valve. The base airflow can be adjusted by loosening the Phillips screws and turning the plastic section of the valve.
  • MY99-00 (GC8F to GC8G): a stepper motor on the throttle body. This needs an Elite 1000 or larger. The Elite 550, 750 and 950 can't drive it. Pins 2 and 5 take switched 12V; pins 6, 4, 1 and 3 go to Stepper outputs 1, 2, 3 and 4 respectively. Use 200 steps at a speed of 80, and set the drive type to Low Side when the 12V feed is connected, or Both when it isn't. The stepper output guide covers the ECU side.
  • MY01-05 (GD, EJ207): a three-pin valve on the throttle body, but only one wire goes to the ECU. Pin 1 is the signal to a spare output, pin 2 is switched 12V and pin 3 grounds to the head. Configure it as BAC 2-wire.

Temperature, knock, MAF and speed sensors

Coolant temperature: the EJ20G and earlier engines use an ordinary two-wire sensor. The EJ20K sensor is odd: it has three pins, takes a 5V feed on pin 1, grounds through the block, and outputs two separate signals. Pin 2 is the one the ECU needs, on any spare AVI; pin 3 feeds the dash gauge.

Air temperature: early cars have no intake air sensor, and later ones build it into the MAF. That location reads the air temperature where the factory ECU measured load, not where a MAP-based Haltech tune needs it. We fit a separate sensor such as the Haltech air temp sensor as close to the plenum as practical. These sensors aren't polarity sensitive: one pin to an AVI with its pull-up enabled (or add an external 1k pull-up resistor to 5V), the other to signal ground.

Knock: every version has a non-resonant donut knock sensor, which is well suited to knock monitoring with a Haltech. Pin 1 goes to the knock input and pin 2 to signal ground; the sensor body grounds through the block.

MAF: most Haltech installs delete it, but it can be used. The EJ20G/EJ20K three-pin unit has signal on pin 1 (to an AVI), signal ground on pin 2 and 12V on pin 3. The EJ207 five-pin unit has switched 12V on pin 1, MAF ground on pin 2, MAF signal on pin 3, the air temp signal on pin 4 (to an AVI with pull-up) and the air temp ground on pin 5.

Vehicle speed: a three-wire Hall effect sensor. Grey/yellow is signal, grey/white is signal ground and grey/black is 12V. A calibration of about 2500 pulses per km (roughly 4,020 per mile) gets you close; fine-tune it against GPS.

Oxygen sensors: where most WRX installs go wrong

The EJ20G and EJ20K have a narrowband sensor at the top of the downpipe. It's fine for idle and cruise, useless for tuning under load, and the heaters are known to fail, so plenty of cars already have a dead one.

The EJ207 moved to a limited-range four-wire wideband mounted in the exhaust manifold, ahead of the turbo. Subaru put it there for faster response and corrected the reading with a predicted exhaust back-pressure model. On a modified engine that model no longer matches reality, so the reading can't be trusted for tuning.

Don't reuse the pre-turbo bung

On EJ207 engines, never screw a Haltech wideband sensor into the factory pre-turbo location. It will read wrong and can kill the sensor or lead you into a lean tune. Weld the bung supplied with the kit into the downpipe after the turbo instead.

We recommend a Haltech WB1 wideband kit on every EJ20 build. On the earlier engines its LSU 4.9 sensor can replace the factory sensor in the downpipe. Access is from under the car, and a 22 mm socket or wrench does the job.

Injectors, the factory ECU and base maps

Flow rates are measured with the injector held fully open, and dead time accounts for the delay while the injector opens and closes. If your fuel pressure isn't referenced to manifold pressure, the flow needs to be mapped against manifold pressure too. Haltech's base maps for these engines include flow and dead time data for the factory injectors, so you don't need to find it yourself.

The factory ECU is in the passenger footwell, under the carpet near the firewall. Remove the kick panel, peel back the carpet and undo the 10 mm bolts on the sheet metal cover.

Base maps were built around Haltech's Elite plug-in adaptor harnesses, such as the Elite 2500 GDB WRX MY01-05 plug-in kit. Import the map into your ECU rather than opening it as a file; base map basics explains why. Owners of the later engine should read our EJ25 engine guide, and the EZ30 guide covers the six-cylinder.

EJ20 FAQ

Can I use the factory Subaru MAP sensor with a Haltech?

It will work electrically, but it can't read the full vacuum range, so we don't recommend tuning off it. Use the ECU's built-in sensor or an external one sized for your boost.

Which Elite runs the MY99-00 stepper idle valve?

You need an Elite 1000 or larger. The Elite 550, 750 and 950 don't support it.

Where should the wideband go on a WRX?

After the turbo, in the downpipe. Never in the EJ207's pre-turbo location.

Not sure which version you have, or want us to check your wiring plan? Book a free 30-minute consultation.