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.
These are the engine parameters that can be read in realtime:
- ROM ID
- System voltage
- Vehicle speed
- Engine speed
- Coolant temperature
- Ignition timing
- Airflow signal
- 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
- 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
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
- (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)
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)
be run on a laptop old enough to actually have a real parallel port.
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.
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
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.
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
PortMon port monitor (from sysinternals.com) 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
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
FTDI TTL-232R-5V-WE USB to TTL Serial Cable from ftdichip.com (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
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