Motor Car History
Technical History of the Motor Car

      

1890s  1900s  1910s  1920s  1930s  1940s  1950s  1960s   1970s  1980s  1990s  2000s  2010s

Toggle Navigation
  • Home
  • Makes and models
  • Motor car History
  • Maintenance Guide
    • Engines By Make
    • Engine Components
    • Electrical & electronic
    • Gearbox & Drivetrain
    • Induction & Exhaust
    • Suspension Types
    • Tyres wheels Brakes
    • Vehicle Body types
  • Trivia
  • Register
  • *Top rated*
  • You are here:  
  • Motor Car
  • Maintenance Guide
  • Electrical & electronic
  • OBD-II PIDs Codes
Technical Guides

OBD-II PIDs Codes Explained

 Car OBD-II PIDs Codes Explained

 

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 light duty vehicles (i.e. less than 8,500 pounds) sold in North America since 1996, as well as medium duty vehicles (i.e. 8,500-14,000 pounds) beginning in 2005, and heavy duty vehicles (i.e. greater than 14,000 pounds) beginning in 2010, are required to support OBD-II diagnostics, using a standardized data link connector, and a subset of the SAE J/1979 defined PIDs (or SAE J/1939 as applicable for medium/heavy duty vehicles), 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 displays 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 $ prefix indicates a hexadecimal radix): $01. Show current data $02. Show freeze frame data $03. Show stored Diagnostic Trouble Codes $04. Clear Diagnostic Trouble Codes and stored values $05. Test results, oxygen sensor monitoring (non CAN only) $06. Test results, other component/system monitoring (Test results, oxygen sensor monitoring for CAN only) $07. Show pending Diagnostic Trouble Codes (detected during current or last driving cycle) $08. Control operation of on-board component/system $09. Request vehicle information $0A. Permanent DTC's (Cleared DTC's)

Vehicle manufacturers 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  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 returnedDescriptionMin valueMax valueUnitsFormula
01004PIDs supported [01 - 20]   Bit encoded [A7..D0] == [PID $01..PID $20] See below.
01014Monitor status since DTCs cleared. (Includes malfunction indicator lamp (MIL) status and number of DTCs.)   Bit encoded. See below.
01022Freeze DTC    
01032Fuel system status   Bit encoded. See below.
01041Calculated engine load value0100%A*100/255
01051Engine coolant temperature-40215°CA-40
01061Short term fuel % trim—Bank 1-100 Subtracting Fuel (Rich Condition)99.22 Adding Fuel (Lean Condition)%(A-128) * 100/128
01071Long term fuel % trim—Bank 1-100 Subtracting Fuel (Rich Condition)99.22 Adding Fuel (Lean Condition)%(A-128) * 100/128
01081Short term fuel % trim—Bank 2-100 Subtracting Fuel (Rich Condition)99.22 Adding Fuel (Lean Condition)%(A-128) * 100/128
01091Long term fuel % trim—Bank 2-100 Subtracting Fuel (Rich Condition)99.22 Adding Fuel (Lean Condition)%(A-128) * 100/128
010A1Fuel pressure0765kPa (gauge)A*3
010B1Intake manifold absolute pressure0255kPa (absolute)A
010C2Engine RPM016,383.75rpm((A*256)+B)/4
010D1Vehicle speed0255km/hA
010E1Timing advance-6463.5° relative to #1 cylinderA/2 - 64
010F1Intake air temperature-40215°CA-40
01102MAF air flow rate0655.35grams/sec((A*256)+B) / 100
01111Throttle position0100%A*100/255
01121Commanded secondary air status   Bit encoded. See below.
01131Oxygen sensors present   [A0..A3] == Bank 1, Sensors 1-4. [A4..A7] == Bank 2...
01142Bank 1, Sensor 1: Oxygen sensor voltage, Short term fuel trim0 -100(lean)1.275 99.2(rich)Volts %A/200 (B-128) * 100/128 (if B==$FF, sensor is not used in trim calc)
01152Bank 1, Sensor 2: Oxygen sensor voltage, Short term fuel trim0 -100(lean)1.275 99.2(rich)Volts %A/200 (B-128) * 100/128 (if B==$FF, sensor is not used in trim calc)
01162Bank 1, Sensor 3: Oxygen sensor voltage, Short term fuel trim0 -100(lean)1.275 99.2(rich)Volts %A/200 (B-128) * 100/128 (if B==$FF, sensor is not used in trim calc)
01172Bank 1, Sensor 4: Oxygen sensor voltage, Short term fuel trim0 -100(lean)1.275 99.2(rich)Volts %A/200 (B-128) * 100/128 (if B==$FF, sensor is not used in trim calc)
01182Bank 2, Sensor 1: Oxygen sensor voltage, Short term fuel trim0 -100(lean)1.275 99.2(rich)Volts %A/200 (B-128) * 100/128 (if B==$FF, sensor is not used in trim calc)
01192Bank 2, Sensor 2: Oxygen sensor voltage, Short term fuel trim0 -100(lean)1.275 99.2(rich)Volts %A/200 (B-128) * 100/128 (if B==$FF, sensor is not used in trim calc)
011A2Bank 2, Sensor 3: Oxygen sensor voltage, Short term fuel trim0 -100(lean)1.275 99.2(rich)Volts %A/200 (B-128) * 100/128 (if B==$FF, sensor is not used in trim calc)
011B2Bank 2, Sensor 4: Oxygen sensor voltage, Short term fuel trim0 -100(lean)1.275 99.2(rich)Volts %A/200 (B-128) * 100/128 (if B==$FF, sensor is not used in trim calc)
011C1OBD standards this vehicle conforms to   Bit encoded. See below.
011D1Oxygen sensors present   Similar to PID 13, but [A0..A7] == [B1S1, B1S2, B2S1, B2S2, B3S1, B3S2, B4S1, B4S2]
011E1Auxiliary input status   A0 == Power Take Off (PTO) status (1 == active) [A1..A7] not used
011F2Run time since engine start065,535seconds(A*256)+B
01204PIDs supported [21 - 40]   Bit encoded [A7..D0] == [PID $21..PID $40] See below.
01212Distance traveled with malfunction indicator lamp (MIL) on065,535km(A*256)+B
01222Fuel Rail Pressure (relative to manifold vacuum)05177.265kPa((A*256)+B) * 0.079
01232Fuel Rail Pressure (diesel, or gasoline direct inject)0655,350kPa (gauge)((A*256)+B) * 10
01244O2S1_WR_lambda(1): Equivalence Ratio Voltage0 01.999 7.999N/A V((A*256)+B)*2/65535 or ((A*256)+B)/32768 ((C*256)+D)*8/65535 or ((C*256)+D)/8192
01254O2S2_WR_lambda(1): Equivalence Ratio Voltage0 02 8N/A V((A*256)+B)*2/65535 ((C*256)+D)*8/65535
01264O2S3_WR_lambda(1): Equivalence Ratio Voltage0 02 8N/A V((A*256)+B)*2/65535 ((C*256)+D)*8/65535
01274O2S4_WR_lambda(1): Equivalence Ratio Voltage0 02 8N/A V((A*256)+B)*2/65535 ((C*256)+D)*8/65535
01284O2S5_WR_lambda(1): Equivalence Ratio Voltage0 02 8N/A V((A*256)+B)*2/65535 ((C*256)+D)*8/65535
01294O2S6_WR_lambda(1): Equivalence Ratio Voltage0 02 8N/A V((A*256)+B)*2/65535 ((C*256)+D)*8/65535
012A4O2S7_WR_lambda(1): Equivalence Ratio Voltage0 02 8N/A V((A*256)+B)*2/65535 ((C*256)+D)*8/65535
012B4O2S8_WR_lambda(1): Equivalence Ratio Voltage0 02 8N/A V((A*256)+B)*2/65535 ((C*256)+D)*8/65535
012C1Commanded EGR0100%A*100/255
012D1EGR Error-10099.22%(A-128) * 100/128
012E1Commanded evaporative purge0100%A*100/255
012F1Fuel Level Input0100%A*100/255
01301# of warm-ups since codes cleared0255N/AA
01312Distance traveled since codes cleared065,535km(A*256)+B
01322Evap. System Vapor Pressure-8,1928,192Pa((A*256)+B)/4 (A and B are two's complement signed)
01331Barometric pressure0255kPa (Absolute)A
01344O2S1_WR_lambda(1): Equivalence Ratio Current0 -1281.999 127.99N/A mA((A*256)+B)/32,768 ((C*256)+D)/256 - 128
01354O2S2_WR_lambda(1): Equivalence Ratio Current0 -1282 128N/A mA((A*256)+B)/32,768 ((C*256)+D)/256 - 128
01364O2S3_WR_lambda(1): Equivalence Ratio Current0 -1282 128N/A mA((A*256)+B)/32768 ((C*256)+D)/256 - 128
01374O2S4_WR_lambda(1): Equivalence Ratio Current0 -1282 128N/A mA((A*256)+B)/32,768 ((C*256)+D)/256 - 128
01384O2S5_WR_lambda(1): Equivalence Ratio Current0 -1282 128N/A mA((A*256)+B)/32,768 ((C*256)+D)/256 - 128
01394O2S6_WR_lambda(1): Equivalence Ratio Current0 -1282 128N/A mA((A*256)+B)/32,768 ((C*256)+D)/256 - 128
013A4O2S7_WR_lambda(1): Equivalence Ratio Current0 -1282 128N/A mA((A*256)+B)/32,768 ((C*256)+D)/256 - 128
013B4O2S8_WR_lambda(1): Equivalence Ratio Current0 -1282 128N/A mA((A*256)+B)/32,768 ((C*256)+D)/256 - 128
013C2Catalyst Temperature Bank 1, Sensor 1-406,513.5°C((A*256)+B)/10 - 40
013D2Catalyst Temperature Bank 2, Sensor 1-406,513.5°C((A*256)+B)/10 - 40
013E2Catalyst Temperature Bank 1, Sensor 2-406,513.5°C((A*256)+B)/10 - 40
013F2Catalyst Temperature Bank 2, Sensor 2-406,513.5°C((A*256)+B)/10 - 40
01404PIDs supported [41 - 60]   Bit encoded [A7..D0] == [PID $41..PID $60] See below.
01414Monitor status this drive cycle   Bit encoded. See below.
01422Control module voltage065.535V((A*256)+B)/1000
01432Absolute load value025,700%((A*256)+B)*100/255
01442Command equivalence ratio02N/A((A*256)+B)/32768
01451Relative throttle position0100%A*100/255
01461Ambient air temperature-40215°CA-40
01471Absolute throttle position B0100%A*100/255
01481Absolute throttle position C0100%A*100/255
01491Accelerator pedal position D0100%A*100/255
014A1Accelerator pedal position E0100%A*100/255
014B1Accelerator pedal position F0100%A*100/255
014C1Commanded throttle actuator0100%A*100/255
014D2Time run with MIL on065,535minutes(A*256)+B
014E2Time since trouble codes cleared065,535minutes(A*256)+B
014F4Maximum value for equivalence ratio, oxygen sensor voltage, oxygen sensor current, and intake manifold absolute pressure0, 0, 0, 0255, 255, 255, 2550, V, mA, kPaA, B, C, D*10
01504Maximum value for air flow rate from mass air flow sensor02550g/sA*10, B, C, and D are reserved for future use
01511Fuel Type   From fuel type table see below
01521Ethanol fuel %0100%A*100/255
01532Absolute Evap system Vapor Pressure0327.675kPa((A*256)+B)/200
01542Evap system vapor pressure-32,76732,768Pa((A*256)+B)-32767
01552Short term secondary oxygen sensor trim bank 1 and bank 3-10099.22%(A-128)*100/128 (B-128)*100/128
01562Long term secondary oxygen sensor trim bank 1 and bank 3-10099.22%(A-128)*100/128 (B-128)*100/128
01572Short term secondary oxygen sensor trim bank 2 and bank 4-10099.22%(A-128)*100/128 (B-128)*100/128
01582Long term secondary oxygen sensor trim bank 2 and bank 4-10099.22%(A-128)*100/128 (B-128)*100/128
01592Fuel rail pressure (absolute)0655,350kPa((A*256)+B) * 10
015A1Relative accelerator pedal position0100%A*100/255
015B1Hybrid battery pack remaining life0100%A*100/255
015C1Engine oil temperature-40210°CA - 40
015D2Fuel injection timing-210.00301.992°(((A*256)+B)-26,880)/128
015E2Engine fuel rate03212.75L/h((A*256)+B)*0.05
015F1Emission requirements to which vehicle is designed   Bit Encoded
01604PIDs supported [61 - 80]   Bit encoded [A7..D0] == [PID $61..PID $80] See below.
01611Driver's demand engine - percent torque-125125%A-125
01621Actual engine - percent torque-125125%A-125
01632Engine reference torque065,535NmA*256+B
01645Engine percent torque data-125125%A-125 Idle B-125 Engine point 1 C-125 Engine point 2 D-125 Engine point 3 E-125 Engine point 4
01652Auxiliary input / output supported   Bit Encoded
01665Mass air flow sensor    
01673Engine coolant temperature    
01687Intake air temperature sensor    
01697Commanded EGR and EGR Error    
016A5Commanded Diesel intake air flow control and relative intake air flow position    
016B5Exhaust gas recirculation temperature    
016C5Commanded throttle actuator control and relative throttle position    
016D6Fuel pressure control system    
016E5Injection pressure control system    
016F3Turbocharger compressor inlet pressure    
01709Boost pressure control    
01715Variable Geometry turbo (VGT) control    
01725Wastegate control    
01735Exhaust pressure    
01745Turbocharger RPM    
01757Turbocharger temperature    
01767Turbocharger temperature    
01775Charge air cooler temperature (CACT)    
01789Exhaust Gas temperature (EGT) Bank 1   Special PID. See below.
01799Exhaust Gas temperature (EGT) Bank 2   Special PID. See below.
017A7Diesel particulate filter (DPF)    
017B7Diesel particulate filter (DPF)    
017C9Diesel Particulate filter (DPF) temperature    
017D1NOx NTE control area status    
017E1PM NTE control area status    
017F13Engine run time    
01804PIDs supported [81 - A0]   Bit encoded [A7..D0] == [PID $81..PID $A0] See below.
018121Engine run time for Auxiliary Emissions Control Device(AECD)    
018221Engine run time for Auxiliary Emissions Control Device(AECD)    
01835NOx sensor    
0184 Manifold surface temperature    
0185 NOx reagent system    
0186 Particulate matter (PM) sensor    
0187 Intake manifold absolute pressure    
01A04PIDs supported [A1 - C0]   Bit encoded [A7..D0] == [PID $A1..PID $C0] See below.
01C04PIDs supported [C1 - E0]   Bit encoded [A7..D0] == [PID $C1..PID $E0] See below.
01C3?????Returns numerous data, including Drive Condition ID and Engine Speed*
01C4?????B5 is Engine Idle Request B6 is Engine Stop Request*
02022Freeze frame trouble code   BCD encoded, See below.
03N/An*6Request trouble codes   3 codes per message frame, BCD encoded. See below.
04N/A0Clear trouble codes / Malfunction indicator lamp (MIL) / Check engine light   Clears all stored trouble codes and turns the MIL off.
050100 OBD Monitor IDs supported ($01 – $20)    
050101 O2 Sensor Monitor Bank 1 Sensor 10.001.275Volts0.005 Rich to lean sensor threshold voltage
050102 O2 Sensor Monitor Bank 1 Sensor 20.001.275Volts0.005 Rich to lean sensor threshold voltage
050103 O2 Sensor Monitor Bank 1 Sensor 30.001.275Volts0.005 Rich to lean sensor threshold voltage
050104 O2 Sensor Monitor Bank 1 Sensor 40.001.275Volts0.005 Rich to lean sensor threshold voltage
050105 O2 Sensor Monitor Bank 2 Sensor 10.001.275Volts0.005 Rich to lean sensor threshold voltage
050106 O2 Sensor Monitor Bank 2 Sensor 20.001.275Volts0.005 Rich to lean sensor threshold voltage
050107 O2 Sensor Monitor Bank 2 Sensor 30.001.275Volts0.005 Rich to lean sensor threshold voltage
050108 O2 Sensor Monitor Bank 2 Sensor 40.001.275Volts0.005 Rich to lean sensor threshold voltage
050109 O2 Sensor Monitor Bank 3 Sensor 10.001.275Volts0.005 Rich to lean sensor threshold voltage
05010A O2 Sensor Monitor Bank 3 Sensor 20.001.275Volts0.005 Rich to lean sensor threshold voltage
05010B O2 Sensor Monitor Bank 3 Sensor 30.001.275Volts0.005 Rich to lean sensor threshold voltage
05010C O2 Sensor Monitor Bank 3 Sensor 40.001.275Volts0.005 Rich to lean sensor threshold voltage
05010D O2 Sensor Monitor Bank 4 Sensor 10.001.275Volts0.005 Rich to lean sensor threshold voltage
05010E O2 Sensor Monitor Bank 4 Sensor 20.001.275Volts0.005 Rich to lean sensor threshold voltage
05010F O2 Sensor Monitor Bank 4 Sensor 30.001.275Volts0.005 Rich to lean sensor threshold voltage
050110 O2 Sensor Monitor Bank 4 Sensor 40.001.275Volts0.005 Rich to lean sensor threshold voltage
050201 O2 Sensor Monitor Bank 1 Sensor 10.001.275Volts0.005 Lean to Rich sensor threshold voltage
050202 O2 Sensor Monitor Bank 1 Sensor 20.001.275Volts0.005 Lean to Rich sensor threshold voltage
050203 O2 Sensor Monitor Bank 1 Sensor 30.001.275Volts0.005 Lean to Rich sensor threshold voltage
050204 O2 Sensor Monitor Bank 1 Sensor 40.001.275Volts0.005 Lean to Rich sensor threshold voltage
050205 O2 Sensor Monitor Bank 2 Sensor 10.001.275Volts0.005 Lean to Rich sensor threshold voltage
050206 O2 Sensor Monitor Bank 2 Sensor 20.001.275Volts0.005 Lean to Rich sensor threshold voltage
050207 O2 Sensor Monitor Bank 2 Sensor 30.001.275Volts0.005 Lean to Rich sensor threshold voltage
050208 O2 Sensor Monitor Bank 2 Sensor 40.001.275Volts0.005 Lean to Rich sensor threshold voltage
050209 O2 Sensor Monitor Bank 3 Sensor 10.001.275Volts0.005 Lean to Rich sensor threshold voltage
05020A O2 Sensor Monitor Bank 3 Sensor 20.001.275Volts0.005 Lean to Rich sensor threshold voltage
05020B O2 Sensor Monitor Bank 3 Sensor 30.001.275Volts0.005 Lean to Rich sensor threshold voltage
05020C O2 Sensor Monitor Bank 3 Sensor 40.001.275Volts0.005 Lean to Rich sensor threshold voltage
05020D O2 Sensor Monitor Bank 4 Sensor 10.001.275Volts0.005 Lean to Rich sensor threshold voltage
05020E O2 Sensor Monitor Bank 4 Sensor 20.001.275Volts0.005 Lean to Rich sensor threshold voltage
05020F O2 Sensor Monitor Bank 4 Sensor 30.001.275Volts0.005 Lean to Rich sensor threshold voltage
050210 O2 Sensor Monitor Bank 4 Sensor 40.001.275Volts0.005 Lean to Rich sensor threshold voltage
09004mode 9 supported PIDs 01 to 20   Bit encoded
09011x5VIN 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.
09025x5Vehicle identification number (VIN)   Returns the VIN as a multi-frame response using the ISO 15765-2 protocol. This is typically five frames, with the first frame encoding the size and count.
0904variescalibration ID   Returns multiple lines, ASCII coded
09064calibration    

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 00: A request for this PID returns 4 bytes of data. The four bytes are giving information about which of the next 32 PIDs are supported. The response can be decoded like this: If the car response is BE 1F A8 13, then transform that in binary.

             B    E    1    F    A    8    1        3              
            ---- ---- ---- ---- ---- ---- ----  ----------
supported?  1011 1110 0001 1111 1010 1000 0001  0  0  1  1
PID num     1234 5678 9ABC DEF. .... .... .... 1D 1E 1F 20

ex.  0101, 0103, 0104, 0105, 0106, 0107, 010C, 010D, 010E, 010F .... .... .... 011E, 011F

0 = not supported

1 = supported

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. 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:

BitNameDefinition
A0-A6DTC_CNTNumber of confirmed emissions-related DTCs available for display.
A7MILOff or On, indicates if the CEL/MIL is on (or should be on)
B3NO NAME0 = Spark ignition monitors supported 1 = Compression ignition monitors supported
B7RESERVEDRESERVED

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 deceleration
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:

$01  00000001b    OBD-II as defined by the CARB
$02  00000010b    OBD as defined by the EPA
$03  00000011b    OBD and OBD-II
$04  00000100b    OBD-I
$05  00000101b    Not meant to comply with any OBD standard
$06  00000110b    EOBD (Europe)
$07  00000111b    EOBD and OBD-II
$08  00001000b    EOBD and OBD
$09  00001001b    EOBD, OBD and OBD II
$0A  00001010b    JOBD (Japan)
$0B  00001011b    JOBD and OBD II
$0C  00001100b    JOBD and EOBD
$0D  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
 1  0  1  0    A
 1  0  1  1    B
 1  1  0  0    C
 1  1  0  1    D
 1  1  1  0    E
 1  1  1  1    F

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. Hexadecimal characters (0-9,A-F), while relatively rare, are allowed in the last 3 positions of the code itself.

Fuel Type Coding

Mode 1 PID $51 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.

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

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

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 $7DF, which acts as a broadcast address, and accepts responses from any ID in the range $7E8 to $7EF. ECUs that can respond to OBD queries listen both to the functional broadcast ID of $7DF and one assigned ID in the range $7E0 to $7E7. Their response has an ID of their assigned ID plus 8 e.g. $7E8 through $7EF.

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 $7DF.

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 StandardNumber of additional data bytes: 2Mode 01 = show current data; 02 = freeze frame; etc.PID code (e.g.: 05 = Engine coolant temperature)not used (may be 55h)
Vehicle specificNumber of additional data bytes: 3Custom 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 6Custom 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 0value, 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 7Custom 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 0value, 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: 37Fh 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)31hnot used (may be 00h)

 

Related items
ECU related information
  • Electrical & electronic Previous 110 / 166 Next

On Motor Car

  • Maintenance Guide
  • Makes and Models
  • Motor car History
  • Film & TV
  • Your Top Rated *****
  • Join here

log on

Log in to Motor car

  • Forgot your username?
  • Forgot your password?

Welcome To Motor Car

  • Mercedes S-Class
  • Brakes related
  • Cooling System
  • Starter motor related
  • ECU related information
  • Ignition System
  • Fuel system
  • Electrical related
  • Mercedes related
  • Service related
  • injection
  • Sensors
  • Alternator
  • Lighting
  • Battery
  • Gauges
  • Timing related
  • Dynamo
  • Spark plug
  • Vacuum

Help Guide

  • Engine
    • Manufacturers
    • Components
    • Cooling System
    • Cylinder
    • Fuel system
    • Ignition System
    • Starter motor
    • Turbo
    • Crankshaft
    • Piston
    • ECU related
    • Injection
  • Carburettor
    • Holley
    • Solex
    • SU
    • Weber
    • Zenith
    • Stromberg
  • Drivetrain
    • Clutch
    • Gearbox
    • Tyres
    • Wheels
    • Driving techniques
  • Suspension
  • Electrical
  • Vehicle Body
  • Brakes
  • Service Guides
  • Tools

Please help to keep this site active.

Enjoy all of Motor Car Here


Back to Top

© 2025 Motor Car History