Engine at a glance
| Spec | Value |
|---|---|
| Layout | Inline 4 cylinder |
| Displacement | 109.6 ci (1795 cc) |
| Firing order | 1-3-4-2 |
| Compression | 11.5:1 |
| Ignition | Coil-on-plug with built-in igniters |
| Valve control | VVT-i intake cam phasing plus switched VVTL lift |
Toyota built the 2ZZ-GE as the performance version of the 1ZZ-FE economy engine. The big changes were a bump in compression from 10.0:1 to 11.5:1 and the addition of a two-stage valve lift system, which is what gives the engine its distinctive top-end rush.
Crank and cam trigger
The 2ZZ uses separate crank and cam sensors, and both are reluctor (VR) type. The crank wheel is built into the crank timing gear and uses Toyota's usual VVT-i pattern of 36 teeth with two missing (36-2). The cam has a 3-tooth wheel, again the same arrangement Toyota used across its VVT-i engines, so if you've set up a 2JZ VVT-i the logic will feel familiar.
Trigger wiring
| Haltech wire | Signal | Crank sensor (wire color) | Cam sensor (pin) |
|---|---|---|---|
| Yellow core of the trigger or home cable | Positive | Red | Pin 1 |
| Green core of the trigger or home cable | Negative | White | Pin 2 |
The crank sensor goes to the Haltech trigger cable and the cam sensor goes to the home cable, both 4-core shielded leads.
Use the shielded trigger and home cables, and keep the shield grounded at the ECU end only. If a reluctor sensor is wired backward, the ECU sees the wrong edge of each tooth, which usually shows up as trigger errors or timing that drifts with RPM, so double-check polarity before you chase anything else.
The trigger configuration screenshots for this engine are worth having in front of you when you set it up. Need this diagram? Ask us and we'll send it over with advice for your build. As always, confirm the TDC offset with a timing light before you tune; see setting your TDC offset angle.
Ignition coils
Each cylinder has its own coil, and the igniter is inside the coil, so the ECU's ignition outputs can drive them directly with no external ignition module.
| Coil pin | Function | Connect to |
|---|---|---|
| 1 | 12V+ switched | Switched 12V supply |
| 2 | IGF (igniter fault feedback) | Not used by Haltech |
| 3 | Trigger signal from ECU | Ignition output |
| 4 | Ground | Cylinder head |
A dwell table for these coils is available. Need this diagram? Ask us and we'll send it over with advice for your build. Too much dwell overheats coil-on-plug units, so if you're unsure, start on the conservative side and see our dwell time article.
Throttle position sensor
The 2ZZ uses a cable throttle with a conventional three-wire TPS.
| TPS pin | Function | Haltech wire |
|---|---|---|
| 1 | Ground | Signal ground (black/white) |
| 2 | Signal | Any spare AVI (for example AVI 10, white) |
| 3 | 5V supply | 5V+ (orange) |
MAP sensor
There's no factory MAP sensor on this engine, because Toyota metered it with a MAF. On a naturally aspirated build, the ECU's internal MAP sensor is fine. If you're adding a turbo or supercharger and going past what the internal sensor can read, fit an external sensor such as a 5 bar TI MAP sensor on a spare AVI.
VVTL-i: cam phasing and lift switching
The 2ZZ was one of the early engines to combine continuously variable intake cam timing (Toyota's VVT-i) with a switched high-lift cam profile (VVTL). Toyota calls the combination VVTL-i, and the Haltech treats it as two separate functions.
- Intake cam phasing (VVT-i): set up with Cam Control. Select the cam sensor as the Home input, and drive the oil control solenoid from any spare output other than an ignition output.
- Lift switching (VVTL): set up with Cam Control Switched, again from any spare non-ignition output. The factory switch-over point is above 6000 rpm, and Toyota's ECU won't engage high lift until coolant is above 140°F (60°C). We recommend mirroring that coolant lockout so you're not engaging the high-lift rockers on a cold engine.
The engine breathes very differently on each cam profile, so for proper tuning the fuel base, ignition base and intake cam target tables should be mapped in 4D against the Cam Control Switched state (0 = low lift, 1 = high lift). That needs an Elite 1500 or Elite 2500.
Idle valve
The idle air valve has three pins, but only one of them is driven by the ECU, so configure it in software as a 2-pin BAC valve on one output.
| Valve pin | Function | Connect to |
|---|---|---|
| 1 | Open signal | Spare output |
| 2 | Power | 12V+ switched |
| 3 | Close signal ground | Engine ground |
Unplugged, the valve parks itself about halfway open, so a high idle on first start usually means it isn't being driven. More on tuning it in Idle Control.
Temperature sensors
The coolant sensor is a standard two-wire thermistor and isn't polarity sensitive. Wire one pin to a spare AVI and the other to signal ground. Use an AVI with a switchable pull-up and turn it on; if your input doesn't have one, add an external 1k resistor to 5V. Load the matching temperature calibration file, which is built for a 1k pull-up to 5V.
Intake air temperature is measured inside the MAF housing, so its wiring is covered in the MAF table below.
Knock sensor
Early engines use a single-wire resonant knock sensor. From around 2002 Toyota changed to a donut-style, non-resonant sensor. Use the later type with a Haltech: the early resonant sensor is less dependable and far less useful for tuning. Toyota lists the knock frequency at roughly 7.1 to 7.6 kHz, which is a good starting point for your detection settings. See knock control.
MAF sensor (optional)
Most people delete the MAF and run speed density, but you can keep it if you prefer, and you'll need at least its air temp circuit if you keep the housing as your IAT sensor.
| Circuit | MAF pin | Wire it to |
|---|---|---|
| Power feed | 1 | Haltech switched 12V (grey/red) |
| Airflow output | 3 | A spare AVI |
| Intake temp output | 4 | A spare AVI, pull-up on |
| Grounds | 2 and 5 | Haltech signal ground (black/white) |
Oxygen sensors
The factory sensors are four-wire narrowband units. They're fine for closed-loop feedback at idle and cruise, but you can't tune with them. We strongly recommend a WB2 dual-channel wideband kit, with its LSU 4.9 sensors going in place of the pre-cat narrowbands. A 22 mm socket or wrench handles removal.
Vehicle speed
The speed sensor is Hall effect, but it feeds the instrument cluster, and the cluster passes the speed signal on to the ECU. Plan to tap that cluster output if you want speed in the Haltech.
Injectors
Factory injectors flow about 310 cc/min. Dead time data for the stock 2ZZ injectors isn't published, so you'll need to characterize them or use injectors with known data. Dead time is the part of each pulse where the injector is still opening or closing and not flowing at full rate; get it wrong and idle and light-load fueling suffer. See injector dead time.
Factory ECU pinout
If you're using the factory loom, the OEM ECU pinout tells you which harness wire goes where. Need this diagram? Ask us and we'll send it over with advice for your build.
2ZZ-GE FAQ
Can a Haltech run the VVTL lift engagement?
Yes, through Cam Control Switched. You choose the RPM and conditions, and on an Elite 1500 or 2500 you can map fuel, ignition and cam target separately for each lift state.
Why does my 2ZZ idle high after swapping ECUs?
Most often the idle valve isn't being driven, or it's configured as a 3-wire valve. Set it up as a 2-pin BAC on a single output.




