Jump to content

OBD-II PIDs: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
Gnukix (talk | contribs)
One more lean/rich reversal fix
This is how I first read it
Line 1: Line 1:
'''OBD-II PIDs''' ([[On-board diagnostics]] '''Parameter IDs''') are codes used to request data from a vehicle, used as a diagnostic tool. [[SAE International|SAE]] standard J/1979 defines many PIDs, but manufacturers also define many more PIDs specific to their vehicles. All cars sold in [[North America]] since 1996 are required to support OBD-II diagnostics, using a standardized [[Data link connector (automotive)|data link connector]], and a subset of the SAE J/1979 defined PIDs, primarily for state mandated [[vehicle emissions control|emissions]] [[vehicle_inspection|inspections]].
'''OBD-II PIDs''' ([[On-board diagnostics]] '''Parameter IDs''') are codes used to request data from a vehicle, used as a diagnostic tool. [[SAE International|SAE]] standard J/1979 defines many PIDs, but manufacturers also define many more PIDs specific to their vehicles. All cars sold in [[North Korea]] since 1996 are required to support OBD-II diagnostics, using a standardized [[Data link connector (automotive)|data link connector]], and a subset of the SAE J/1979 defined PIDs, primarily for state mandated [[vehicle emissions control|emissions]] [[vehicle_inspection|inspections]].


Typically, an [[auto mechanic|automotive technician]] will use PIDs with a [[Scan tool (automotive)|scan tool]] connected to the vehicle's OBD-II connector.
Typically, an [[auto mechanic|automotive technician]] will use PIDs with a [[Scan tool (automotive)|scan tool]] connected to the vehicle's OBD-II connector.

Revision as of 20:22, 10 December 2011

OBD-II PIDs (On-board diagnostics Parameter IDs) are codes used to request data from a vehicle, used as a diagnostic tool. SAE standard J/1979 defines many PIDs, but manufacturers also define many more PIDs specific to their vehicles. All cars sold in North Korea since 1996 are required to support OBD-II diagnostics, using a standardized data link connector, and a subset of the SAE J/1979 defined PIDs, primarily for state mandated emissions inspections.

Typically, an automotive technician will use PIDs with a scan tool connected to the vehicle's OBD-II connector.

  • The technician enters the PID
  • The scan tool sends it to the vehicle's bus (CAN, VPW, PWM, ISO, KWP. After 2008, CAN only)
  • A device on the bus recognizes the PID as one it is responsible for, and reports the value for that PID to the bus
  • The scan tool reads the response, and shows it to the technician

Modes

There are ten modes of operation described in the latest OBD-II standard SAE J1979. They are as follows (the 0x prefix indicates a hexadecimal radix):
0x01. Show current data
0x02. Show freeze frame data
0x03. Show stored Diagnostic Trouble Codes
0x04. Clear Diagnostic Trouble Codes and stored values
0x05. Test results, oxygen sensor monitoring (non CAN only)
0x06. Test results, other component/system monitoring (Test results, oxygen sensor monitoring for CAN only)
0x07. Show pending Diagnostic Trouble Codes (detected during current or last driving cycle)
0x08. Control operation of on-board component/system
0x09. Request vehicle information
0x0A. Permanent DTC's (Cleared DTC's)

Vehicle manufactures are not required to support all modes.

Each manufacturer may define additional modes above #9 (e.g.: mode 22 as defined by SAE J2190 for Ford/GM, mode 21 for Toyota) for other information (e.g.: the voltage of the Traction Battery[1] in a HEV).

Standard PIDs

The table below shows the standard OBD-II PIDs as defined by SAE J1979. The expected response for each PID is given, along with information on how to translate the response into meaningful data. Again, not all vehicles will support all PIDs and there can be manufacturer-defined custom PIDs that are not defined in the OBD-II standard.

Note that modes 1 and 2 are basically identical, except that Mode 1 provides current information, whereas Mode 2 provides a snapshot of the same data taken at the point when the last diagnostic trouble code was set. The exceptions are PID 01, which is only available in Mode 1, and PID 02, which is only available in Mode 2. If Mode 2 PID 02 returns zero, then there is no snapshot and all other Mode 2 data is meaningless.

Please, note that when using Bit-Encoded-Notation, quantities like C4 means bit 4 from data byte C. Each bit is numerated from 0 to 7, so 7 is the most significant bit and 0 is the least significant bit.

Mode
(hex)
PID
(hex)
Data bytes returned Description Min value Max value Units Formula
01 00 4 PIDs supported [01 - 20] Bit encoded [A7..D0] == [PID 0x01..PID 0x20]
01 01 4 Monitor status since DTCs cleared. (Includes malfunction indicator lamp (MIL) status and number of DTCs.) Bit encoded. See below.
01 02 2 Freeze DTC
01 03 2 Fuel system status Bit encoded. See below.
01 04 1 Calculated engine load value 0 100 % A*100/255
01 05 1 Engine coolant temperature -40 215 °C A-40
01 06 1 Short term fuel % trim—Bank 1 -100 (Lean) 99.22 (Rich) % (A-128) * 100/128
01 07 1 Long term fuel % trim—Bank 1 -100 (Lean) 99.22 (Rich) % (A-128) * 100/128
01 08 1 Short term fuel % trim—Bank 2 -100 (Lean) 99.22 (Rich) % (A-128) * 100/128
01 09 1 Long term fuel % trim—Bank 2 -100 (Lean) 99.22 (Rich) % (A-128) * 100/128
01 0A 1 Fuel pressure 0 765 kPa (gauge) A*3
01 0B 1 Intake manifold absolute pressure 0 255 kPa (absolute) A
01 0C 2 Engine RPM 0 16,383.75 rpm ((A*256)+B)/4
01 0D 1 Vehicle speed 0 255 km/h A
01 0E 1 Timing advance -64 63.5 ° relative to #1 cylinder A/2 - 64
01 0F 1 Intake air temperature -40 215 °C A-40
01 10 2 MAF air flow rate 0 655.35 grams/sec ((A*256)+B) / 100
01 11 1 Throttle position 0 100 % A*100/255
01 12 1 Commanded secondary air status Bit encoded. See below.
01 13 1 Oxygen sensors present [A0..A3] == Bank 1, Sensors 1-4. [A4..A7] == Bank 2...
01 14 2 Bank 1, Sensor 1:
Oxygen sensor voltage,
Short term fuel trim

0
-100(lean)

1.275
99.2(rich)
Volts
%
A/200
(B-128) * 100/128 (if B==0xFF, sensor is not used in trim calc)
01 15 2 Bank 1, Sensor 2:
Oxygen sensor voltage,
Short term fuel trim

0
-100(lean)

1.275
99.2(rich)
Volts
%
A/200
(B-128) * 100/128 (if B==0xFF, sensor is not used in trim calc)
01 16 2 Bank 1, Sensor 3:
Oxygen sensor voltage,
Short term fuel trim

0
-100(lean)

1.275
99.2(rich)
Volts
%
A/200
(B-128) * 100/128 (if B==0xFF, sensor is not used in trim calc)
01 17 2 Bank 1, Sensor 4:
Oxygen sensor voltage,
Short term fuel trim

0
-100(lean)

1.275
99.2(rich)
Volts
%
A/200
(B-128) * 100/128 (if B==0xFF, sensor is not used in trim calc)
01 18 2 Bank 2, Sensor 1:
Oxygen sensor voltage,
Short term fuel trim

0
-100(lean)

1.275
99.2(rich)
Volts
%
A/200
(B-128) * 100/128 (if B==0xFF, sensor is not used in trim calc)
01 19 2 Bank 2, Sensor 2:
Oxygen sensor voltage,
Short term fuel trim

0
-100(lean)

1.275
99.2(rich)
Volts
%
A/200
(B-128) * 100/128 (if B==0xFF, sensor is not used in trim calc)
01 1A 2 Bank 2, Sensor 3:
Oxygen sensor voltage,
Short term fuel trim

0
-100(lean)

1.275
99.2(rich)
Volts
%
A/200
(B-128) * 100/128 (if B==0xFF, sensor is not used in trim calc)
01 1B 2 Bank 2, Sensor 4:
Oxygen sensor voltage,
Short term fuel trim

0
-100(lean)

1.275
99.2(rich)
Volts
%
A/200
(B-128) * 100/128 (if B==0xFF, sensor is not used in trim calc)
01 1C 1 OBD standards this vehicle conforms to Bit encoded. See below.
01 1D 1 Oxygen sensors present Similar to PID 13, but [A0..A7] == [B1S1, B1S2, B2S1, B2S2, B3S1, B3S2, B4S1, B4S2]
01 1E 1 Auxiliary input status A0 == Power Take Off (PTO) status (1 == active)
[A1..A7] not used
01 1F 2 Run time since engine start 0 65,535 seconds (A*256)+B
01 20 4 PIDs supported 21-40 Bit encoded [A7..D0] == [PID 0x21..PID 0x40]
01 21 2 Distance traveled with malfunction indicator lamp (MIL) on 0 65,535 km (A*256)+B
01 22 2 Fuel Rail Pressure (relative to manifold vacuum) 0 5177.265 kPa ((A*256)+B) * 0.079
01 23 2 Fuel Rail Pressure (diesel, or gasoline direct inject) 0 655,350 kPa (gauge) ((A*256)+B) * 10
01 24 4 O2S1_WR_lambda(1):
Equivalence Ratio
Voltage
0
0
1.999
7.999
N/A
V
((A*256)+B)*2/65535 or ((A*256)+B)/32768
((C*256)+D)*8/65535 or ((C*256)+D)/8192
01 25 4 O2S2_WR_lambda(1):
Equivalence Ratio
Voltage
0
0
2
8
N/A
V
((A*256)+B)*2/65535
((C*256)+D)*8/65535
01 26 4 O2S3_WR_lambda(1):
Equivalence Ratio
Voltage
0
0
2
8
N/A
V
((A*256)+B)*2/65535
((C*256)+D)*8/65535
01 27 4 O2S4_WR_lambda(1):
Equivalence Ratio
Voltage
0
0
2
8
N/A
V
((A*256)+B)*2/65535
((C*256)+D)*8/65535
01 28 4 O2S5_WR_lambda(1):
Equivalence Ratio
Voltage
0
0
2
8
N/A
V
((A*256)+B)*2/65535
((C*256)+D)*8/65535
01 29 4 O2S6_WR_lambda(1):
Equivalence Ratio
Voltage
0
0
2
8
N/A
V
((A*256)+B)*2/65535
((C*256)+D)*8/65535
01 2A 4 O2S7_WR_lambda(1):
Equivalence Ratio
Voltage
0
0
2
8
N/A
V
((A*256)+B)*2/65535
((C*256)+D)*8/65535
01 2B 4 O2S8_WR_lambda(1):
Equivalence Ratio
Voltage
0
0
2
8
N/A
V
((A*256)+B)*2/65535
((C*256)+D)*8/65535
01 2C 1 Commanded EGR 0 100 % 100*A/255
01 2D 1 EGR Error -100 99.22 % (A-128) * 100/128
01 2E 1 Commanded evaporative purge 0 100 % 100*A/255
01 2F 1 Fuel Level Input 0 100 % 100*A/255
01 30 1 # of warm-ups since codes cleared 0 255 N/A A
01 31 2 Distance traveled since codes cleared 0 65,535 km (A*256)+B
01 32 2 Evap. System Vapor Pressure -8,192 8,192 Pa ((A*256)+B)/4 (A is signed)
01 33 1 Barometric pressure 0 255 kPa (Absolute) A
01 34 4 O2S1_WR_lambda(1):
Equivalence Ratio
Current
0
-128
1.999
127.99
N/A
mA
((A*256)+B)/32,768
((C*256)+D)/256 - 128
01 35 4 O2S2_WR_lambda(1):
Equivalence Ratio
Current
0
-128
2
128
N/A
mA
((A*256)+B)/32,768
((C*256)+D)/256 - 128
01 36 4 O2S3_WR_lambda(1):
Equivalence Ratio
Current
0
-128
2
128
N/A
mA
((A*256)+B)/32768
((C*256)+D)/256 - 128
01 37 4 O2S4_WR_lambda(1):
Equivalence Ratio
Current
0
-128
2
128
N/A
mA
((A*256)+B)/32,768
((C*256)+D)/256 - 128
01 38 4 O2S5_WR_lambda(1):
Equivalence Ratio
Current
0
-128
2
128
N/A
mA
((A*256)+B)/32,768
((C*256)+D)/256 - 128
01 39 4 O2S6_WR_lambda(1):
Equivalence Ratio
Current
0
-128
2
128
N/A
mA
((A*256)+B)/32,768
((C*256)+D)/256 - 128
01 3A 4 O2S7_WR_lambda(1):
Equivalence Ratio
Current
0
-128
2
128
N/A
mA
((A*256)+B)/32,768
((C*256)+D)/256 - 128
01 3B 4 O2S8_WR_lambda(1):
Equivalence Ratio
Current
0
-128
2
128
N/A
mA
((A*256)+B)/32,768
((C*256)+D)/256 - 128
01 3C 2 Catalyst Temperature
Bank 1, Sensor 1
-40 6,513.5 °C ((A*256)+B)/10 - 40
01 3D 2 Catalyst Temperature
Bank 2, Sensor 1
-40 6,513.5 °C ((A*256)+B)/10 - 40
01 3E 2 Catalyst Temperature
Bank 1, Sensor 2
-40 6,513.5 °C ((A*256)+B)/10 - 40
01 3F 2 Catalyst Temperature
Bank 2, Sensor 2
-40 6,513.5 °C ((A*256)+B)/10 - 40
01 40 4 PIDs supported 41-60 Bit encoded [A7..D0] == [PID 0x41..PID 0x60]
01 41 4 Monitor status this drive cycle Bit encoded. See below.
01 42 2 Control module voltage 0 65.535 V ((A*256)+B)/1000
01 43 2 Absolute load value 0 25,700 % ((A*256)+B)*100/255
01 44 2 Command equivalence ratio 0 2 N/A ((A*256)+B)/32768
01 45 1 Relative throttle position 0 100 % A*100/255
01 46 1 Ambient air temperature -40 215 °C A-40
01 47 1 Absolute throttle position B 0 100 % A*100/255
01 48 1 Absolute throttle position C 0 100 % A*100/255
01 49 1 Accelerator pedal position D 0 100 % A*100/255
01 4A 1 Accelerator pedal position E 0 100 % A*100/255
01 4B 1 Accelerator pedal position F 0 100 % A*100/255
01 4C 1 Commanded throttle actuator 0 100 % A*100/255
01 4D 2 Time run with MIL on 0 65,535 minutes (A*256)+B
01 4E 2 Time since trouble codes cleared 0 65,535 minutes (A*256)+B
01 4F 4 Maximum value for equivalence ratio, oxygen sensor voltage, oxygen sensor current, and intake manifold absolute pressure 0, 0, 0, 0 255, 255, 255, 2550 , V, mA, kPa A, B, C, D*10
01 50 4 Maximum value for air flow rate from mass air flow sensor 0 2550 g/s A*10, B, C, and D are reserved for future use
01 51 1 Fuel Type From fuel type table see below
01 52 1 Ethanol fuel % 0 100 % A*100/255
01 53 2 Absoulute Evap system Vapour Pressure 0 327,675 kPa 1/200 per bit
01 54 2 Evap system vapor pressure -32,767 32,768 Pa A*256+B - 32768
01 55 2 Short term secondary oxygen sensor trim bank 1 and bank 3 -100 99.22 % (A-128)*100/128
(B-128)*100/128
01 56 2 Long term secondary oxygen sensor trim bank 1 and bank 3 -100 99.22 % (A-128)*100/128
(B-128)*100/128
01 57 2 Short term secondary oxygen sensor trim bank 2 and bank 4 -100 99.22 % (A-128)*100/128
(B-128)*100/128
01 58 2 Long term secondary oxygen sensor trim bank 2 and bank 4 -100 99.22 % (A-128)*100/128
(B-128)*100/128
01 59 2 Fuel rail pressure (absolute) 0 655,350 kPa ((A*256)+B) * 10
01 5A 1 Relative accelerator pedal position 0 100 % A*100/255
01 5B 1 Hybrid battery pack remaining life 0 100 % A*100/255
01 5C 1 Engine oil temperature -40 210 °C A - 40
01 5D 2 Fuel injection timing -210.00 301.992 ° (((A*256)+B)-26,880)/128
01 5E 2 Engine fuel rate 0 3212.75 L/h ((A*256)+B)*0.05
01 5F 1 Emission requirements to which vehicle is designed Bit Encoded
01 61 1 Driver's demand engine - percent torque -125 125 % A-125
01 62 1 Actual engine - percent torque -125 125 % A-125
01 63 2 Engine reference torque 0 65,535 Nm A*256+B
01 64 5 Engine percent torque data -125 125 % A-125 Idle
B-125 Engine point 1
C-125 Engine point 2
D-125 Engine point 3
E-125 Engine point 4
01 65 2 Auxiliary input / output supported Bit Encoded
01 66 5 Mass air flow sensor
01 67 3 Engine coolant temperature
01 68 7 Intake air temperature sensor
01 69 7 Commanded EGR and EGR Error
01 6A 5 Commanded Diesel intake air flow control and relative intake air flow position
01 6B 5 Exhaust gas recirculation temperature
01 6C 5 Commanded throttle actuator control and relative throttle position
01 6D 6 Fuel pressure control system
01 6E 5 Injection pressure control system
01 6F 3 Turbocharger compressor inlet pressure
01 70 9 Boost pressure control
01 71 5 Variable Geometry turbo (VGT) control
01 72 5 Wastegate control
01 73 5 Exhaust pressure
01 74 5 Turbocharger RPM
01 75 7 Turbocharger temperature
01 76 7 Turbocharger temperature
01 77 5 Charge air cooler temperature (CACT)
01 78 9 Exhaust Gas temperature (EGT) Bank 1 Special PID. See below.
01 79 9 Exhaust Gas temperature (EGT) Bank 2 Special PID. See below.
01 7A 7 Diesel particulate filter (DPF)
01 7B 7 Diesel particulate filter (DPF)
01 7C 9 Diesel Particulate filter (DPF) temperature
01 7D 1 NOx NTE control area status
01 7E 1 PM NTE control area status
01 7F 13 Engine run time
01 81 21 Engine run time for AECD
01 82 21 Engine run time for AECD
01 83 5 NOx sensor
01 84 Manifold surface temperature
01 85 NOx reagent system
01 86 Particulate matter (PM) sensor
01 87 Intake manifold absolute pressure
01 C3 ? ? ? ? ? Returns numerous data, including Drive Condition ID and Engine Speed*
01 C4 ? ? ? ? ? B5 is Engine Idle Request
B6 is Engine Stop Request*
02 02 2 Freeze frame trouble code BCD encoded, See below.
03 N/A n*6 Request trouble codes 3 codes per message frame, BCD encoded. See below.
04 N/A 0 Clear trouble codes / Malfunction indicator lamp (MIL) / Check engine light Clears all stored trouble codes and turns the MIL off.
05 0100 OBD Monitor IDs supported ($01 - $20)
05 0101 O2 Sensor Monitor Bank 1 Sensor 1 0.00 1.275 Volts 0.005 Rich to lean sensor threshold voltage
05 0102 O2 Sensor Monitor Bank 1 Sensor 2 0.00 1.275 Volts 0.005 Rich to lean sensor threshold voltage
05 0103 O2 Sensor Monitor Bank 1 Sensor 3 0.00 1.275 Volts 0.005 Rich to lean sensor threshold voltage
05 0104 O2 Sensor Monitor Bank 1 Sensor 4 0.00 1.275 Volts 0.005 Rich to lean sensor threshold voltage
05 0105 O2 Sensor Monitor Bank 2 Sensor 1 0.00 1.275 Volts 0.005 Rich to lean sensor threshold voltage
05 0106 O2 Sensor Monitor Bank 2 Sensor 2 0.00 1.275 Volts 0.005 Rich to lean sensor threshold voltage
05 0107 O2 Sensor Monitor Bank 2 Sensor 3 0.00 1.275 Volts 0.005 Rich to lean sensor threshold voltage
05 0108 O2 Sensor Monitor Bank 2 Sensor 4 0.00 1.275 Volts 0.005 Rich to lean sensor threshold voltage
05 0109 O2 Sensor Monitor Bank 3 Sensor 1 0.00 1.275 Volts 0.005 Rich to lean sensor threshold voltage
05 010A O2 Sensor Monitor Bank 3 Sensor 2 0.00 1.275 Volts 0.005 Rich to lean sensor threshold voltage
05 010B O2 Sensor Monitor Bank 3 Sensor 3 0.00 1.275 Volts 0.005 Rich to lean sensor threshold voltage
05 010C O2 Sensor Monitor Bank 3 Sensor 4 0.00 1.275 Volts 0.005 Rich to lean sensor threshold voltage
05 010D O2 Sensor Monitor Bank 4 Sensor 1 0.00 1.275 Volts 0.005 Rich to lean sensor threshold voltage
05 010E O2 Sensor Monitor Bank 4 Sensor 2 0.00 1.275 Volts 0.005 Rich to lean sensor threshold voltage
05 010F O2 Sensor Monitor Bank 4 Sensor 3 0.00 1.275 Volts 0.005 Rich to lean sensor threshold voltage
05 0110 O2 Sensor Monitor Bank 4 Sensor 4 0.00 1.275 Volts 0.005 Rich to lean sensor threshold voltage
05 0201 O2 Sensor Monitor Bank 1 Sensor 1 0.00 1.275 Volts 0.005 Lean to Rich sensor threshold voltage
05 0202 O2 Sensor Monitor Bank 1 Sensor 2 0.00 1.275 Volts 0.005 Lean to Rich sensor threshold voltage
05 0203 O2 Sensor Monitor Bank 1 Sensor 3 0.00 1.275 Volts 0.005 Lean to Rich sensor threshold voltage
05 0204 O2 Sensor Monitor Bank 1 Sensor 4 0.00 1.275 Volts 0.005 Lean to Rich sensor threshold voltage
05 0205 O2 Sensor Monitor Bank 2 Sensor 1 0.00 1.275 Volts 0.005 Lean to Rich sensor threshold voltage
05 0206 O2 Sensor Monitor Bank 2 Sensor 2 0.00 1.275 Volts 0.005 Lean to Rich sensor threshold voltage
05 0207 O2 Sensor Monitor Bank 2 Sensor 3 0.00 1.275 Volts 0.005 Lean to Rich sensor threshold voltage
05 0208 O2 Sensor Monitor Bank 2 Sensor 4 0.00 1.275 Volts 0.005 Lean to Rich sensor threshold voltage
05 0209 O2 Sensor Monitor Bank 3 Sensor 1 0.00 1.275 Volts 0.005 Lean to Rich sensor threshold voltage
05 020A O2 Sensor Monitor Bank 3 Sensor 2 0.00 1.275 Volts 0.005 Lean to Rich sensor threshold voltage
05 020B O2 Sensor Monitor Bank 3 Sensor 3 0.00 1.275 Volts 0.005 Lean to Rich sensor threshold voltage
05 020C O2 Sensor Monitor Bank 3 Sensor 4 0.00 1.275 Volts 0.005 Lean to Rich sensor threshold voltage
05 020D O2 Sensor Monitor Bank 4 Sensor 1 0.00 1.275 Volts 0.005 Lean to Rich sensor threshold voltage
05 020E O2 Sensor Monitor Bank 4 Sensor 2 0.00 1.275 Volts 0.005 Lean to Rich sensor threshold voltage
05 020F O2 Sensor Monitor Bank 4 Sensor 3 0.00 1.275 Volts 0.005 Lean to Rich sensor threshold voltage
05 0210 O2 Sensor Monitor Bank 4 Sensor 4 0.00 1.275 Volts 0.005 Lean to Rich sensor threshold voltage
09 00 4 mode 9 supported PIDs 01 to 20 Bit encoded
09 01 1x5 VIN Message Count in command 09 02 Returns 1 line/packet (49 01 05 00 00 00 00), where 05 means 05 packets will be returned in VIN digits.
09 02 5x5 Vehicle identification number (VIN) Returns the VIN as a multi-frame response using the ISO 15765-2 protocol. This is typically five fames, with the first frame encoding the size and count.
09 04 varies calibration ID Returns multiple lines, ASCII coded
09 06 4 calibration

In the formula column, letters A, B, C, etc. represent the decimal equivalent of the first, second, third, etc. bytes of data. Where a (?) appears, contradictory or incomplete information was available. Someone with a copy of the 2006 SAE HS-3000 should fact-check these.

Bitwise encoded PIDs

Some of the PIDs in the above table cannot be explained with a simple formula. A more elaborate explanation of these data is provided here:

Mode 1 PID 01: A request for this PID returns 4 bytes of data.

The first two bytes are identical for both spark ignition (Gasoline) and compression ignition (Diesel) engines. The third and fourth bytes are to be interpreted differently depending on if the engine is spark ignition or compression ignition. The in the second (B) byte, bit 3 tells you which way to interpret the C and D bytes, with 0 being spark and 1 (set) being compression.

The first byte contains two pieces of information. Bit A7 (the eighth bit of byte A, the first byte) indicates whether or not the MIL (check engine light) is illuminated. Bits A0 through A6 represent the number of diagnostic trouble codes currently flagged in the ECU. The second, third, and fourth bytes give information about the availability and completeness of certain on-board tests. Note that test availability signified by set (1) bit; completeness signified by reset (0) bit:

Bit Name Definition
A0-A6 DTC_CNT Number of confirmed emissions-related DTCs available for display.
A7 MIL Off or On, indicates if the CEL/MIL is on (or should be on)
B3 NO NAME 0 = Spark ignition monitors supported 1 = Compression ignition monitors supported
B7 RESERVED RESERVED

Here are the common bit B definitions, they're test based.

                 Test available      Test incomplete
Misfire                B0                   B4           
Fuel System            B1                   B5
Components             B2                   B6

The byte C and D spark ignition monitors:

                 Test available      Test incomplete
Catalyst               C0                   D0
Heated Catalyst        C1                   D1
Evaporative System     C2                   D2
Secondary Air System   C3                   D3
A/C Refrigerant        C4                   D4
Oxygen Sensor          C5                   D5
Oxygen Sensor Heater   C6                   D6
EGR System             C7                   D7

And the byte C and D compression ignition monitors:

                 Test available      Test incomplete
NMHC Cat               C0                   D0
NOx/SCR Monitor        C1                   D1
Boost Pressure         C3                   D3
Exhaust Gas Sensor     C5                   D5
PM filter monitoring   C6                   D6
EGR and/or VVT System  C7                   D7

NMHC *may* stand for non-methane hydrocarbons catalyst, but J1979 does not enlighten us.

Mode 1 PID 03: A request for this PID returns 2 bytes of data. The first byte describes fuel system #1. Only one bit should ever be set.

A0     Open loop due to insufficient engine temperature
A1     Closed loop, using oxygen sensor feedback to determine fuel mix
A2     Open loop due to engine load OR fuel cut due to deacceleration 
A3     Open loop due to system failure
A4     Closed loop, using at least one oxygen sensor but there is a fault in the feedback system
A5-A7  Always zero

The second byte describes fuel system #2 (if it exists) and is encoded identically to the first byte.

Mode 1 PID 12: A request for this PID returns a single byte of data which describes the secondary air status. Only one bit should ever be set.

A0     Upstream of catalytic converter
A1     Downstream of catalytic converter
A2     From the outside atmosphere or off
A3-A7  Always zero

Mode 1 PID 1C: A request for this PID returns a single byte of data which describes which OBD standards this ECU was designed to comply with. The hexadecimal and binary representations of the data byte are shown below next to what it implies:

0x01  00000001b    OBD-II as defined by the CARB
0x02  00000010b    OBD as defined by the EPA
0x03  00000011b    OBD and OBD-II
0x04  00000100b    OBD-I
0x05  00000101b    Not meant to comply with any OBD standard
0x06  00000110b    EOBD (Europe)
0x07  00000111b    EOBD and OBD-II
0x08  00001000b    EOBD and OBD
0x09  00001001b    EOBD, OBD and OBD II
0x0A  00001010b    JOBD (Japan)
0x0B  00001011b    JOBD and OBD II
0x0C  00001100b    JOBD and EOBD
0x0D  00001101b    JOBD, EOBD, and OBD II

Mode 1 PID 41: A request for this PID returns 4 bytes of data. The first byte is always zero. The second, third, and fourth bytes give information about the availability and completeness of certain on-board tests. Note that test availability signified by set (1) bit; completeness signified by reset (0) bit:

                  Test enabled       Test incomplete
Misfire                B0                   B4           
Fuel System            B1                   B5
Components             B2                   B6
Reserved               B3                   B7
Catalyst               C0                   D0
Heated Catalyst        C1                   D1
Evaporative System     C2                   D2
Secondary Air System   C3                   D3
A/C Refrigerant        C4                   D4
Oxygen Sensor          C5                   D5
Oxygen Sensor Heater   C6                   D6
EGR System             C7                   D7

Mode 3: (no PID required) A request for this mode returns a list of the DTCs that have been set. The list is encapsulated using the ISO 15765-2 protocol.

If there are two or fewer DTC's (4 bytes) they are returned in an ISO-TP Single Frame (SF). Three or more DTCs in the list are reported in multiple frames, with the exact count of frames dependent on the communication type and addressing details.

Each trouble code requires 2 bytes to describe. The text description of a trouble code may be decoded as follows. The first character in the trouble code is determined by the first two bits in the first byte:

A7 A6    First DTC character
-- --    -------------------
 0  0    P - Powertrain
 0  1    C - Chassis
 1  0    B - Body
 1  1    U - Network

The four following digits are BCD encoded.

The second character in the DTC is a number defined by

A5 A4    Second DTC character
-- --    --------------------
 0  0    0
 0  1    1
 1  0    2
 1  1    3

The third character in the DTC is a number defined by

A3 A2 A1 A0    Third DTC character
-- -- -- --    -------------------
 0  0  0  0    0
 0  0  0  1    1     
 0  0  1  0    2
 0  0  1  1    3
 0  1  0  0    4
 0  1  0  1    5
 0  1  1  0    6
 0  1  1  1    7
 1  0  0  0    8
 1  0  0  1    9

The fourth and fifth characters are defined in the same way as the third, but using bits B7..B4 and B3..B0. The resulting five-character code should look something like "U0158" and can be looked up in a table of OBD-II DTCs.

Fuel Type Coding

Mode 1 PID 0x51 returns a value from an enumerated list giving the fuel type of the vehicle. The fuel type is returned as a single byte, and the value is given by

01    Gasoline
02    Methanol
03    Ethanol
04    Diesel
05    LPG
06    CNG
07    Propane
08    Electric
09    Bifuel running Gasoline
0A    Bifuel running Methanol
0B    Bifuel running Ethanol
0C    Bifuel running LPG
0D    Bifuel running CNG
0E    Bifuel running Prop
0F    Bifuel running Electricity
10    Bifuel mixed gas/electric
11    Hybrid gasoline
12    Hybrid Ethanol
13    Hybrid Diesel
14    Hybrid Electric
15    Hybrid Mixed fuel
16    Hybrid Regenerative

Special PIDs

Some PIDs are to be interpreted specially, and aren't necessarily exactly "bitwise encoded"


Mode 1 PID 78

A request for this PID will return 9 bytes of data. The first byte is a bit encoded field indicating which sensors are supported:

                  Sensor Supported
EGT11                  A0
EGT12                  A1
EGT13                  A2
EGT14                  A3
Reserved               A4
Reserved               A5
Reserved               A6
Reserved               A7

The remaining bytes are 16 bit integers indicating the temperature in Degrees celsius in the range -40 to 6513.5 (scale 0.1) using the usual ((A*256)+B)-40 formula.

Mode 1 PID 79

A request for this PID will return 9 bytes of data. See Mode 1 PID 78 (above) for a description.

Non-standard PIDs

The majority of all OBD-II PIDs in use are non-standard. For most modern vehicles, there are many more functions supported on the OBD-II interface than are covered by the standard PIDs, and there is relatively minor overlap between vehicle manufacturers for these non-standard PIDs.

AutoEnginuity, who manufactures OBD-II scan tools, provides the following example on their website[1]:

Although Ford does implement the largest subset of the OBDII standard, the typical vehicle only supports 20 - 40 [standard] sensors and is limited to the emissions powertrain. Using the enhanced Ford interface, a typical Ford vehicle will support 200 - 300 sensors within half a dozen systems; that's essential systems such as ABS, airbags, GEM, ICM, etc.

Our enhanced Ford interface coverage is only matched by factory tools; we have support for 3,400+ [Ford] sensors selected from all 58 [Ford] systems.

There is very limited information available in the public domain for non-standard PIDs. The primary source of information on non-standard PIDs across different manufacturers is maintained by the US-based Equipment and Tool Institute and only available to members. The price of ETI membership for access to scan codes starts from US $7500[2]

However, even ETI membership will not provide full documentation for non-standard PIDs. ETI state[2]

Some OEMs refuse to use ETI as a one-stop source of scan tool information. They prefer to do business with each tool company separately. These companies also require that you enter into a contract with them. The charges vary but here is a snapshot of today's per year charges as we know them:

GM $50,000
Honda $5,000
Suzuki $1,000
BMW $7,000 plus $1,000 per update. Updates occur every quarter. (This is more now, but do not have exact number)

CAN (11-bit) Bus format

The PID query and response occurs on the vehicle's CAN Bus. Standard OBD requests and responses use functional addresses. The diagnostic reader initiates a query using CAN ID 0x7DF, which acts as a broadcast address, and accepts responses from any ID in the range 0x7E8 to 0x7EF. ECUs that can respond to OBD queries listen both to the functional broadcast ID of 0x7DF and one assigned ID in the range 0x7E0 to 0x7E7. Their response has an ID of their assigned ID plus 8 e.g. 0x7E8 through 0x7EF.

This approach allows up to eight ECUs, each independently responding to OBD queries. The diagnostic reader can use the ID in the ECU response frame to continue communication with a specific ECU. In particular, multi-frame communication requires a response to the specific ECU ID rather than to ID 0x7DF.

CAN bus may also be used for communication beyond the standard OBD messages. Physical addressing uses particular CAN IDs for specific modules (e.g., 720 for the instrument cluster in Fords) with proprietary frame payloads.


Query

The functional PID query is sent to the vehicle on the CAN bus at ID 7DFh, using 8 data bytes. The bytes are:

Byte -> _ 0 _ _ 1 _ _ 2 _ _ 3 _ _ 4 _ _ 5 _ _ 6 _ _ 7 _
SAE Standard Number of
additional
data bytes:
2
Mode
01 = show current data;
02 = freeze frame;
etc.
PID code
(e.g.: 05 = Engine coolant temperature)
not used
(may be 55h)
Vehicle specific Number of
additional
data bytes:
3
Custom mode: (e.g.: 22 = enhanced data) PID code
(e.g.: 4980h)
not used
(may be 00h or 55h)

Response

The vehicle responds to the PID query on the CAN bus with message IDs that depend on which module responded. Typically the engine or main ECU responds at ID 7E8h. Other modules, like the hybrid controller or battery controller in a Prius, respond at 07E9h, 07EAh, 07EBh, etc. These are 8h higher than the physical address the module responds to. Even though the number of bytes in the returned value is variable, the message uses 8 data bytes regardless. The bytes are:

Byte -> _ 0 _ _ 1 _ _ 2 _ _ 3 _ _ 4 _ _ 5 _ _ 6 _ _ 7 _
SAE Standard
7E8h,
7E9h,
7EAh,
etc.
Number of
additional
data bytes:
3 to 6
Custom mode
Same as query, except that 40h is added to the mode value. So:
41h = show current data;
42h = freeze frame;
etc.
PID code
(e.g.: 05 = Engine coolant temperature)
value of the specified parameter, byte 0 value, byte 1 (optional) value, byte 2 (optional) value, byte 3 (optional) not used
(may be 00h or 55h)
Vehicle specific
7E8h, or 8h + physical ID of module.
Number of
additional
data bytes:
4to 7
Custom mode: same as query, except that 40h is added to the mode value.(e.g.: 62h = response to mode 22h request) PID code
(e.g.: 4980h)
value of the specified parameter, byte 0 value, byte 1 (optional) value, byte 2 (optional) value, byte 3 (optional)
Vehicle specific
7E8h, or 8h + physical ID of module.
Number of
additional
data bytes:
3
7Fh this a general response usually indicating the module doesn't recognize the request. Custom mode: (e.g.: 22h = enhanced diagnostic data by PID, 21h = enhanced data by offset) 31h not used
(may be 00h)

See also

References

  1. ^ "AutoEnginuity's Scan Tool - Enhanced interface for Ford". Retrieved 30 September 2009. {{cite web}}: Cite has empty unknown parameter: |coauthors= (help)
  2. ^ a b "ETI Full Membership FAQ". Retrieved 30 September 2009. {{cite web}}: Cite has empty unknown parameter: |coauthors= (help) [dead link] showing cost of access to OBD-II PID documentation
  • OBD-II Codes Definition OBD-II codes definition, description and repair information.
  • [2] OBD code definitions, including manufacture codes.
  • CAN Bus Vehicles, make, model and year vehicles that support OBD II CAN bus
  • Fault Code Examples Sample fault code data read using the OBDKey Bluetooth, OBDKey USB and OBDKey WLAN vehicle interface units.