Tag Archives: oil

Log Graphs 1


Car: 2009 Impreza 2.0 Turbo Diesel, 110 kW / 148 hp / 150 PS, European domestic market, Euro 4 spec.

Important: Newer Boxer Diesel generations (Euro 5/6) may show different behaviour!

ECU firmware: patched ROM for unlimited logging, otherwise stock.
Protocol: SSM2 via CAN
More than 120 items had been logged, plenty of RAM variables (*) plus standard SSM2 items at roughly 170 ms interval.


I prepared two graph images plotting some interesting parameters, click picture for full resolution:

Image 1/2


Image 2/2


Additional details

… at specific time positions:

#1: State before active regeneration

Time @ ~ 33 ½ min
Cruise Control: active
Vehicle Speed*: 110 km/h
Engine Speed: 2300 rpm
Gear: 5
Coolant Temperature: 93 °C
Injections: 2 (pre + main)
Soot Accumulation Ratio: 64 %
DPF Pressure Difference: ~ 5 kPa
Exhaust Gas Temperature (EGT) Catalyst Inlet: 345 °C
EGT DPF Inlet: 370 °C
Intake Air Amount: 430 mg/cyl
Mass Air Flow: 33.8 g/s
Manifold Absolute Pressure (MAP)*: 126 kPa
Inlet Air Temperature: 25 °C
Manifold Air Temperature: 48 °C
Fuel Temperature: 58 °C
Throttle Opening Angle: 79 deg
EGR Valve Opening Angle: 38 deg
Final Oil Dilution Rate*: -1.9 mg/s (evaporation)
Oil Dilution Amount: 282.0 g (4.6 %)

#2: Soot 65%, preparing for DPF regeneration

@ 33 ¾ min
Soot Accumulation Ratio* reaches 65%, this triggers active regeneration preparations. Note: I am referring to the actual RAM value, diagnostic parameter may indicate 65% earlier due to rounding.
Apparently ECU now does 3 injections (pre + main + after) when power demand is high enough, no post injections yet

#3: Active Regen ON

@ 34:04; = 20 seconds after #2, DPF Regeneration Switch turns ON
EGR valve closes instantly, 0 deg
Manifold Air Temperature dropping
Boost Control opens VGT immediately, from 52 to 25%
Manifold Absolute Pressure* dropping
pilot-injection kicks in, 2 injections (pilot C + main)
post-injections begin to fade in but not active yet

#4: Post-Injections

@ 33 seconds after #2, post-injections A + B become operational (injection amount > 0)
oil dilution rising
EGTs climbing
Manifold Absolute Pressure*: 75 kPa (~ 25 below ambient), varying, stays below ambient most of the time during regen at low power demand
EGT Catalyst Inlet: 340 °C
EGT DPF Inlet: 320 °C
injections: 4 (pilot C + main + post A + post B)

#5: Coasting Fuel Cut-Off During Regen

Example @ 35:12
EGR valve opens instantaneously, 70 deg; EGR behaves rather digitally during regen – either fully closed (0 deg, for max EGT) or max opened (70 deg, less fresh air)
Throttle Opening Angle: rising up to 31 deg
injections: 0
Fuel Consumption*: 0 mm³/s
oil dilution going down slowly due to estimated evaporation
EGT Catalyst Inlet: decreases fast, EGT at DPF inlet (> 600 °C) follows with a delay
Engine Speed: gear change from 5th to 6th to reduce engine braking effect

#6: Idling with Active Regen ON

@ 45:30
Engine Speed: 800 rpm
Post A Injection Amount*: 0
Post B Injection Amount*: ~ 8 mm³/st
Apparently while idling the ECU prefers the 2nd post-injection (“B”), otherwise during driving it’s rather mixed
Final Oil Dilution Rate: ~ 20 mg/s (medium)
Boost Control: 25 % (VGT fully open)
Manifold Absolute Pressure*: 74 kPa
Throttle Opening Angle: 5.5 deg
EGR Valve Opening Angle: 0 deg
Intake Air Amount: 370 mg/cyl
Mass Air Flow: 9.8 g/s

#7: DPF Regeneration OFF

@ 46:15, decision is based on elapsed time from #2, achieved soot level does not matter (!)
DPF Regeneration SW had been ON for 12.2 minutes
all post-injections off
Oil Dilution Amount*: 299.6 g (4.9 %) = + 0.3 % during regeneration
EGR back to normal operation
Boost Control: 65 % instantly (max speed, spooling up turbo)
MAP rising
EGT Catalyst Inlet: 270 °C
EGT DPF Inlet: 490 °C


Oil Dilution Reset (K-Line, Euro4)

Applies to

Old Euro 4 models, model years (MY) 2009/2010, fitted with closed-type DPF, (therefore Impreza and Forester only?). This also means using SSM2 via Serial (K-Line) protocol, as SSM2 via CAN will not work for most maintenance operations on such old ECUs due to ROM software limitation.


After changing the engine oil, the ECU needs to be told in order to reset its oil dilution amount and ratio values – the ECU cannot detect the change by itself. By the way, Euro 4 engines do not even have an oil level switch/sensor. Also look at post Oil Dilution Graph describing ECU calculations.

By applying a little communication, dilution will be zeroed, also saved into the ECU’s EEPROM after ignition off. Otherwise this (estimated!) value might rise over time and trigger DPF light flashing having reached 10% ratio.

It seems there are still folks out there interested in this, changing oil by themselves, not at the dealership where mechanics use Subaru Select Monitor (SSM-III or newer SSM-IV) software.
I searched through some of my old notes and found the rather short and easy procedure.


Working K-Line connection to ECU. See page SSM2 via Serial.

C-style pseudo code

// only one single SSM2 address is needed
const int address = 0x27D;
byte b = Read(address);

if (b == 0xFF) { print("Probably unmanaged (closed-type) DPF, nothing to do."); exit; }

// set bit 6
Write(address, b | 0x40);

// Wait for some time (500 ms or so is more than enough for the ECU to do its work)

// clear bit 6
b = Read(address);
Write(address, b & ~0x40);

// verify, make sure bit 6 is zero again...
b = Read(address);

Almost done! Now turn ignition off so that new content gets saved into EEPROM! I also recommend waiting for about 20 seconds, then turn ignition back on in order to query oil dilution ratio [%] and/or oil dilution amount [g] parameter(s) to be sure. These values should be zero now. See post Why and when cycling ignition matters for explanation.

In RomRaider logger definitions (version 310) these parameters are called:

P193 Oil Dilution Ratio % Öl Verdünnung Verhältniss
P236 Cumulative oil diesel entry g Öl kum Dieseleintrag

SSM2 via K-Line communication example

SND = message from tester to ECU
RCV = received response from ECU

SND: 80 10 F0 05 A8 00 00 02 7D AC
RCV: 80 F0 10 02 E8 00 6A

SND: 80 10 F0 05 B8 00 02 7D 40 FC
RCV: 80 F0 10 00 F8 40 BA

SND: 80 10 F0 05 A8 00 00 02 7D AC
RCV: 80 F0 10 02 E8 40 AA

SND: 80 10 F0 05 B8 00 02 7D 00 BC
RCV: 80 F0 10 00 F8 00 7A

SND: 80 10 F0 05 A8 00 00 02 7D AC
RCV: 80 F0 10 02 E8 00 6A


It has been confirmed to be working, using RomRaider‘s built-in Test tool (menu: Tools → Launch Test App…). Since the sequence of individual commands is not time critical, it can be done by sending SSM2 messages manually one after the other. See this RomRaider Forums thread.

Oil Dilution Graph

Shown graph contains a complete DPF active regeneration process – the rising section (750 seconds duration = 12.5 minutes).
Basically, oil dilution is driven by:

  1. post-injections during active DPF regeneration
  2. estimated diesel fuel evaporation

According to internal algorithm and logged data, normal operation does not increase dilution. Oil dilution slowly decreases as the ECU estimates fuel evaporation out of engine oil. (On Euro 4 at least, this algorithm is also running if ignition is on, engine not running but coolant temperature warm enough).
Active regeneration however uses one or more post-injections (small additional late injections – during exhaust stroke) in order to heat up the DPF, raising oil dilution amount, at much higher rate therefore winning over evaporation.
Notice these short intermittent steps during regeneration – these are caused by coasting – ECU suspending all injections, including post-injections.
Wouldn’t coasting cool down the DPF then by pushing rather cold air through the system? To mitigate this, the software fully opens EGR valve (70 deg). As soon as injections resume, EGR valve is being closed again. Normally, during active regeneneration it is in fully closed position (0 deg) helping to increase exhaust temperature (more oxygen).
If you look carefully, you can spot more evaporation going on after regeneration had finished compared to before it started. This is mainly due to higher engine temperature, having reached normal operating conditions of around 90 °C. For evaporation to get going it needs temperatures beyond 30 °C, the higher the better.
Also take a look at post “Estimated Distance to Oil Change” for additional information.

DPF Light


  • Do consult your car manual! Unfortunately owner’s manuals lack useful details.
  • Please also read our DPF management page.
  • Same DPF light logic in Euro 4/5/6 ROMs.
  • DTC numbers differ across boxer diesel generations.

Applies To

All Boxer Diesel models fitted with closed-type Diesel Particulate Filter (managed DPF), emissions spec Euro 4, 5, 6.

Therefore does NOT apply to early diesel models equipped with open-type DPF (MY 2008/2009 Legacy/Outback). These do not have DPF management at all in software, no sensors, no DPF light, a lot less to worry about!


Constant light means “Soot High Warning“, also called “Vehicle Speed Request“.

According to manual, one should drive for at least 15 minutes at 60+ km/h, providing favorable conditions (exhaust gas temperature high enough) for active DPF regeneration to start (and ideally complete) in order to reduce soot.

Steady light is triggered by single condition:

  • Soot Accumulation Ratio > 85%

According to ROM logic, steady light will turn off when soot drops below 75% (hysteresis).

If there’s any error condition, see below, the error has higher priority, always resulting in flashing mode.


Flashing/blinking means “Error“, any of the four possible conditions can trigger this mode right away – without showing steady light before.
The manual usually states something like: go to Subaru dealership for inspection. Waiting too long might worsen the issue! Mileage driven with light ON can be recorded by ECU and read out with software!

  1. Oil Dilution Ratio ≥ 10% (also sets DTC P1468 Oil Dilution). Remember, as dilution is just a rough estimate, the value and therefore this error can easily be false! Might disappear when dilution drops below threshold due to calculated evaporation, see post Oil Dilution Graph. Dealership might have forgotten to reset oil dilution at oil change – seen this many times on forums.
  2. Compulsory regeneration required, also called “Dealer Visit Request“; e.g. Soot Accumulation ≥ 100%; ECU does not try active regen anymore unless soot drops to normal level
  3. Ash Accumulation Ratio ≥ 100% (also sets DTC Ash Overfill). Need to clean or replace DPF and tell the ECU to reset this value.
  4. DPF Limp-Home Mode (also sets DTC DPF Limp-Home Mode).

DPF Light Control

At ignition ON, the DPF light illuminates for two seconds exactly – light test –  and should stay off afterwards, indicating normal condition. Otherwise see above.

On Impreza Euro 4 / 5, ECU operates DPF light using CAN message 0x600 byte 0 bit 1, bit = 1 means light ON.

Euro 6 just seems to use different CAN IDs and frame contents.

Like we did in above GIF animation, flash rate is 400 ms/400 ms on/off (8/8 CAN messages at 50 ms interval), respectively. There are no other stock flash modes. In the future we’d like to use DPF light for additional purposes e.g. indicating active regeneration by implementing a different flash rate. We already did a patch using DPF light to indicate active regeneration: Diesel ECU Patch v1. For source code see post DPF Light Patch.


  • 2016-10 incorporate Euro 6 findings

Engine Oil Change (DPF models)

Owners want to be able to change oil by themselves obviously.
On closed-type DPF models (all except MY 2008/2009 Legacy/Outback which are mated with open-type DPF) you’ll need to reset oil dilution parameter as it is calculated (not measured!) by the ECU. Basically active DPF regenerations in particular cause diesel fuel bypass into engine oil. Piston rings cannot seal perfectly.

No auto-detection! Since Subaru diesels, unlike Mazda for example, are not equipped with an oil pressure sensor, its software cannot detect an oil change nor deteriorated engine oil. Subaru’s simple on/off oil pressure switch (near oil filter) is connected to the dashboard. There’s also a low/high oil level switch available on Euro 5/6 models which won’t help here, too, although this one is evaluated by complex ECU algorithm.

Following info as seen in all managed-DPF-ROMs so far.

DTC P1468 Oil dilution (MIL remains off) is being triggered when oil dilution ratio ≥ 10 %. Results in DPF light flashing , there is no warning in advance! If oil dilution gets below 10 % (estimated evaporation) the light will also turn off.

The engine management software assumes 6.13 kg oil mass and this maintenance operation resets RAM variable “Oil Dilution Amount [kg]” to zero.
The ROM’s internal calculation steps are:

  1. update OilDilutionAmount [kg] according to CoolantTemp, Injection Quantities etc.
  2. OilDilutionRatio [%] = 100 * OilDilutionAmount [kg] / 6.13 [kg]
  3. EstimatedDistanceToOilChange [km], via LUT

Also see posts Estimated Distance to Oil Change as well as Oil Dilution Graph.

Oil Dilution Reset

We’ve traced related Euro 4/5/6 ECU-ROM machine code. Here are all possible options:

Euro 4 (IV)

  1. Diagnostic protocol (SSM2 via Serial only). See post Oil Dilution Reset (K-Line, Euro4). There is no alternative method on Euro 4 models! (In theory, we could patch Euro 4 ROMs adding the same Euro 5/6 manual procedure as below. Not a trivial task, though, talk about hours of development and testing…)

Euro 5 (V), Euro 6 (VI)

  1. Diagnostic protocol (Extended OBD-II only since advanced stuff is not implemented in SSM2 anymore unlike Euro 4)
  2. Manual procedure, should be printed in the owner’s manual. The following table is derived from actual ECU software, confirmed in Euro 5 gen2/gen3 and Euro 6 ROMs:
    Step Description
    Prerequisites Brake Light
    • Whole procedure must be done while parking.
    • Engine must be running.
    • Parking brake recommended, vehicle speed must be zero all the time.
    1 Depress and keep holding brake pedal. (Slight pressure is sufficient).
    2 (Rear) defogger ON
    3 Lights ON (stage 1 = parking/clearance/DRL lights is sufficient)
    From here you only have 4 seconds to accomplish each of the following steps and roughly half a minute total countdown!
    4 Defogger OFF
    5 Lights OFF
    6 Defogger ON (again)
    7 Lights ON (again)
    8 Defogger OFF
    9 Lights OFF
    10 Release brake pedal.
    Now the glow light (depicting yellow coil) will flash for 5 seconds indicating full success.
    Otherwise wait for half a minute at least, then try again, repeating the whole procedure.

    Many users have confirmed this procedure, e.g. Subaru Forester Owners Forum – Oil change on Diesel engine and ECU service reset.

    Wanted – please contribute:

    • dashboard video to confirm glow light flashing modes
    • picture of car owner’s manual page describing reset procedure

Other Brands

Mazda SkyActiv-D 2.2 (CX-5)

“Engine Oil Data Reset”, either via OBD or manual procedure (test terminal & accelerator pedal).

ECU software contains algorithms that can detect deteriorated engine oil via oil pressure sensor, there are several DTCs.

Estimated Distance to Oil Change

Estimated distance to oil change is directly driven by oil dilution ratio. Confirmed in all Boxer Diesel ROMs so far, Euro 4/5/6 spec. (Exception: does not apply to open-style DPF – earliest Euro 4 models).

The term “distance to oil change” is actually misleading. Normally, some time after oil change + reset, oil dilution ration often settles somewhere between 4 and 6% (Euro 4), the lower the better. Do not confuse this with distance till next maintenance! Do consult car manual instead or ask dealership.

The firmware uses a 2D LUT (two dimensional lookup table) and standard interpolation:

ScoobyRom screenshot portion

ScoobyRom screenshot portion

However this x-y table data makes up this perfectly linear relationship:

DistanceToOilChange[km] = 15000 - 1500 * OilDilutionRatio[%]

Distance to oil change cannot get negative because interpolation subroutines don’t extrapolate.

Note that the logging parameter Oil Dilution Ratio [%] (SSM2 0x00027C, x[%]) cannot provide decimal places, as it is a simple integer value without conversion.
Original RAM value however is a 32-bit floating point variable so if you are able to log RAM (advanced, specific ECU ROM definitions required!) you can spot slight changes.

Another and rather easy option is to log parameter Estimated Distance to Oil Change (SSM2 0x00029A, x*100 [km]) and reverse-calculate oil dilution ratio:

10-x/15 [%]

This will provide better oil dilution precision, roughly one decimal place.

Note: Maximum result value is 10 % since underlying value cannot get negative. Use standard oil dilution parameter if you get close to and above 10 %.

Add this to RomRaider logger definitions:

<parameter id="P300" name="Oil Dilution 2" desc="Reverse-calculated from Estimated Distance to Oil Change to get better precision." ecubyteindex="72" ecubit="4" target="1">
    <conversion units="%" expr="10-x/15" format="0.00" gauge_min="0" gauge_max="15" gauge_step="1" />

For newer models that use the new diagnostic protocol, look here: Extended OBD-II

Of course both oil dilution ratio and distance to oil change should be considered rough estimations. So far all Subaru control units cannot measure dilution, there is no suitable sensor attached. Such dilution sensors do exist but add costs, especially development and (reliability) testing. As a result of missing sensor, the ECU must be told to reset oil dilution value when engine oil has been replaced – see Engine Oil Change (DPF models).

10 % oil dilution is critical where ECU will flash DPF light, also stores DTC P1468 Oil Dilution.

We know the oil dilution algorithm in detail and are able to debug issues. Basically, oil dilution gets to increase while active DPF regeneration is being performed. Otherwise it will drop (very) slowly as the ECU estimates oil evaporation. As you might expect, evaporation rate depends on (coolant) temperature, the higher the better. See post Oil Dilution Graph for more details.

Articles regarding oil dilution:


  • 2016-10: confirmed that this also applies to Euro 6 spec
  • 2016-05: added logger.xml snippet