OBD-II

Read http://en.wikipedia.org/wiki/OBD-II_PIDs for OBD-II Parameter IDs, message format etc.
All example data has been tested on Impreza Diesel Euro 4 (CID: JZ2F401A).
2009/2010 Impreza/Forester share exact same OBD-II support.
2008/2009 Legacy/Outback differ as these have open-type DPF.

Table of Contents

Connection

Mode 0x01 “Show current data”
Mode 0x01 PID 0x00: Request PIDs supported [01 – 20]
Mode 0x01 PID 0x05: Engine Coolant Temperature
Mode 0x01 PID 0x1C: OBD standards this vehicle conforms to
Mode 0x01 PID 0x20: Request PIDs supported [21 – 40]
Mode 0x01 PID 0x40: Request PIDs supported [41 – 60]

Mode 0x09 “Request vehicle information”
Mode 0x09 PID 0x00: Request PIDs supported [01 – 20]
Mode 0x09 PID 0x02: Vehicle Identification Number (VIN)
Mode 0x09 PID 0x04: Calibration ID (CALID)
Mode 0x09 PID 0x06: Calibration

Connection

Same ISO15765 connection setup as on page SSM2 via CAN is working on Boxer Diesel models at least.
Engine control unit should respond with CAN-ID 0x7E8.
Instead of using tester CAN-ID 0x7E0 you can also use functional CAN-ID 0x7DF instead, results are the same.

Mode 0x01 “Show current data”

Mode 0x01 PID 0x00: Request PIDs supported [01 – 20]

W <CAN-ID Tester> 01 00

Ex W 00 00 07 E0 01 00

Read response:
R <CAN-ID ECU> 41 00 <PIDsSupported[4]>

Ex R 00 00 07 E8 41 00 98 3B 80 13

Taking those four payload bytes as 32 bit unsigned integer, big endian:
0x983B8013 = binary 10011000001110111000000000010011
Bits are [PID 0x01..PID 0x20] (left to right, not usual bit# used in software development).
All ‘1’ bits mean support, looking up wiki table, those 12 out of 32 PIDs are:

  • 0x01: Monitor status since DTCs cleared
  • 0x04: Calculated engine load value
  • 0x05: Engine coolant temperature
  • 0x0B: Intake manifold absolute pressure
  • 0x0C: Engine RPM
  • 0x0D: Vehicle speed
  • 0x0F: Intake air temperature
  • 0x10: MAF air flow rate
  • 0x11: Throttle position
  • 0x1C: OBD standards this vehicle conforms to
  • 0x1F: Run time since engine start
  • 0x20: PIDs supported 0x21-0x40

Mode 0x01 PID 0x05: Engine Coolant Temperature

As an example for sampling easy data.

W <CAN-ID Tester> 01 05

Ex W 00 00 07 E0 01 05

R <CAN-ID ECU> 41 05 <A>

Ex R 00 00 07 E8 41 05 2A

Formula is: A-40 [°C]

→ A = 0x2A = dec 42
→ coolant temperature = 42 – 40 = +2°C

Mode 0x01 PID 0x1C: OBD standards this vehicle conforms to

W <CAN-ID Tester> 01 1C

Ex R 00 00 07 E8 41 1C 06

→ 06 → “EOBD”

Mode 0x01 PID 0x20: Request PIDs supported [21 – 40]

W <CAN-ID Tester> 01 20

Ex W 00 00 07 E0 01 20

Read response:
R <CAN-ID ECU> 41 20 <PIDsSupported[4]>

Ex R 00 00 07 E8 41 20 A0 01 A0 15

0xA001A015 = binary 10100000000000011010000000010101
Bits are [PID 0x21..PID 0x40], → 8/32 supported PIDs:

  • 0x21: Distance traveled with MIL on
  • 0x23: Fuel Rail Pressure (diesel)
  • 0x30: Number of warm-ups since codes cleared
  • 0x31: Distance traveled since codes cleared
  • 0x33: Barometric pressure
  • 0x3C: Catalyst Temperature Bank 1, Sensor 1 (→ Exhaust Gas Temperature at Catalyst Inlet)
  • 0x3E: Catalyst Temperature Bank 1, Sensor 2 (→ Exhaust Gas Temperature at DPF Inlet)
  • 0x40: PIDs supported 0x41-0x60

Mode 0x01 PID 0x40: Request PIDs supported [41 – 60]

W <CAN-ID Tester> 01 40

Ex W 00 00 07 E0 01 40

Read response:
R <CAN-ID ECU> 41 40 <PIDsSupported[4]>

Ex R 00 00 07 E8 41 40 44 D0 00 00

0x44D00000 = binary 01000100110100000000000000000000
Bits are [PID 0x41..PID 0x60], → 5/32 supported PIDs:

  • 0x42: Control module voltage (→ Battery Voltage)
  • 0x46: Ambient air temperature (→ Inlet Air Temperature)
  • 0x49: Accelerator pedal position D (→ Accelerator Main Sensor)
  • 0x4A: Accelerator pedal position E (→ Accelerator Sub Sensor)
  • 0x4C: Commanded throttle actuator

Mode 0x09 “Request vehicle information”

Mode 0x09 PID 0x00: Request PIDs supported [01 – 20]

W <CAN-ID Tester> 09 00

Ex R <CAN-ID ECU> 49 00 54 00 00 00
0x54000000 = binary 01010100000000000000000000000000

  • 0x02: Vehicle Identification Number (VIN)
  • 0x04: Calibration ID (CALID)
  • 0x06: Calibration (→ CVN)

Mode 0x09 PID 0x02: Vehicle Identification Number (VIN)

W <CAN-ID Tester> 09 02

R <CAN-ID ECU> 49 02 01 <VIN[17] as ASCII characters>
J2534 message data size: 24 (4 + 3 + 17)

Ex R 00 00 07 E8 49 02 01 4A 46 31 ** ** ** ** ** ** ** ** 31 32 33 34 35 36
(redacted)
→ VIN = "JF1********123456"

By the way, ASCII-digits are easy to recognize right away from hex:
0x30 = “0”, 0x31 = “1”, …, 0x39 = “9”

Mode 0x09 PID 0x04: Calibration ID (CALID, CID)

W <CAN-ID Tester> 09 04

R <CAN-ID ECU> 49 04 01 <CALID[16] as ASCII characters>

Ex R <CAN-ID ECU> 49 04 01 4A 5A 32 46 34 30 31 41 00 00 00 00 00 00 00 00

DataSize: 23 (4 + 3 + 16)
One has to cut off trailing zero bytes on this one. AFAIK Subaru only uses 8 char CIDs everywhere.
4A 5A 32 46 34 30 31 41 = "JZ2F401A"

Mode 0x09 PID 0x06: Calibration

Subaru reports CVN (Calibration Verification Number) on this one.
W <CAN-ID Tester> 09 06

Ex R <CAN-ID ECU> 49 06 02 F5 AD 71 42 FB 84 17 34
DataSize: 15 ( 4 + 3 + 8 )
Directly reports the CVN hex bytes (8 bytes for diesel models):
→ CID = "F5AD7142 FB841734"

One response to “OBD-II

  1. Pingback: ('09-'13) 2010 Forester.... NO boost!! - Subaru Forester Owners Forum

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s