From the 1996 model year, the E36 uses OBD2. The M52 and the US-market S52 are managed by a Siemens MS41.1 DME, which can store far more faults than the OBD1 systems. That makes a scan tool the only practical way to read them.
TL;DR
| Which cars: | 1996–1998 E36 with M52 or S52US (Siemens MS41.1). For 1992–1995 OBD1 cars, see the OBD1 fault code reference. |
| Connector: | 16-pin OBD2 socket on the lower left dash panel. |
| Tools: | A generic OBD2 scanner reads and clears the engine’s generic P-codes; BMW-capable software also reads the BMW-specific faults and the other control units. |
| Important: | On OBD2 cars the fault memory (and the Check Engine light) can only be reset with a scan tool. Disconnecting the battery or the DME does not erase it (Bentley). |
Tools
| Tool | What it does |
|---|---|
| Generic OBD2 scanner or adapter with an app | Reads and clears generic P-codes, shows freeze-frame data and basic live data from the engine |
| BMW-capable scanner or BMW diagnostic software with a suitable cable | Also reads the BMW-specific fault memory and other control modules, and shows detailed live data such as VANOS and fuel trims |
Whichever you use, read and write down all codes and their freeze-frame data before clearing anything: that record is your evidence.
Common codes and where to look
The definitions are the standard generic (SAE) meanings; the “where to look” column is the usual order of checks on an old M52.
| Code | Meaning | Where to look first |
|---|---|---|
| P0170 / P0173 | Fuel trim malfunction, bank 1 / bank 2 | Unmetered air: intake boot, vacuum hoses, the crankcase vent (CCV) valve and its hoses. Then fuel pressure (M52 spec: 3.5 ± 0.2 bar). |
| P0300–P0306 | Random / cylinder-specific misfire | Spark plug and ignition coil of that cylinder (swap a coil to see if the misfire follows it), then the injector and compression |
| P0340 | Camshaft position sensor circuit | Sensor wiring and connector, then the sensor. On VANOS engines, also the VANOS (see the M52 single VANOS guide) |
| P0335 | Crankshaft position sensor circuit | Sensor wiring and connector, then the sensor |
| P0442 / P0455 | Evaporative system leak, small / large | Fuel filler cap and its seal first, then the EVAP lines and purge valve |
| P0500 | Vehicle speed sensor | The speed signal circuit and its source; check what your car uses with the wiring diagram |
Using live data
Live data shows what the DME sees before a fault code is set. The most useful values:
- Fuel trims: large positive long-term trims mean the DME is adding fuel to correct a lean mixture, usually unmetered air. If the trims fall back towards zero at higher rpm, an air leak (which matters most at idle) is the likely cause.
- Pre-catalyst oxygen sensors: they should switch steadily between lean and rich at a warm idle. Slow switching points to an ageing sensor; a voltage stuck in the middle points to a dead one.
- VANOS: compare the commanded and actual camshaft position. An actual value that lags or never reaches the commanded one points at the VANOS seals, or the solenoid and oil supply.
- Coolant temperature: an engine that never reaches normal operating temperature on the gauge and in the data points at the thermostat.
The usual suspects on an old M52
- Crankcase ventilation (CCV): the plastic valve and hoses age; a split creates unmetered air and lean codes. On the M52 they sit under the intake manifold.
- Intake boot between the air flow meter and the throttle body: a split anywhere downstream of the meter means unmetered air.
- Ignition coils and plugs: misfires.
- VANOS seals: flat response below about 3,000 rpm and camshaft-related faults.
- Cooling system: an old thermostat or a coolant temperature sensor reading wrong affects mixture and idle.
A smoke test of the intake system finds most air leaks in minutes.