Category Archives: Mazda

Injector Codes

Denso Injector DCRI107890 (Denso part# 095000-7890, Subaru part# 16613-AA020) for Euro 4 Subaru Diesel

Introduction

Quote from a DENSO document incl. picture below:

Replacing a Diesel Common Rail Injector:
When replacing a DENSO Diesel Common Rail Injector, marked with a compensation code, it is necessary to register the ID code, printed on the upper part of the injector, with a genuine OEM – or DENSO diagnostic tool, into the electronic control unit (ECU). The injector compensation (ID) code is used to compensate injector production tolerances.
Some vehicles also require Small Injection Quantity Learning.

Denso Injector ID graphic

Subaru’s term for injector compensation or ID code is “injector code“. Dealership diagnostic software (SSM-III, SSM4) has menu items like “Injector Code Display” and “Injector Code New Registration (SSM to ECM)

First off, the engine control unit has no way of measuring actual injected fuel amount, such technology would be expensive for these kind of small fluid quantities. Due to high common rail pressure, even tiny production tolerances result in unwanted injection quantity variations. Obviously, each injector must be registered using its correct cylinder number so the ECU can apply individual adjustments when it is calculating injections. Basically, the ECU accomplishes desired (target) injection quantity by adjusting the duration of injector drive signal.

Since programmed injector codes as well as any other important data is being saved into an extra EEPROM chip, there is no risk of data loss having the car battery disconnected.

Consequences of Wrong or Missing Injector Codes

According to DENSO:

  • Knocking noise
  • Unstable idle
  • Wiggling during driving
  • MIL (Check Engine Lamp) on

Cylinder numbers – Quick Reference

As for a quick reminder, looking at the front of the car into engine bay, cylinder numbers are:

towards back
transmission
  3        4
  1        2
car front (radiator etc.)

Getting Injector Codes via QR Code

Although normally this should not be necessary, injector codes can be read from the actual injector parts even when mounted on the engine and inside the engine bay, therefore not easily accessible. Taking a picture using a mirror tool is relatively easy, no need to disassemble any parts:

Injector QR Cyl2 small

While the injector code label itself is hidden by the (white) electrical connector, its QR code is visible by default.
Make sure the QR code on the photo is as sharp as possible and has sufficient resolution. At the car I usually just try to get high quality pictures. Later on my computer I simply select the best pic, then scan QR info straight off the computer screen using a smartphone.

Using an image manipulation program (i.e. GIMP, PhotoShop) in order to improve the QR code area can result in much better QR detection. In my case, this was not needed as the app can also detect inverted QR (light code on dark background).
Android app tested: “Barcode Scanner” from F-Droid repository. Check settings → Invert scan.

As an example, the following pic is the extracted and improved QR code portion from above picture. I used these steps in GIMP: crop, perspective correction, grayscale, invert, brightness & contrast . You should be able to scan this:

Injector QR Cyl2 processedScanning captured QR code results in a line of text containing 49 characters:

7890AA0200809118736B30000000000E9EBEBECF300000045

First 19 chars:

7890AA0200809118736
  • First four chars 7890 match Denso basic part number.
  • AA020 is also found in Subaru part# 16613-AA020
  • Possibly contains production date 2008-09-11 ?
  • Serial# ?

Injector Code Format

Remaining 30 chars is the exact injector code needed for ECU. These chars must be in hexadecimal [0-9, A-F] form as they are transmitted as 15 bytes to and from the ECU:

B30000000000E9EBEBECF300000045
Byte index [0..14] Content
0 const, sort of generation ID, verified by ECU:

  • Euro 4: B3
  • Euro 5: B2
  • Euro 6: B6
1..12 12 payload bytes containing correction data, type int8, for up to 12 pre-defined correction points. Each signed byte must be within range [-125, 125]. In other words, the following five bytes are not allowed: 7E, 7F, 80, 81, 82.
13 const 00
14 simple XOR checksum

Resultant properly formatted injector code (left to right, 4 chars per block):

B300    0000
0000    E9EB
EBEC    F300
0000    45

Notes

Invalid codes will be rejected! Euro 5+ will return NRC 0x31 (request out of range).
Injector code data is not compatible between common rail system generations due to differing correction points! Euro 4 uses fewer points (10) than E5+ (12). Therefore, for example, programming a Euro 5 injector code into Euro 4 ECU will not work and vice versa.

Software

AFAIK, Denso’s own PC diagnostic software has the ability to read from a QR scanner device, Subaru OEM application SSM-III does not – need to type in codes manually.

Protocols needed for injector code display & registration:

  • Euro 4: SSM2 via Serial
  • Euro 5/6: Extended OBD-II

As far as we know, there is no free/open-source software for this yet.

EcuTek tool probably supports injector coding (up to Euro 5 ?).

Other Brands

Many other car brands are based on Denso diesel software. These often use similar 15 byte injector codes as well. However, injectors and pre-defined correction points usually differ!

Mazda CX-5 (SkyActiv-D 2.2)

Piezo injectors! 15 bytes; first byte: 3C; pressure levels and corrections points differ vs. Subaru.

Mazda terminology: fuel injector code programming, injector correction factors

Updates

  • 2017-05: additional notes and details
  • 2016-04-03: Euro 6
Advertisements

Fuel Consumption

Consumption Display Correction

It is the ECU software that estimates fuel consumption as it calculates all individual injections (multiple per stroke) anyway. Based on injection quantity demand it will calculate injector drive time, taking conditions like rail pressure and fuel temperature into account. It cannot measure fuel flow directly as this would require expensive equipment – tracking fuel flow + return flow accurately, all temperature compensated.
In reality most drivers notice some trip computer offset vs. actual consumption calculated at gas station fill-up. Usually the displayed value is too optimistic. The offset may depend on driving conditions and fuel quality. Often enough it is roughly constant for an individual driver so it is still useful information.

We offer fuel consumption display correction by patching ECU software.
Simple solution is to derive a constant factor.

E.g. indicated 6.6 litre/100km vs. 7.0 actual → correction factor = 7.0 / 6.6 = 106.1 %.
After modifying and reprogramming ECU ROM, fuel consumption CAN value (ECU output, [mm³/s]) will be adjusted accordingly, to be picked up by combination meter computer. This one calculates all trip values, finally sends display control commands to center display over serial connection.

Injecting complex ECU subroutine f(torque, temp, rpm, …) and/or table data is also possible, requires measurement data in the first place, though.

DPF Active Regeneration

As you may have noticed, active DPF regeneration has a big impact on instant fuel consumption. All injection parts are included in CAN consumption value, therefore post-injections are noticeable in center display when it is set to current consumption mode.
Collected CAN data showed ~300 % actual fuel consumption at idle when active regeneration is in progress, mainly due to post-injections and intake air throttling in order to heat up the DPF, compared to normal idling with regeneration off.

Idling at 800 rpm, coolant temperature ~90°C both times:

Item Unit Normal Active Regeneration
Injection Amount mm³/st 3.3 12 1
Fuel Consumption mm³/s 88 319
cm³/s 0.088 0.319
litre/h 0.32 1.15

1) Calculated from CAN value, SSM2 item “Final Injection Amount” would indicate 4.0 mm³/st (!). Logged data suggests this SSM2 parameter matches CAN consumption value as long as post-injections are not occurring (DPF active regeneration). To get fuel consumption, best way is to parse the CAN fuel flow value instead.

Formulas

Other Brands

Mazda CX-5 (SkyActiv-D 2.2)

Fuel consumption algorithm and correction works similarly.

Injector Learning / Calibration

Applies to all known Boxer Diesel models, Euro 4/5/6.
Injector learning (micro quantity calibration) procedure is supposed to improve injection accuracy of small injections, improving vibrations, noise, fuel economy etc. The ECU measures engine speed changes, derives learning values and uses them from there on.

Tiny fuel injections, achieved through very short pulses, are especially sensitive to mechanical wear inside injectors. Remember, the ECU does not know how much fuel is actually being sprayed into the cylinders. However, by measuring acceleration (crankshaft speed changes) after at each cylinder’s power stroke, it can adjust injection pulses to achieve a balance across cylinders.

Normally, a power stroke consists of two or three individual injections, main injection always being the largest one. For micro quantity calibration, the software does things differently. It divides the necessary fuel to hold engine speed into more and evenly small injections so that only short pulses matter and differences in injected amounts can be compensated.
The entire procedure is done in two ways:

  1. Automatically by ECU when idling (~800 rpm), for example at traffic light stop. There’s a delay of 5 seconds (stock calibration) till commencement. Then the actual process takes roughly a minute to complete. In this auto-mode the software only goes through first 4 pressure levels. ECU will try again later if it could not finish.
  2. Compulsory using Subaru dealer software (open source solution is planned). In addition to auto-mode, it uses higher common rail pressure, revving the engine up to 1,200 rpm at 5th pressure level which is not acceptable in auto-mode.

Injector Learning Chart

Either way, the operation causes distinct engine sound due to special injection patterns, easy to recognize. Also altering common rail pressure to the next pressure level causes noise to change.

You can use logging (Subaru specific protocols) in order to monitor related parameters:

  • injector learning status (ON/OFF)
  • injection quantity learning values [ms] (4 cylinders times 5 pressure levels = 20 values; all zeroes means learning has not been completed successfully)
  • mileage after last learning [km]
  • mileage after injector replacement [km]

As usual, all relevant values are being saved into EEPROM.

Automatic Injector Learning Intervals

In theory, ECU wants to do automatic injector learning at these predefined intervals:

# Odometer
[km]
Interval
[km]
1 50 50
2 200 150
3 350 150
4 950 600
5 1,550 600
6 4,550 3,000
7 7,550 3,000

Confirmed by disassembly from Euro 4/5/6 software. As you can see, the interval is being increased up to 3,000 km.

Above odometer values are theoretical because:

  • For the ECU mileage after last learning matters, not any absolute odometer value.
  • If conditions are not met, learning process is being delayed, trying again at next occasion, increasing all further odometer numbers.
  • ECU internal odometer is not very precise, it will drift off from combination meter odometer over time.

Injector Learning Conditions

Basically, engine must be warm, around 80°C coolant temperature. Lots of parameters must be within pre-defined ranges (fuel temperature, accelerator not depressed, battery voltage 12..15 Volts, …).

Video Links

Courtesy of contributors posting their videos.

Automatic learning

Compulsory

Tested

  • Adjusting internal variable “mileage after last learning”, i.e. setting to 3000+ km triggers automatic calibration ASAP.
  • Adjusting ECU odometer, i.e. to re-synchronize with dashboard value.

Other Brands

Many other car brands are based on Denso diesel software.

Mazda SkyActiv-D 2.2 (CX-5)

  • Piezo injectors!
  • 20x “Fuel injection learning value …” [µs] (FI_LRN_{pressure level, cyl}) monitoring PIDs.
Automatic learning

3 pressure levels (350, 650, 950 bar = 5080, 9430, 13780 psi)
Learning interval up to 2,000 km.

Compulsory learning

2 additional pressure levels (1400, 1970 bar = 20310, 28570 psi), at increased engine speed.