Subaru OBD-I (1990-5) Engine Diagnostics

The Subaru engineers wisely decided to put in a simple "Subaru Select Monitor" (SSM) communication system to their OBD-I ECUs, using serial communication running 1953 baud talking at 5V TTL level.

The SSM could read several engine parameters in realtime while the engine was running. Today, these parameters can be read with several software programs using one of two cables to a laptop.

Readable Engine Parameters

These are the engine parameters that can be read in realtime:

Continuous parameters:
  • ROM ID
  • System voltage
  • Vehicle speed
  • Engine speed
  • Coolant temperature
  • Ignition timing
  • Airflow signal
  • Load
  • Throttle position signal
  • Zeroed throttle position
  • Injector pulse width
  • IAC valve duty cycle
  • Oxygen sensor signal
  • Fuel trim
  • Timing correction
  • Boost control duty cycle
  • Barometric pressure
  • Boost/vacuum
Binary parameters:
  • Ignition switch
  • Automatic transmission mode
  • Test mode
  • Read memory mode
  • Neutral switch
  • Park switch
  • California mode
  • Idle switch
  • Air conditioning switch
  • Air conditioning relay active
  • Radiator fan relay active
  • Fuel pump relay active
  • Canister purge valve active
  • Pinging detected
  • Pressure exchange


Typical Values

Go here to see full explanations of these parameters.
Go here to see tables and graphs of these parameters under operating conditions.

Go here to see in-depth analysis of some of the parameters:


I've been able to get 3 diagnostic tools working:
  • B10 diagnostic tool
  • EvoScan
  • (Select Monitor Utility)

B10 diagnostic tool

The B10 diagnostic tool written by Vikash Ravi Goel in assembly language in 2004-6, is a great tool that talks TTL over a parallel (printer) port. It was the first groundbreaking independent software written to monitor the SSM protocol, after much time spent by the author on reverse engineering the ROMs inside EJ22 ECUs.

Its two main limitations are (1) that it must run from a native DOS window or from the bootable B10 CD image (which boots into native DOS), not from from a DOS window running within Windows; and (2) it must be run on a laptop old enough to actually have a real parallel port. A USB/parallel converter most likely will not work, as it will not be recognized by the native DOS. Another minor limitation is that it can only monitor one SSM parameter at a time.

See Hardware below for details on building the parallel cable.


The EvoScan monitor and data logger by Hamish Ahern is a great piece of software that runs on modern Windows OS's via a USB port. It can monitor any or all of the SSM parameters together and in realtime as values or as gauges, unlike the B10 which can only monitor one at a time. (The gauge image here was just my first attempt at configuration; gauge layout is customizable and there are many gauge styles available). It can also log the data, which can be analyzed later. Here's a time plot of a warmup cycle of my engine. The data can be exported to a csv file for import into excel or other software for further analysis; many of my more detailed analyses of engine parameters were done this way.

Evoscan sells cables ready-made to connect to the SSM port. (However, because I wanted to be able to swap between USB- and parallel-based cables, I built a custom USB cable - details below.)

As noted here, most of the ROM addresses in Evoscan's database are passed down through many generations from the original creators, many with errors intact. As I get the opportunity to examine logs from different ECUs, I will be posting what I believe to be more correct versions of the config files for various ROM IDs:

Updated/corrected Evoscan Configs for ROM IDs:

Note that the corrections are being submitted to Evoscan, so may eventually be incorporated in their database (or even improved further!).

Select Monitor Utility

I've had mixed results using the Select Monitor Utility written by Kevin Frank. I also used the USB/TTL cable to connect this utility. However, on my laptop the sync to the Select Monitor program was intermittent; I would only get a few seconds of good data followed by a few of garbage, repeating. After hours of messing with it, I found that running the PortMon port monitor (from somehow changes the buffering to allow the sync to stay on longer, but it was still not useful.


The connection to the Subaru ECU is made via the SSM port on the engine's wiring harness. A Scosche Su02B connector, which can be obtained from auto stereo stores or off EBay plugs perfectly into the SSM connector. The B10 and Evoscan use different cables. The B10 uses a parallel cable, Evoscan uses a USB/Serial cable.

(Side note: I have both cables, parallel and USB, so I can use either tool. I brought the ECU wiring from the Scosche connector to the front of the van via a shielded cable which runs underneath. This terminates with a simple 3-connector audio jack on the dash. Both my parallel and USB cables are terminated in audio jacks, and can be plugged into this wire. This allows me to switch easily between the parallel and USB cables, and allow me to run the diagnostics while sitting in the front of the van.)

To make cables for either, here's the pin numbers and pin-outs for the ECU's connector, Scosche connector, USB serial cable, and parallel cable:

subaru SSM1 port on wiring harness

    ------   ------
   | 1  2 |_| 3  4 |
   |               |
   | 5  6  7  8  9 |
(This is looking into the face of the ECU port on the engine's wiring harness. This is the connector that the Scosche connector plugs into, not the Scosche connector itself.)

parallel cable for the B10

This cable is made with a 25-pin male D-Sub Centronics connector, with only 3 of the wires connected to 3 of the Scosche wires:
  parallel-pin  Subaru     Scosche
  13 (select)   2 (XMIT)   wht    
  1  (strobe)   3 (REC)    grn    
  -             5 (+12V)   gry/blk
  25 (ground)   9 (GND)    prp/blk

   \ 1          13 /
    \          25 /
(looking into the pins of the Centronics connector, NOT the laptop port)

usb cable for Evoscan

As mentioned above, Evoscan sells cables ready-made, for a decent price. I however made a custom cable to allow me to interchange between the USB and the parallel cables from a FTDI TTL-232R-5V-WE USB to TTL Serial Cable from (they now also offer the TTL-232R-5V-AJ which terminates in a 3.5mm audio jack, just as i wired mine - it allows the scosche connector to stay plugged into the ECU).
  TTL-232-WE    Scosche   Subaru  
  yel (RxD)     wht       2 (XMIT)
  org (TxD)     grn       3 (REC) 
  -             gry/blk   5 (+12V)
  blk (GND)     prp/blk   9 (GND) 
(Note: the Subaru column shows what signal will appear on what wire when the Scosche connector is plugged into the vehicle port.)


Aaah but there's one last hitch. Whether or not your particular ECU will be readable by any of the above software programs depends on your ECU's ROM version.

Many different versions of the firmware in the ECU's ROM were shipped with the EJ22 engines. Each one has different locations in memory where the diagnostic software must look to find the monitored engine parameters.

A few daring souls poked through thousands of locations in their ECU's memory for their ROM versions; only those ROMs are in the database of ROM IDs used by all the EJ22 ECU software. Some are missing, some are present along with errors propagated down through the years; it's hard to say what percent of the ROMs are represented. More info here.
[home] [vanagon] [ej22 engine]    

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