Electronic Control Module (ECM)

General Information

The ECM has a table of coefficients (called BLM, Block Learn Multiplier) for different conditions such as engine speed, vacuum and temperature. These determine the coarse value how much fuel should be injected in given conditions. The optimum coefficients for a certain car are learned by the ECM by monitoring the oxygen sensor voltage (rich or lean) in the given conditions. This is usually a very slow process. There is also a faster changing variable for fine-tuning the amount of fuel, called the integrator. If the integrator goes out of range for more than a specified time, then the Service Engine Soon light may be lit, and/or the BLM coefficients adjusted. However, if you reset the ECM, it has no memory of the history of whether the car ran rich or lean with certain BLM values, so it goes into a learn mode to quickly determine what BLM values should be used.

That's about ECMs in general. Maybe Oliver could tell exactly what kind of learning process is used on the Fiero?

From: Alve Jukka

There's not much to add, you pretty much got it. The ECM adjusts the injector pulse width to achieve optimum mixture, as determined by the O2 sensor. When the O2 gets too RICH, it decreases the injector pulse width, if it gets too LEAN, it's increased. By "crossing" the optimum point, a "Crosscounts" variable is increased. The quicker this variable increases, the better the O2 sensor works. If the sensor gets older, the output gets somewhat slow, and the *speed* at which the crosscounts variable counts up changes. Now, this is *very* short term corrective action (a few times per second). If the ECM has to adjust the fuel mixture to achieve crosscounts at all, it adjusts the integrator variable, which is short term corrective action. Normally the Integrator is 128, or around 128. If it's too far off for too long, it adjusts the Block Learn Variable (the manuals are not clear about what it's called). Anyway, the Block Learn Variable should also be 128, or around 128. If it's off by more than 10, the car is either running too lean or too rich (with the O2 sensor not really noticing it, for whatever reason).

So, the amount of fuel is determined by the long time, short time and very short time variables, plus a *basic* amount of fuel needed for running the engine at all. This is where the TPS and MAT and MAP come into play. These are the main engine sensors for calculating the fuel mixture. The basic injector tables are preset for various RPM's in the ECM's PROM, but only in certain RPM increments (like, 500rpm steps). I don't know if the ECM interpolates those tables for finer intervals, but I doubt it.

The ECM can also contain a Block Learn *Cell* variable, which indicates which set of internal variables is used for fuel calculation at the moment. There are only a few "Fuel Cells" in the ECM memory, so the variable is not "around 128", like the Block Learn Variable is. But since the names are so similar, documentation is often not clear as to which is which. I hold them apart by which value is displayed.

As to what *exactly* the Cells are or contain, I'm not sure, but I'd like to find out...

There's also some description in the Emissions section of the shop manual...

"Does the ECM rev limiter work by removing spark or shutting off the injectors? If I install an MSD unit will it remove the rev limiter?"
The ECM has to shut off the injectors. If they were to shut off the spark instead, the fuel would quickly wash off the oil on the cylinder wall, and your engine would break rather suddenly.

So in other words, no, the ECM controls the rev limiter and switching to a MSD unit will not cure this problem...

From: Oliver Scholz

Most FI engines have a "Clear Flood Mode". On the Fiero 2.8L it operates like this. When the accelerator is pressed down all the way, the ECM pulses the injectors at an air/fuel ratio of 20:1. The ECM holds this injector rate as long as the throttle stays wide open, and engine rpm is lower than 400. If the throttle position becomes less than 80%, The ECM returns to the "starting" mode.

"How does the shift light work?"

The shift light is controlled by the ECM. The ECM grounds circuit 456 (pin A7 tan/black wire). The ECM uses information from the coolant temp sensor, TPS, VSS, and RPM from the distributor.

"My Haynes manual says to drive the car over 35mph to reset the fuel mixture."

What this does it let the ECM seat the IAC valve all the way. This gives the ECM a reference point to go from. The IAC will not seat all the way until the car is over 35 mph. Once the car is over 35 mph, the idle air passage that the IAC blocks to control idle speed is not used and the ECM can seat the valve without the engine stalling.

"I had to crank the engine a few extra times to let it build oil pressure. As soon as the gauge showed 35 to 40 psi it would fire right up, but not before."

As soon as you turn the key on, the ECM should energize the fuel pump relay for 3 seconds. If you have to wait for the fuel pumpto be turned on by the oil pressure switch, your fuel pump relay is probably bad.

"If I understand you, a brief time of cranking is to be expected (either due to the fuel pump or oil pressure switch). So how come my 2.8 lights off as soon as I touch the key, with literally no cranking?"

There should be no cranking. That is what I was saying. The ECM energizes the fuel pump in the start position before you even get to the crank position of the ignition switch.

From: Scott Backer

"Is there any way to know if my PROM has gone bad?"

If the EPROM is bad, the computer will tell you. The first two bytes contain the 16 bit sum of all the other bytes. If this doesn't match, ROM code elsewhere in the ECM will reject the EPROM.

From: Ludis Langens

During recent months several Fiero owners have commented on how their 2.8 engine will vary RPM right after it is started - sort of like it is looking for a place it likes - and then settles down. Possible solutions have ranged from IAC valves to vacuum leaks.

My 88 "Had" a similar problem, until last month. Mysteriously, when I replaced my five year old battery with a new 750 amp Delco, it went away.

This puzzled me, but I more or less wrote it off to a coincidence and thanked my lucky stars that it was gone.

Then, yesterday, I was rummaging through the Helms Manual looking for some info on the cold start injector when I happened to see the following section called "Battery Voltage Correction Mode" in section C2 - Fuel Control System:

"When battery voltage is low, the ECM can compensate for the weak spark delivered by the distributor by:

Increasing the amount of fuel delivered;
Increasing the idle RPM; and
Increasing ignition dwell time."

Wait a minute. When is battery voltage usually the lowest? Right after cranking the engine, especially if the outside temperature is cold and the battery has begun to show signs of it's age. It takes less than a minute for the alternator to bring things back up to par, and then the ECM abandons this mode.

Could this be the idle speed searching problem? Methinks it is a pretty good hypothesis, especially since mine went away after installing a new battery.

Of course, the argument against the hypothesis might be whether the ECM will go first to the Battery Voltage Correction Mode when starting, or choose the "open loop" values in the Run Mode. Maybe we can have a Battery Voltage Correction Mode in Open Loop? Possible, since open loop looks for the oxygen sensor voltage to vary before switching to closed loop.

From: Randy Agee

"I wonder if it would be worthwhile to replace -all- the engine compartment sensors, one by one or all at once, to see if the car runs better. Or would that cost too much to be practical?"
VALVE, EGR electric vacuum solenoid   10038324     $98.82
VALVE, idle air control               17111288       N.L.
SWITCH, cold start fuel injection     14084318     $22.15
SWITCH, netrual start   (w/AT only)   10045862      $5.85
SENSOR, coolant (ECM)                 25036979       N.L.
SENSOR, exhaust oxygen                 8990741     $28.57
SENSOR, manifold absolut pressure     16017460       N.L.
SENSOR, manifold absolut temp         25036751     $28.79
SENSOR, throttle position             17071825     $63.74
SENSOR, vehicle speed      w/AT       25007335     $46.04
                           w/MT       25036929     $53.75
                                                + N.L. parts

(N.L. means NOT LISTED)
Remember these are wholesale prices from 1988.

From: Scott Backer

Checking ECM codes

When the Service Engine Soon (Check Engine) light comes on, the ECM has detected a problem with one of the sensor circuits in the car, and it sets a trouble code. The ECM holds stored trouble codes in memory as long as it has power from the battery. To retrieve the stored trouble codes, do the following:

  1. Remove the black trim plate on the center console where the cigerette lighter is.
  2. Take a paperclip or wire, and ground the two terminals on the top, closest to the passenger side of the car.
  3. Watch the Service Engine Soon (Check Engine) light.

It will flash a series of codes at you. First, it should flash:

FLASH-PAUSE-FLASH-FLASH. That is 1-2, code 12. This signifies that the ECM is not recieving reference pulses from the distributor, and therefore that the car is not running.

It will flash this code three times, with a long pause between each code. If there are any stored trouble codes, it will flash them after this, starting with the lowest numbered codes, up to the highest numbered, each one repeated three times. It does NOT flash the codes back in the order in which they were set.

One more example. If you see the following:

FLASH-pause-FLASH-FLASH-long pause
FLASH-pause-FLASH-FLASH-long pause
FLASH-pause-FLASH-FLASH-long pause
FLASH-pause-FLASH-FLASH-FLASH-long pause
FLASH-pause-FLASH-FLASH-FLASH-long pause
FLASH-pause-FLASH-FLASH-FLASH-long pause
FLASH-pause-FLASH-FLASH-long pause
FLASH-pause-FLASH-FLASH-long pause
FLASH-pause-FLASH-FLASH-long pause

Then your ECM is giving you code 13 (oxygen sensor) and code 44 (lean exhaust). (In case you are wondering, these are the codes I got when my Oxygen sensor on my 2m4 went bad.)

From: Sketch

Clearing the ECM's memory

Clearing the ECM's memory will erase all of the stored trouble codes. You should do this after you fix a problem which was setting a code. That way, next time you get trouble codes you won't be confused by which one was set this time.

The most common way to clear the codes is to disconnect the negative terminal of the battery for at least 10 seconds.

From: Sketch


There is a single pin connector buried in the bundle of wires and fuse links by C500, thats the huge double connector on the right side frame rail rear of the battery, that that is the constant ECM power connection. Looks like an inline fuse holder. Disconnecting this for 10 seconds or so will wipe the memory and erase trouble codes without you having to mess with a 8mm wrench and fiddle with the battery terminals. Besides, it saves your radio memory. This connector is located in the same bundle of wires on the '84s except its in the center of the firewall.

From: Tin Man


"My computer won't flash any codes. Could there be a bad connection somewhere, or is the computer shot?"

The computer should flash a 1-2 code three times before and after any stored trouble codes. Since yours does not, I'll put my money on a bad computer.

However try this to make sure:

  1. Remove the connector (it was a white connector in 84) from the computer. The Check engine light should go off. If it does not, there is a short on the wire leading to the light. Fix the short and don't read on :)
  2. Reconnect the ECM connectors. Make sure there is a good ground to the diagnostic terminal (B). You might also want to try putting a ground at the ECM connector wired to terminal (B) (white connector pin #3 in 84). If either of these gets you a 1-2 code, your computer is good, but the wiring ECM to diagnostic gounding terminal A or bad wiring from ECM to terminal B.
  3. If all this fails to give you a 1-2 code, open the ECM and carefully remove the PROM. Be careful not to bend the pins, and remember which way it was installed.

Make sure the ignition is _OFF_ before you remove the PROM.

After the PROM is out, turn on the key, ground the diagnostic terminal and look for a 5-1 code. If you get the 5-1, you need a new PROM, it not, you need a new ECM box. However, you should check for low resistance between the ECM box and various solenoid terminals before replacing the ECM: TCC solenoid (if automatic), A/C relay (if equiped) and Cooling fan relay. If these measure less than 20 ohms, they will kill the new ECM box very quickly. If they all measure more than 20 ohms, just replace the box.

You'll need a wiring diagram for this last part.

From: Lee Brown

ECM Connector Info from Haynes Manual for V6 Engine

Connector   Info                       Connector   Info
A01  FuelPomp Relay[A] (Switch to IGN) B01  +12V Batt.
A02                                    B02
A03                                    B03  EST (0.76V)
A04  EVRV[B] (Solid state)             B04  EST (Sparktiming input)
A05  SES (Switch to Gnd)               B05  EST (Distributor ref. puls
A06  +12V Contact                      B06
A07  Upshift (Switch to Gnd)           B07
A08  ALDL[E] (Serial data)             B08  Airco (Compressor control)
A09  ALDL[B] (Diagnostic terminal)     B09
A10  VSS[U] (Input 2000Pulses/Mile)    B10  GSS[A] (Park/Neutral Input)
A11  MAT[A] (Air temp input)           B11
A12  Gnd                               B12

C01                                    D01  Gnd
C02  Airco (Compressor control)        D02
C03  IAC[D] Coil 2                     D03
C04  IAC[C] Coil 2                     D04
C05  IAC[A] Coil 1                     D05  EST (Ignition mod. bypass
C06  IAC[B] Coil 1                     D06  Gnd
C07                                    D07  OS (Input)
C08                                    D08  EVRV[C] (Solid state)
C09                                    D09
C10  CTS[B] (Input)                    D10  not used
C11  MAP[B] (Input)                    D11
C12  MAP[B] (Input)                    D12  TPS[C]/CTS[A] (Common Gnd)
C13  TPS[B] (Input)                    D13  MAT[B]/MAP[A] (Common Gnd)
C14  MAP[C]/TPS[A] (Common +5V Ref.)   D14  Fuel Injectors 1-3-5 (Gnd
C15  Fuel Injectors 2-4-6 (Gnd Switch) D15  Fuel Injectors 1-3-5 (Gnd
C16  +12V Batt.                        D16  Fuel Injectors 2-4-6 (Gnd

CTS     Coolant Temperature Sensor
EST     Electronic Spark Timing
EVRV    Electronic Vacuum Regulator Valve
GSS     Gear Selector Switch
IAC     Idle Air Control Valve
MAP     Manifold Absolute Pressure Sensor
MAT     Manifold Air Temperature Sensor
OS      Oxygen Sensor
TPS     Throttle Position Sensor
VSS     Vehicle Speed Sensor

From: Fokker ELMO B.V.

Reverse Engineering the ECM

[Top] | Online Service Guide Main Page