Subaru OBD-I (1990-5) Trouble Codes

This is an attempt to collect some of the less common information on some of the more esoteric codes here, rather than the full diagnostic procedure (which can be found in the service manual).

Here is a listing of the OBD-I / VSS trouble codes (and the fail-safe operation the ECU resorts to when the code is thrown); if there is more info on the code, the code number will link to a section on the lower page.

Code
Item Contents of Diagnosis Fail-Safe Operation
Crank angle sensor No signal entered from crank angle sensor, but signal entered from cam angle sensor -
Ignition (starter) switch Abnormal signal emitted from starter switch Ignores start signal
Cam angle sensor No signal entered from cam angle sensor, but signal entered from crank angle sensor -
14-17
Injector #1-4 Fuel injector inoperative (Abnormal signal emitted from monitor circuit) -
21
Water temperature sensor Abnormal signal emitted from water temperature sensor Maintains radiator fan "ON" to prevent overheating
Knock sensor Abnormal voltage produced in knock sensor monitor circuit Uses basic fuel map and retards ignition timing (reportedly by 5 degrees)
23
Air flow sensor Abnormal voltage input entered from air flow sensor Injection duration determined by TPS and RPM only
Air control valve Air control valve inoperative (Abnormal signal produced in monitor circuit) ECU turns off 1 or 2 injectors to reduce idle speed for certain RPMs, speed, and throttle
31
Throttle sensor Abnormal voltage input entered from throttle sensor Sets TPS output to a fixed voltage; injection duration determined by idle switch, AFM, and RPM only
32
Oxygen sensor Oxygen sensor inoperative -
Vehicle speed sensor Abnormal voltage input entered from speed sensor Sets vehicle speed signal to a fixed value
35
Canister purge solenoid valve Solenoid valve inoperative -
A/F learning control Faulty learning control function Falls back to simple feedback control
42
Idle switch Abnormal voltage input entered from idle switch "Judges OFF operation" (from the Subaru repair manual)
45
Atmospheric pressure sensor Faulty sensor Sets sensor to 760 mmHg
49
Air flow sensor Use of improper air flow sensor -
Neutral switch (MT) Abnormal signal entered from neutral switch -
Inhibitor switch (AT) Abnormal signal entered from inhibitor switch -
Parking switch Abnormal signal entered from parking switch -

turbo only:

44
Wastegate control solenoid valve Wastegate control solenoid valve inoperative -
45
Pressure sensor and pressure exchange solenoid valve Faulty sensor or pressure exchange solenoid valve inoperative Prevents abnormal supercharging pressure using "fuel cut" in relation to engine load


Code 11

The operation of the cam and crank angle sensors, and the relationship between the two, can be seen with an oscilloscope. This can be very useful in debugging problems with the angle sensors and the timing belt, as shown here.

Some users have reported both codes 11 and 13 can result from simple engine stalls. It is recommended to clear the code to see if it returns without an engine stall, before replacing the angle sensor.


Code 12

This is one of the easiest ones to fix. The ECU relies on getting the start signal only while the engine is actively cranking. This signals the ECU to go into starting mode and do 2 things to make the engine easier to start under a wide range of conditions:
  • use a long injector duration for extra fuel
  • use fixed 10*BTDC timing
To test, just back-probe the ECU's B56 connector/pin 10 with a needle or paperclip, and use a voltmeter to check for 10-14V between the probe and ground while someone is cranking the engine. The voltage should be present ONLY while actively cranking.

If the signal is not present during starting, the engine will be difficult to start. If the signal is present while running, the fixed timing and long injector duration will cause very poor performance: running rich and with incorrect timing.

The signal comes from the red/black wire in the large electrical junction box. If that is not available, a new wire can be run from the starter solenoid, which is hot only while cranking.


Code 13

An EJ22 service bulletin issued by Subaru noted that a code 13 can be thrown from a simple engine stall "for any reason" (some users have reported both codes 11 and 13 can result from stalls). It was recommended to clear the code 13 to see if it returns without an engine stall, before replacing the angle sensor.

The operation of the cam and crank angle sensors, and the relationship between the two, can be seen with an oscilloscope. This can be very useful in debugging problems with the angle sensors and the timing belt, as shown here.


Code 22

A code 22 will cause a significant loss of engine power. When the knock code is thrown, the ECU retards timing into a safe zone in order to prevent any knocking from happening while the sensor is down. This will causing the engine to bog.


Code 24

With the IAC code 24 thrown, the ECU will use what is called 'fuel cut' to reduce excessive engine RPM. It turns off 1 or 2 injectors to maintain idle speed, for certain values of RPM, vehicle speed, and throttle position. This can result in a rough idle, and poor idle exhaust emissions values.

Most often with the IAC code, the IAC valve just needs to be cleaned. These are the best resources I have found for IAC cleaning: On some early EJ22s, there is an idle adjustment/air bypass screw on the intake body, which is used to adjust the idle air only to the point that the IAC duty cycle remains in range.


Code 33

The ECU does not depend much on the VSS signal. Having an active code 33 will not degrade the performance of the engine much, if at all. Some people have reported engine stalls while coasting at speed with the clutch in with active code 33, for some there are no ill effects at all.


Code 41

Subaru put a basic adaptive learning system in the ECU, to reduce feedback control error in the air/fuel ratio feedback system.

The system constantly corrects the a/f ratio for the exhaust gas mixture as read by the O2 sensor. The ECU looks up the basic amount of fuel required in its internal static memory maps, given the amount of air being consumed and the load on the engine. It then adds to this basic amount several correction factors for the current state of the O2 sensor, engine temperature, etc., with the goal of keeping the exhaust gasses as close to perfect as possible.

The adaptive learning system comes into play when the ECU stores those corrections required under various operating conditions, and uses the stored corrections where possible in addition to the live calculations. This smooths the feedback response ("eliminating transients" according to the Subaru repair manual) and compensates for age-related degradation of sensors. From the Subaru EJ22 Repair Manual (M505): the "air-fuel ratio learning control system constantly memorizes the amount of correction required...so that the correction affected by feedback control is minimized".

The learning function takes 3 full engine cycles up to operating RPM (2000 rpm or greater) and back after ECU reset to be operational (from The 'How To' of Rotorcraft Fuel Injection by Vann Hand, Homebuilt Rotorcraft December 1995.)

When the memorized correction factors exceed a factory-determined range, the code is thrown. Because the learning system relies upon almost all the ECU inputs: the AFM, water temp sensor, TPS, O2 sensor, and injectors, elimination of the code requires checking all of the above. However, the engine will usually perform very well with the code 41 active; it falls back to simple feedback control with the sensors, which is what many ECUs rely upon anyway.

I haven't seen any quantified reports or information on the gains in performance or efficiency of the learning control.

(Note: the Subaru Technicians Booklet, Fuel Injection and Engine Management, Module 406, p.17, section "Learning Control", says this about the learning function... but seems to be only describing the simple map for determining basic injector duration:
"The amount of air monitored by the mass air flow meter or QA compared to the engine rpm is memorized by the ECM. This results in a representation of engine load. Engine load is used to update Basic duration.")

Code 51

For engine-swapped vehicles which do not have the original neutral (MT) or inhibitor (AT) switch, this code can be eliminated by a switch that is occasionally exercised. The logic that the ECU uses to when to throw the code isn't readily apparent; it seems to just need to be "occasionally" toggled.

One possible way to mock up this signal is to use a microswitch placed on the clutch pedal. Even though this will not give the correct signal when the transmission is in gear but the clutch is depressed, the ECU does not seem to care.
Here's an example of a microswitch mounted on the clutch pedal in a VW Vanagon:

Another fairly correct way is using a hall sensor and a magnet placed on the transmission linkage, so the signal is present when the transmission actually is in or passes through neutral.

Code 52

For engine-swapped vehicles which do not have the original parking switch, this code can be eliminated by using a switch that is occasionally exercised. The logic that the ECU uses to when to throw the code isn't readily apparent; it seems to just need to be "occasionally" toggled.

One good way of simulating this signal is using a microswitch placed on the parking brake, or creating a diode-protected circuit that taps into the existing parking brake warning light circuit.
[home] [vanagon] [ej22 engine]    

copyright ©bill codding 2002-2005. all rights reserved.