OBD0 Honda PW0 ECU Reference Guide
A complete hardware and software reference guide for the JDM and European OBD0 PW0 DOHC VTEC ECU, featuring ROM address calibrations and mapping.
Adapted from pgmfi.org wiki
The PW0 Engine Control Unit (ECU) is a classic OBD0 controller equipped in JDM (Japanese Domestic Market) and European-market Hondas from 1989 to 1991. Sourced from the JDM Civic SiR (EF9), CRX SiR (EF8), and Integra XSi/RSi (DA6), the PW0 controls the first-generation DOHC VTEC 1.6L B16A engine.
Overview
As one of Honda's earliest VTEC ECUs, the PW0 features a robust internal layout that includes dual knock sensor inputs (JDM versions) and uses an OKI-based microcontroller architecture. Like the similar PR3 ECU, the PW0 is highly popular among enthusiasts restoring or tuning 4th-generation Civics and CRXs.
This guide lists the critical ROM address locations for modifying parameters (such as checksums, VTEC crossovers, and rev limits) on both JDM and European-spec PW0 ROMs.
ECU Board Scans & Hardware
For hardware repairs or socketing verification, refer to these board scans:
JDM PW0 ROM Address Map
Below are the hex address offsets within the EEPROM for JDM PW0 calibrations (e.g., standard PW0-000 ROMs):
| Location | Bytes | Description | Notes |
|---|---|---|---|
| 20B2 | 1 | Checksum Bypass | Change from 0xC9 (perform checksum) to 0xCB (bypass checksum) to prevent solid CEL on modified ROMs |
| 391A | 1 | High Cam Rev Limiter | Warm/VTEC engine RPM fuel cut (uses OBD0 8-bit RPM formula) |
| 391C | 1 | Low Cam Rev Limiter | Low cam engine RPM fuel cut (uses OBD0 8-bit RPM formula) |
| 3922 | 1 | High Cam Rev Recovery | RPM where VTEC fuel cut recovers |
| 3AD8 | 1 | VTEC Disengage Speed | Lower VTEC cut-off speed threshold (uses OBD0 VTEC formula) |
| 3AD9 | 1 | VTEC Engage Speed | VTEC engagement speed threshold |
| 3ADA | 1 | VTEC Disengage RPM | Crossover low RPM hysteresis limit (3AD8 is typically active) |
| 3ADB | 1 | VTEC Engage RPM | Crossover high RPM activation point (3AD9 is typically active) |
| 3BE6 | 255 | Low Cam Ignition Map | 15x17 low cam ignition advance map (uses OBD0 Ignition formula) |
| 3CE5 | 255 | High Cam Ignition Map | 15x17 VTEC ignition advance map (first row is typically empty filler) |
| 3DE4 | 255 | Low Cam Fuel Table | 15x17 base fueling lookup map (uses OBD0 Fuel formula) |
| 3EE3 | 15 | Low Cam Multipliers | Column multiplier coefficients for fuel map 1 |
| 3EF2 | 255 | High Cam Fuel Table | 15x17 VTEC fueling lookup map (uses OBD0 Fuel formula) |
| 3FF1 | 15 | High Cam Multipliers | Column multiplier coefficients for VTEC fuel map |
European PW0 ROM Address Map
Below are the hex address offsets within the EEPROM for European-spec PW0 calibrations:
| Location | Bytes | Description | Notes |
|---|---|---|---|
| 1F21 | 1 | Checksum Bypass | Change from 0xC9 to 0xCB to bypass checksum checks |
| 3928 | 1 | High Cam Rev Limiter | Warm/VTEC engine RPM fuel cut (uses OBD0 8-bit RPM formula) |
| 392A | 1 | Low Cam Rev Limiter | Low cam engine RPM fuel cut (uses OBD0 8-bit RPM formula) |
| 3930 | 1 | High Cam Rev Recovery | RPM where VTEC fuel cut recovers |
| 3AEC | 1 | VTEC Disengage Speed | Lower VTEC cut-off speed threshold (3AEC is typically active) |
| 3AED | 1 | VTEC Engage Speed | VTEC engagement speed threshold (3AED is typically active) |
| 3AEE | 1 | VTEC Disengage RPM | Crossover low RPM hysteresis limit |
| 3AEF | 1 | VTEC Engage RPM | Crossover high RPM activation point |
| 3BE6 | 255 | Low Cam Ignition Map | 15x17 low cam ignition advance map |
| 3CE5 | 255 | High Cam Ignition Map | 15x17 VTEC ignition advance map |
| 3DE4 | 255 | Low Cam Fuel Table | 15x17 base fueling lookup map |
| 3EE3 | 15 | Low Cam Multipliers | Column multiplier coefficients for fuel map 1 |
| 3EF2 | 255 | High Cam Fuel Table | 15x17 VTEC fueling lookup map |
| 3FF1 | 15 | High Cam Multipliers | Column multiplier coefficients for VTEC fuel map |
Fuel Column Multiplier Formula
Because 8-bit cell values (scaled 0x00 to 0xFF or 0-255) cannot cover a wide enough pulse-width range without losing resolution, the PW0 ECU applies a column-specific multiplier coefficient to each load column:
$$\text{Column Multiplier} = \frac{2^{\text{Multiplier Value}}}{4}$$
The final calculated injector pulse-width value uses this multiplier to scale the raw fuel map cell value into the final injection duration commanded by the ECU. Refer to the understanding maps guide for a step-by-step example of load scaling.
Credits and source
Authors introspeed
Source Adapted from PW0 on pgmfi.org wiki. Licensed under CC BY-NC-SA 1.0.