OBD-II PIDs

Last updated

OBD-II PIDs (On-board diagnostics Parameter IDs) are codes used to request data from a vehicle, used as a diagnostic tool.

Contents

SAE standard J1979 defines many OBD-II PIDs. All on-road vehicles and trucks sold in North America are required to support a subset of these codes, primarily for state mandated emissions inspections. Manufacturers also define additional PIDs specific to their vehicles. Though not mandated, many motorcycles also support OBD-II PIDs.

In 1996, light duty vehicles (less than 8,500 lb or 3,900 kg) were the first to be mandated followed by medium duty vehicles (8,500–14,000 lb or 3,900–6,400 kg) in 2005. [1] They are both required to be accessed through a standardized data link connector defined by SAE J1962.

Heavy duty vehicles (greater than 14,000 lb or 6,400 kg) made after 2010, [1] for sale in the US are allowed to support OBD-II diagnostics through SAE standard J1939-13 (a round diagnostic connector) according to CARB in title 13 CCR 1971.1. Some heavy duty trucks in North America use the SAE J1962 OBD-II diagnostic connector that is common with passenger cars, notably Mack and Volvo Trucks, however they use 29 bit CAN identifiers (unlike 11 bit headers used by passenger cars).

Services / Modes

There are 10 diagnostic services described in the latest OBD-II standard SAE J1979. Before 2002, J1979 referred to these services as "modes". They are as follows:

Service / Mode (hex)Description
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)
06Test results, other component/system monitoring (Test results, oxygen sensor monitoring for CAN only)
07Show pending Diagnostic Trouble Codes (detected during current or last driving cycle)
08Control operation of on-board component/system
09 Request vehicle information
0APermanent Diagnostic Trouble Codes (DTCs) (Cleared DTCs)

Vehicle manufacturers are not required to support all services. Each manufacturer may define additional services above #9 (e.g.: service 22 as defined by SAE J2190 for Ford/GM, service 21 for Toyota) for other information e.g. the voltage of the traction battery in a hybrid electric vehicle (HEV). [2]

The nonOBD UDS services start at 0x10 to avoid overlap of ID-range.

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 services 01 and 02 are basically identical, except that service 01 provides current information, whereas service 02 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 service 01, and PID 02, which is only available in service 02. If service 02 PID 02 returns zero, then there is no snapshot and all other service 02 data is meaningless.

When using Bit-Encoded-Notation, quantities like C4 means bit 4 from data byte C. Each bit is numbered from 0 to 7, so 7 is the most significant bit and 0 is the least significant bit (See below).

ABCD
A7A6A5A4A3A2A1A0B7B6B5B4B3B2B1B0C7C6C5C4C3C2C1C0D7D6D5D4D3D2D1D0

Service 01 - Show current data

PIDs
(hex)
PID
(Dec)
Data bytes returnedDescriptionMin valueMax valueUnitsFormula [lower-alpha 1]
0004PIDs supported [$01 - $20]Bit encoded [A7..D0] == [PID $01..PID $20] See below
0114Monitor status since DTCs cleared. (Includes malfunction indicator lamp (MIL), status and number of DTCs, components tests, DTC readiness checks)Bit encoded. See below
0222DTC that caused freeze frame to be stored. Decoded as in service 3
0332Fuel system statusBit encoded. See below
0441Calculated engine load0100 % (or )
0551Engine coolant temperature-40215°C
0661Short term fuel trim (STFT)Bank 1-100 (Reduce Fuel: Too Rich)99.2 (Add Fuel: Too Lean) %
(or )
0771Long term fuel trim (LTFT)Bank 1
0881Short term fuel trim (STFT)Bank 2
0991Long term fuel trim (LTFT)Bank 2
0A101Fuel pressure (gauge pressure)0765kPa
0B111Intake manifold absolute pressure0255kPa
0C122Engine speed016,383.75rpm
0D131Vehicle speed0255km/h
0E141Timing advance-6463.5° before TDC
0F151Intake air temperature-40215°C
10162 Mass air flow sensor (MAF) air flow rate0655.35g/s
11171Throttle position0100 %
12181Commanded secondary air statusBit encoded. See below
13191Oxygen sensors present (in 2 banks)[A0..A3] == Bank 1, Sensors 1-4. [A4..A7] == Bank 2...
14202Oxygen Sensor 1
A: Voltage
B: Short term fuel trim
0
-100
1.275
99.2
V

%

(if B==$FF, sensor is not used in trim calculation)
15212Oxygen Sensor 2
A: Voltage
B: Short term fuel trim
16222Oxygen Sensor 3
A: Voltage
B: Short term fuel trim
17232Oxygen Sensor 4
A: Voltage
B: Short term fuel trim
18242Oxygen Sensor 5
A: Voltage
B: Short term fuel trim
19252Oxygen Sensor 6
A: Voltage
B: Short term fuel trim
1A262Oxygen Sensor 7
A: Voltage
B: Short term fuel trim
1B272Oxygen Sensor 8
A: Voltage
B: Short term fuel trim
1C281OBD standards this vehicle conforms to1250 enumerated. See below
1D291Oxygen sensors present (in 4 banks)Similar to PID $13, but [A0..A7] == [B1S1, B1S2, B2S1, B2S2, B3S1, B3S2, B4S1, B4S2]
1E301Auxiliary input statusA0 == Power Take Off (PTO) status (1 == active)
[A1..A7] not used
1F312Run time since engine start065,535s
20324PIDs supported [$21 - $40]Bit encoded [A7..D0] == [PID $21..PID $40] See below
21332Distance traveled with malfunction indicator lamp (MIL) on065,535km
22342 Fuel Rail Pressure (relative to manifold vacuum)05177.265kPa
23352 Fuel Rail Gauge Pressure (diesel, or gasoline direct injection)0655,350kPa
24364Oxygen Sensor 1
AB: Air-Fuel Equivalence Ratio (lambda,λ)
CD: Voltage
0
0
< 2
< 8
ratio
V
25374Oxygen Sensor 2
AB: Air-Fuel Equivalence Ratio (lambda,λ)
CD: Voltage
26384Oxygen Sensor 3
AB: Air-Fuel Equivalence Ratio (lambda,λ)
CD: Voltage
27394Oxygen Sensor 4
AB: Air-Fuel Equivalence Ratio (lambda,λ)
CD: Voltage
28404Oxygen Sensor 5
AB: Air-Fuel Equivalence Ratio (lambda,λ)
CD: Voltage
29414Oxygen Sensor 6
AB: Air-Fuel Equivalence Ratio (lambda,λ)
CD: Voltage
2A424Oxygen Sensor 7
AB: Air-Fuel Equivalence Ratio (lambda,λ)
CD: Voltage
2B434Oxygen Sensor 8
AB: Air-Fuel Equivalence Ratio (lambda,λ)
CD: Voltage
2C441Commanded EGR 0100 %
2D451EGR Error-10099.2 %
2E461Commanded evaporative purge0100 %
2F471Fuel Tank Level Input0100 %
30481Warm-ups since codes cleared0255
31492Distance traveled since codes cleared065,535km
32502Evap. System Vapor Pressure-8,1928191.75Pa

(AB is two's complement signed) [3]

33511Absolute Barometric Pressure0255kPa
34524Oxygen Sensor 1
AB: Air-Fuel Equivalence Ratio (lambda,λ)
CD: Current
0
-128
< 2
<128
ratio
mA
35534Oxygen Sensor 2
AB: Air-Fuel Equivalence Ratio (lambda,λ)
CD: Current
36544Oxygen Sensor 3
AB: Air-Fuel Equivalence Ratio (lambda,λ)
CD: Current
37554Oxygen Sensor 4
AB: Air-Fuel Equivalence Ratio (lambda,λ)
CD: Current
38564Oxygen Sensor 5
AB: Air-Fuel Equivalence Ratio (lambda,λ)
CD: Current
39574Oxygen Sensor 6
AB: Air-Fuel Equivalence Ratio (lambda,λ)
CD: Current
3A584Oxygen Sensor 7
AB: Air-Fuel Equivalence Ratio (lambda,λ)
CD: Current
3B594Oxygen Sensor 8
AB: Air-Fuel Equivalence Ratio (lambda,λ)
CD: Current
3C602Catalyst Temperature: Bank 1, Sensor 1-406,513.5°C
3D612Catalyst Temperature: Bank 2, Sensor 1
3E622Catalyst Temperature: Bank 1, Sensor 2
3F632Catalyst Temperature: Bank 2, Sensor 2
40644PIDs supported [$41 - $60]Bit encoded [A7..D0] == [PID $41..PID $60] See below
41654Monitor status this drive cycleBit encoded. See below
42662Control module voltage065.535V
43672Absolute load value025,700 %
44682Commanded Air-Fuel Equivalence Ratio (lambda,λ)0< 2ratio
45691Relative throttle position0100 %
46701Ambient air temperature-40215°C
47711Absolute throttle position B0100 %
48721Absolute throttle position C
49731Accelerator pedal position D
4A741Accelerator pedal position E
4B751Accelerator pedal position F
4C761Commanded throttle actuator
4D772Time run with MIL on065,535min
4E782Time since trouble codes cleared
4F794Maximum value for Fuel–Air equivalence ratio, oxygen sensor voltage, oxygen sensor current, and intake manifold absolute pressure0, 0, 0, 0255, 255, 255, 2550ratio, V, mA, kPa, , ,
50804Maximum value for air flow rate from mass air flow sensor02550g/s; , , and are reserved for future use
51811Fuel TypeFrom fuel type table see below
52821Ethanol fuel %0100 %
53832Absolute Evap system Vapor Pressure0327.675kPa
54842Evap system vapor pressure-32,76832,767Pa(AB is two's complement signed) [3]
55852Short term secondary oxygen sensor trim, A: bank 1, B: bank 3-10099.2 %

56862Long term secondary oxygen sensor trim, A: bank 1, B: bank 3
57872Short term secondary oxygen sensor trim, A: bank 2, B: bank 4
58882Long term secondary oxygen sensor trim, A: bank 2, B: bank 4
59892 Fuel rail absolute pressure0655,350kPa
5A901Relative accelerator pedal position0100 %
5B911Hybrid battery pack remaining life0100 %
5C921Engine oil temperature-40210°C
5D932Fuel injection timing-210.00301.992°
5E942Engine fuel rate03212.75L/h
5F951Emission requirements to which vehicle is designedBit Encoded
60964PIDs supported [$61 - $80]Bit encoded [A7..D0] == [PID $61..PID $80] See below
61971Driver's demand engine - percent torque-125130 %
62981Actual engine - percent torque-125130 %
63992Engine reference torque065,535Nm
641005Engine percent torque data-125130 % Idle
Engine point 1
Engine point 2
Engine point 3
Engine point 4
651012Auxiliary input / output supportedBit Encoded
661025Mass air flow sensor02047.96875g/s[A0]== Sensor A Supported
[A1]== Sensor B Supported
Sensor A:
Sensor B:
671033Engine coolant temperature-40215°C[A0]== Sensor 1 Supported
[A1]== Sensor 2 Supported
Sensor 1:
Sensor 2:
681043Intake air temperature sensor-40215°C[A0]== Sensor 1 Supported
[A1]== Sensor 2 Supported
Sensor 1:
Sensor 2:
691057Actual EGR, Commanded EGR, and EGR Error
6A1065Commanded Diesel intake air flow control and relative intake air flow position
6B1075Exhaust gas recirculation temperature
6C1085Commanded throttle actuator control and relative throttle position
6D10911Fuel pressure control system
6E1109Injection pressure control system
6F1113Turbocharger compressor inlet pressure
7011210Boost pressure control
711136Variable Geometry turbo (VGT) control
721145Wastegate control
731155Exhaust pressure
741165Turbocharger RPM
751177Turbocharger temperature
761187Turbocharger temperature
771195Charge air cooler temperature (CACT)
781209Exhaust Gas temperature (EGT) Bank 1Special PID. See below
791219Exhaust Gas temperature (EGT) Bank 2Special PID. See below
7A1227Diesel particulate filter (DPF)

differential pressure

7B1237Diesel particulate filter (DPF)
7C1249Diesel Particulate filter (DPF) temperature°C
7D1251NOx NTE (Not-To-Exceed) control area status
7E1261PM NTE (Not-To-Exceed) control area status
7F12713Engine run time [lower-alpha 2] s
801284PIDs supported [$81 - $A0]Bit encoded [A7..D0] == [PID $81..PID $A0] See below
8112941Engine run time for Auxiliary Emissions Control Device(AECD)
8213041Engine run time for Auxiliary Emissions Control Device(AECD)
831319NOx sensor
841321Manifold surface temperature
8513310NOx reagent system%
861345Particulate matter (PM) sensor
871355Intake manifold absolute pressure
8813613SCR Induce System
8913741Run Time for AECD #11-#15
8A13841Run Time for AECD #16-#20
8B1397Diesel Aftertreatment
8C14017O2 Sensor (Wide Range)
8D1411Throttle Position G0100%
8E1421Engine Friction - Percent Torque-125130%
8F1437PM Sensor Bank 1 & 2
901443WWH-OBD Vehicle OBD System Informationh
911455WWH-OBD Vehicle OBD System Informationh
921462Fuel System Control
931473WWH-OBD Vehicle OBD Counters supporth
9414812NOx Warning And Inducement System
981529Exhaust Gas Temperature Sensor
991539Exhaust Gas Temperature Sensor
9A1546Hybrid/EV Vehicle System Data, Battery, Voltage
9B1554Diesel Exhaust Fluid Sensor Data%
9C15617O2 Sensor Data
9D1574Engine Fuel Rateg/s
9E1582Engine Exhaust Flow Ratekg/h
9F1599Fuel System Percentage Use
A01604PIDs supported [$A1 - $C0]Bit encoded [A7..D0] == [PID $A1..PID $C0] See below
A11619NOx Sensor Corrected Datappm
A21622Cylinder Fuel Rate02047.96875mg/stroke
A31639Evap System Vapor PressurePa
A41644Transmission Actual Gear065.535ratio[A1]==Supported

A51654Commanded Diesel Exhaust Fluid Dosing0127.5%[A0]= 1:Supported; 0:Unsupported

A61664 Odometer [lower-alpha 3] 0429,496,729.5 km
A71674NOx Sensor Concentration Sensors 3 and 4
A81684NOx Sensor Corrected Concentration Sensors 3 and 4
A91694ABS Disable Switch State[A0]= 1:Supported; 0:Unsupported

[B0]= 1:Yes;0:No

C01924PIDs supported [$C1 - $E0]Bit encoded [A7..D0] == [PID $C1..PID $E0] See below
C31952Fuel Level Input A/B025,700 %Returns numerous data, including Drive Condition ID and Engine Speed*
C41968Exhaust Particulate Control System Diagnostic Time/Count04,294,967,295seconds / CountB5 is Engine Idle Request
B6 is Engine Stop Request*
First byte = Time in seconds
Second byte = Count
C51974Fuel Pressure A and B05,177kPa
C61987Byte 1 - Particulate control - driver inducement system status
Byte 2,3 - Removal or block of the particulate aftertreatment system counter
Byte 4,5 - Liquid regent injection system (e.g. fuel-borne catalyst) failure counter
Byte 6,7 - Malfunction of Particulate control monitoring system counter
065,535h
C71992Distance Since Reflash or Module Replacement065,535km
C82001NOx Control Diagnostic (NCD) and Particulate Control Diagnostic (PCD) Warning Lamp status--Bit
PID
(hex)
PID
(Dec)
Data bytes returnedDescriptionMin valueMax valueUnitsFormula [lower-alpha 1]

Service 02 - Show freeze frame data

Service 02 accepts the same PIDs as service 01, with the same meaning, [5] but information given is from when the freeze frame [6] was created. Note that PID $02 is used to obtain the DTC that triggered the freeze frame.

A person has to send the frame number in the data section of the message.

Service 03 - Show stored Diagnostic Trouble Codes (DTCs)

PID
(hex)
Data bytes returnedDescriptionMin valueMax valueUnitsFormula [lower-alpha 1]
N/An*6Request trouble codes3 codes per message frame. See below

Service 04 - Clear Diagnostic Trouble Codes and stored values

PID
(hex)
Data bytes returnedDescriptionMin valueMax valueUnitsFormula [lower-alpha 1]
N/A0Clear trouble codes / Malfunction indicator lamp (MIL) / Check engine lightClears all stored trouble codes and turns the MIL off.

Service 05 - Test results, oxygen sensor monitoring (non CAN only)

PID
(hex)
Data bytes returnedDescriptionMin valueMax valueUnitsFormula [lower-alpha 1]
01004OBD Monitor IDs supported ($01 – $20)0x00xffffffff
01012O2 Sensor Monitor Bank 1 Sensor 10.001.275V0.005 Rich to lean sensor threshold voltage
0102O2 Sensor Monitor Bank 1 Sensor 20.001.275V0.005 Rich to lean sensor threshold voltage
0103O2 Sensor Monitor Bank 1 Sensor 30.001.275V0.005 Rich to lean sensor threshold voltage
0104O2 Sensor Monitor Bank 1 Sensor 40.001.275V0.005 Rich to lean sensor threshold voltage
0105O2 Sensor Monitor Bank 2 Sensor 10.001.275V0.005 Rich to lean sensor threshold voltage
0106O2 Sensor Monitor Bank 2 Sensor 20.001.275V0.005 Rich to lean sensor threshold voltage
0107O2 Sensor Monitor Bank 2 Sensor 30.001.275V0.005 Rich to lean sensor threshold voltage
0108O2 Sensor Monitor Bank 2 Sensor 40.001.275V0.005 Rich to lean sensor threshold voltage
0109O2 Sensor Monitor Bank 3 Sensor 10.001.275V0.005 Rich to lean sensor threshold voltage
010AO2 Sensor Monitor Bank 3 Sensor 20.001.275V0.005 Rich to lean sensor threshold voltage
010BO2 Sensor Monitor Bank 3 Sensor 30.001.275V0.005 Rich to lean sensor threshold voltage
010CO2 Sensor Monitor Bank 3 Sensor 40.001.275V0.005 Rich to lean sensor threshold voltage
010DO2 Sensor Monitor Bank 4 Sensor 10.001.275V0.005 Rich to lean sensor threshold voltage
010EO2 Sensor Monitor Bank 4 Sensor 20.001.275V0.005 Rich to lean sensor threshold voltage
010FO2 Sensor Monitor Bank 4 Sensor 30.001.275V0.005 Rich to lean sensor threshold voltage
0110O2 Sensor Monitor Bank 4 Sensor 40.001.275V0.005 Rich to lean sensor threshold voltage
0201O2 Sensor Monitor Bank 1 Sensor 10.001.275V0.005 Lean to Rich sensor threshold voltage
0202O2 Sensor Monitor Bank 1 Sensor 20.001.275V0.005 Lean to Rich sensor threshold voltage
0203O2 Sensor Monitor Bank 1 Sensor 30.001.275V0.005 Lean to Rich sensor threshold voltage
0204O2 Sensor Monitor Bank 1 Sensor 40.001.275V0.005 Lean to Rich sensor threshold voltage
0205O2 Sensor Monitor Bank 2 Sensor 10.001.275V0.005 Lean to Rich sensor threshold voltage
0206O2 Sensor Monitor Bank 2 Sensor 20.001.275V0.005 Lean to Rich sensor threshold voltage
0207O2 Sensor Monitor Bank 2 Sensor 30.001.275V0.005 Lean to Rich sensor threshold voltage
0208O2 Sensor Monitor Bank 2 Sensor 40.001.275V0.005 Lean to Rich sensor threshold voltage
0209O2 Sensor Monitor Bank 3 Sensor 10.001.275V0.005 Lean to Rich sensor threshold voltage
020AO2 Sensor Monitor Bank 3 Sensor 20.001.275V0.005 Lean to Rich sensor threshold voltage
020BO2 Sensor Monitor Bank 3 Sensor 30.001.275V0.005 Lean to Rich sensor threshold voltage
020CO2 Sensor Monitor Bank 3 Sensor 40.001.275V0.005 Lean to Rich sensor threshold voltage
020DO2 Sensor Monitor Bank 4 Sensor 10.001.275V0.005 Lean to Rich sensor threshold voltage
020EO2 Sensor Monitor Bank 4 Sensor 20.001.275V0.005 Lean to Rich sensor threshold voltage
020FO2 Sensor Monitor Bank 4 Sensor 30.001.275V0.005 Lean to Rich sensor threshold voltage
0210O2 Sensor Monitor Bank 4 Sensor 40.001.275V0.005 Lean to Rich sensor threshold voltage
PID
(hex)
Data bytes returnedDescriptionMin valueMax valueUnitsFormula [lower-alpha 1]

Service 09 - Request vehicle information

PID
(hex)
Data bytes returnedDescriptionMin valueMax valueUnitsFormula [lower-alpha 1]
004Service 9 supported PIDs ($01 to $20)Bit encoded. [A7..D0] = [PID $01..PID $20] See below
011VIN Message Count in PID 02. Only for ISO 9141-2, ISO 14230-4 and SAE J1850.Usually the value will be 5.
0217 Vehicle Identification Number (VIN)17-char VIN, ASCII-encoded and left-padded with null chars (0x00) if needed to.
031Calibration ID message count for PID 04. Only for ISO 9141-2, ISO 14230-4 and SAE J1850.It will be a multiple of 4 (4 messages are needed for each ID).
0416,32,48,64..Calibration IDUp to 16 ASCII chars. Data bytes not used will be reported as null bytes (0x00). Several CALID can be outputed (16 bytes each)
051Calibration verification numbers (CVN) message count for PID 06. Only for ISO 9141-2, ISO 14230-4 and SAE J1850.
064,8,12,16Calibration Verification Numbers (CVN) Several CVN can be output (4 bytes each) the number of CVN and CALID must matchRaw data left-padded with null characters (0x00). Usually displayed as hex string.
071In-use performance tracking message count for PID 08 and 0B. Only for ISO 9141-2, ISO 14230-4 and SAE J1850.8108 if sixteen values are required to be reported, 9 if eighteen values are required to be reported, and 10 if twenty values are required to be reported (one message reports two values, each one consisting in two bytes).
084In-use performance tracking for spark ignition vehicles4 or 5 messages, each one containing 4 bytes (two values). See below
091ECU name message count for PID 0A
0A20ECU nameASCII-coded. Right-padded with null chars (0x00).
0B4In-use performance tracking for compression ignition vehicles5 messages, each one containing 4 bytes (two values). See below
PID
(hex)
Data bytes returnedDescriptionMin valueMax valueUnitsFormula [lower-alpha 1]
  1. 1 2 3 4 5 6 7 8 In the formula column, letters A, B, C, etc. represent the first, second, third, etc. byte of the data. For example, for two data bytes 0F 19, A = 0F and B = 19. Where a (?) appears, contradictory or incomplete information was available.
  2. Starting with MY 2010 the California Air Resources Board mandated that all diesel vehicles must supply total engine hours [4]
  3. Starting with MY 2019 the California Air Resources Board mandated that all vehicles must supply odometer [4]

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:

Service 01 PID 00 - Show PIDs supported

A request for this PID returns 4 bytes of data (Big-endian). Each bit, from MSB to LSB, represents one of the next 32 PIDs and specifies whether that PID is supported.

For example, if the car response is BE1FA813, it can be decoded like this:

HexadecimalBE1FA813
Binary10111110000111111010100000010011
Supported?YesNoYesYesYesYesYesNoNoNoNoYesYesYesYesYesYesNoYesNoYesNoNoNoNoNoNoYesNoNoYesYes
PID number0102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20

So, supported PIDs are: 01, 03, 04, 05, 06, 07, 0C, 0D, 0E, 0F, 10, 11, 13, 15, 1C, 1F and 20

Service 01 PID 01 - Monitor status since DTCs cleared

A request for this PID returns 4 bytes of data, labeled A, B, C and D.

The first byte (A) contains two pieces of information. Bit A7 (MSB of byte A) indicates whether or not the MIL (malfunction indicator light, aka. check engine light) is illuminated. Bits A6 through A0 represent the number of diagnostic trouble codes currently flagged in the ECU.

The second, third, and fourth bytes (B, C and D) give information about the availability and completeness of certain on-board tests ("OBD readiness checks"). The third and fourth bytes are to be interpreted differently depending upon whether the engine is spark ignition (e.g. Otto or Wankel engines) or compression ignition (e.g. Diesel engines). In the second byte (B), bit 3 indicates the engine type and thus how to interpret bytes C and D, with 0 being spark (Otto or Wankel) and 1 (set) being compression (Diesel). Bits B6 to B4 and B2 to B0 are used for information about tests that not engine-type specific, and thus termed common tests. Note that for bits indicating test availability a bit set to 1 indicates available, whilst for bits indicating test completeness a bit set to 0 indicates complete.

BitsDefinition
A7State of the CEL/MIL (on/off).
A6-A0Number of confirmed emissions-related DTCs available for display.
B7Reserved (should be 0)
B6-B4Bitmap indicating completeness of common tests.
B3Indication of engine type
0 = Spark ignition (e.g. Otto or Wankel engines)
1 = Compression ignition (e.g. Diesel engines)
B2-B0Bitmap indicating availability of common tests.
C7-C0Bitmap indicating availability of engine-type specific tests.
D7-D0Bitmap indicating completeness of engine-type specific tests.

Bits from byte B representing common test indicators (those not engine-type specific) are mapped as follows:

Test availabilityTest completeness
ComponentsB2B6
Fuel SystemB1B5
MisfireB0B4

Bytes C and D are mapped as follows for spark ignition engine types (e.g. Otto or Wankel engines):

Test availabilityTest completeness
EGR and/or VVT SystemC7D7
Oxygen Sensor HeaterC6D6
Oxygen SensorC5D5
Gasoline Particulate Filter [lower-alpha 1] C4D4
Secondary Air SystemC3D3
Evaporative SystemC2D2
Heated CatalystC1D1
CatalystC0D0

Bytes C and D are alternatively mapped as follows for compression ignition engine types (Diesel engines):

Test availabilityTest completeness
EGR and/or VVT SystemC7D7
PM filter monitoringC6D6
Exhaust Gas SensorC5D5
- Reserved -C4D4
Boost PressureC3 D3
- Reserved -C2D2
NOx/SCR MonitorC1D1
NMHC Catalyst [lower-alpha 2] C0D0
  1. A common misconception is that C4/D4 was A/C Refrigerant, however it had been listed as Reserved in J1979 for years, and was recently defined as GPF.
  2. NMHC may stand for Non-Methane HydroCarbons, but J1979 does not enlighten us. The translation would be the ammonia sensor in the SCR catalyst.

Service 01 PID 41 - Monitor status this drive cycle

A request for this PID returns 4 bytes of data. The data returned is of an identical form to that returned for PID 01, with one exception - the first byte is always zero.

Service 01 PID 78 and 79 - Exhaust Gas temperature (EGT) Bank 1 and Bank 2

A request for one of these two PIDs will return 9 bytes of data. PID 78 returns data relating to EGT sensors for bank 1, whilst PID 79 similarly returns data for bank 2. The first byte is a bit encoded field indicating which EGT sensors are supported for the respective bank.

BytesDescription
AEGT sensor support
B-CTemperature read by EGT sensor 1
D-ETemperature read by EGT sensor 2
F-GTemperature read by EGT sensor 3
H-ITemperature read by EGT sensor 4

The first byte is bit-encoded as follows:

BitsDescription
A7-A4Reserved
A3EGT sensor 4 supported?
A2EGT sensor 3 supported?
A1EGT sensor 2 supported?
A0EGT sensor 1 supported?

Bytes B through I provide 16-bit integers indicating the temperatures of the sensors. The temperature values are interpreted in degrees Celsius in the range -40 to 6513.5 (scale 0.1), using the usual formula (MSB is A, LSB is B). Only values for which the corresponding sensor is supported are meaningful.

Service 03 (no PID required) - Show stored Diagnostic Trouble Codes

A request for this service 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 DTCs (up to 4 bytes) then 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. Encoded in these bytes are a category and a number. It is typically shown decoded into a five-character form like "U0158", where the first character (here 'U') represents the category the DTC belongs to, and the remaining four characters are a hexadecimal representation of the number under that category. The first two bits (A7 and A6) of the first byte (A) represent the category. The remaining 14 bits represent the number. Of note is that since the second character is formed from only two bits, it can thus only be within the range 0-3.

BitsDefinition
A7-A6Category
00: P - Powertrain
01: C - Chassis
10: B - Body
11: U - Network [lower-alpha 1]
A5-B0Number (within category)
  1. Whilst this is commonly referred to as the network category, it may originally have been the 'undefined' category, hence the use of the letter 'U' rather than 'N'.

An example DTC of "U0158" would be decoded as follows:

BitA7A6A5A4A3A2A1A0B7B6B5B4B3B2B1B0
Binary1100000101011000
HexadecimalC158
Decoded DTCU0158

The resulting five-character code, e.g. "U0158", can be looked up in a table of OBD-II DTCs to get an actual description of what it represents. Of note, whilst some blocks of DTC code ranges have generic meanings that apply to all vehicles and manufacturers, the meanings of others can vary per manufacturer or even model.

It is also worth noting that DTCs may sometimes be encountered in a four-character form, e.g. "C158", which is simply the plain hexadecimal representation of the two bytes, with proper decoding with respect to the category not having been performed.

Service 09 PID 08 - In-use performance tracking for spark ignition engines

It provides information about track in-use performance for catalyst banks, oxygen sensor banks, evaporative leak detection systems, EGR systems and secondary air system.

The numerator for each component or system tracks the number of times that all conditions necessary for a specific monitor to detect a malfunction have been encountered. The denominator for each component or system tracks the number of times that the vehicle has been operated in the specified conditions.

The count of data items should be reported at the beginning (the first byte).

All data items of the In-use Performance Tracking record consist of two bytes and are reported in this order (each message contains two items, hence the message length is 4).

MnemonicDescription
OBDCONDOBD Monitoring Conditions Encountered Counts
IGNCNTRIgnition Counter
CATCOMP1Catalyst Monitor Completion Counts Bank 1
CATCOND1Catalyst Monitor Conditions Encountered Counts Bank 1
CATCOMP2Catalyst Monitor Completion Counts Bank 2
CATCOND2Catalyst Monitor Conditions Encountered Counts Bank 2
O2SCOMP1O2 Sensor Monitor Completion Counts Bank 1
O2SCOND1O2 Sensor Monitor Conditions Encountered Counts Bank 1
O2SCOMP2O2 Sensor Monitor Completion Counts Bank 2
O2SCOND2O2 Sensor Monitor Conditions Encountered Counts Bank 2
EGRCOMPEGR Monitor Completion Condition Counts
EGRCONDEGR Monitor Conditions Encountered Counts
AIRCOMPAIR Monitor Completion Condition Counts (Secondary Air)
AIRCONDAIR Monitor Conditions Encountered Counts (Secondary Air)
EVAPCOMPEVAP Monitor Completion Condition Counts
EVAPCONDEVAP Monitor Conditions Encountered Counts
SO2SCOMP1Secondary O2 Sensor Monitor Completion Counts Bank 1
SO2SCOND1Secondary O2 Sensor Monitor Conditions Encountered Counts Bank 1
SO2SCOMP2Secondary O2 Sensor Monitor Completion Counts Bank 2
SO2SCOND2Secondary O2 Sensor Monitor Conditions Encountered Counts Bank 2

Service 09 PID 0B - In-use performance tracking for compression ignition engines

It provides information about track in-use performance for NMHC catalyst, NOx catalyst monitor, NOx adsorber monitor, PM filter monitor, exhaust gas sensor monitor, EGR/ VVT monitor, boost pressure monitor and fuel system monitor.

All data items consist of two bytes and are reported in this order (each message contains two items, hence message length is 4):

MnemonicDescription
OBDCONDOBD Monitoring Conditions Encountered Counts
IGNCNTRIgnition Counter
HCCATCOMPNMHC Catalyst Monitor Completion Condition Counts
HCCATCONDNMHC Catalyst Monitor Conditions Encountered Counts
NCATCOMPNOx/SCR Catalyst Monitor Completion Condition Counts
NCATCONDNOx/SCR Catalyst Monitor Conditions Encountered Counts
NADSCOMPNOx Adsorber Monitor Completion Condition Counts
NADSCONDNOx Adsorber Monitor Conditions Encountered Counts
PMCOMPPM Filter Monitor Completion Condition Counts
PMCONDPM Filter Monitor Conditions Encountered Counts
EGSCOMPExhaust Gas Sensor Monitor Completion Condition Counts
EGSCONDExhaust Gas Sensor Monitor Conditions Encountered Counts
EGRCOMPEGR and/or VVT Monitor Completion Condition Counts
EGRCONDEGR and/or VVT Monitor Conditions Encountered Counts
BPCOMPBoost Pressure Monitor Completion Condition Counts
BPCONDBoost Pressure Monitor Conditions Encountered Counts
FUELCOMPFuel Monitor Completion Condition Counts
FUELCONDFuel Monitor Conditions Encountered Counts

Enumerated PIDs

Some PIDs are to be interpreted specially, and aren't necessarily exactly bitwise encoded, or in any scale. The values for these PIDs are enumerated.

Service 01 PID 03 - Fuel system status

A request for this PID returns 2 bytes of data. The first byte describes fuel system #1. The second byte describes fuel system #2 (if it exists) and is encoded identically to the first byte. The meaning assigned to the value of each byte is as follows:

ValueDescription
0The motor is off
1Open loop due to insufficient engine temperature
2Closed loop, using oxygen sensor feedback to determine fuel mix
4Open loop due to engine load OR fuel cut due to deceleration
8Open loop due to system failure
16Closed loop, using at least one oxygen sensor but there is a fault in the feedback system

Any other value is an invalid response.

Service 01 PID 12 - Commanded secondary air status

A request for this PID returns a single byte of data which describes the secondary air status.

ValueDescription
1Upstream
2Downstream of catalytic converter
4From the outside atmosphere or off
8Pump commanded on for diagnostics

Any other value is an invalid response.

Service 01 PID 1C - OBD standards this vehicle conforms to

A request for this PID returns a single byte of data which describes which OBD standards this ECU was designed to comply with. The different values the data byte can hold are shown below, next to what they mean:

ValueDescription
1OBD-II as defined by the CARB
2OBD as defined by the EPA
3OBD and OBD-II
4OBD-I
5Not OBD compliant
6EOBD (Europe)
7EOBD and OBD-II
8EOBD and OBD
9EOBD, OBD and OBD II
10JOBD (Japan)
11JOBD and OBD II
12JOBD and EOBD
13JOBD, EOBD, and OBD II
14Reserved
15Reserved
16Reserved
17Engine Manufacturer Diagnostics (EMD)
18Engine Manufacturer Diagnostics Enhanced (EMD+)
19Heavy Duty On-Board Diagnostics (Child/Partial) (HD OBD-C)
20Heavy Duty On-Board Diagnostics (HD OBD)
21World Wide Harmonized OBD (WWH OBD)
22Reserved
23Heavy Duty Euro OBD Stage I without NOx control (HD EOBD-I)
24Heavy Duty Euro OBD Stage I with NOx control (HD EOBD-I N)
25Heavy Duty Euro OBD Stage II without NOx control (HD EOBD-II)
26Heavy Duty Euro OBD Stage II with NOx control (HD EOBD-II N)
27Reserved
28Brazil OBD Phase 1 (OBDBr-1)
29Brazil OBD Phase 2 (OBDBr-2)
30Korean OBD (KOBD)
31India OBD I (IOBD I)
32India OBD II (IOBD II)
33Heavy Duty Euro OBD Stage VI (HD EOBD-IV)
34-250Reserved
251-255Not available for assignment (SAE J1939 special meaning)

Service 01 PID 51 - Fuel Type Coding

This PID 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 the following table:

ValueDescription
0Not available
1Gasoline
2Methanol
3Ethanol
4Diesel
5 LPG
6 CNG
7Propane
8Electric
9 Bifuel running Gasoline
10Bifuel running Methanol
11Bifuel running Ethanol
12Bifuel running LPG
13Bifuel running CNG
14Bifuel running Propane
15Bifuel running Electricity
16Bifuel running electric and combustion engine
17Hybrid gasoline
18Hybrid Ethanol
19Hybrid Diesel
20Hybrid Electric
21Hybrid running electric and combustion engine
22Hybrid Regenerative
23Bifuel running diesel

Any other value is reserved by ISO/SAE. There are currently no definitions for flexible-fuel vehicle.

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 varies based on company size defined by annual sales of automotive tools and equipment in North America:

Annual Sales in North AmericaAnnual Dues
Under $10,000,000$5,000
$10,000,000 - $50,000,000$7,500
Greater than $50,000,000$10,000

However, even ETI membership will not provide full documentation for non-standard PIDs. ETI states: [7] [8]

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 as of April 13th, 2015 of the per year charges:

GM$50,000
Honda$5,000
Suzuki$1,000
BMW$25,500 plus $2,000 per update. Updates occur annually.

CAN (11-bit) bus format

As defined in ISO 15765-4, emissions protocols (including OBD-II, EOBD, UDS, etc.) use the ISO-TP transport layer (ISO 15765-2). All CAN frames sent using ISO-TP use a data length of 8 bytes (and DLC of 8). It is recommended to pad the unused data bytes with 0xCC.

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

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

CAN bus may also be used for communication beyond the standard OBD messages. Physical addressing uses particular CAN IDs for specific modules (e.g., 720h 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
PID Type01234567
SAE StandardNumber of
additional
data bytes:
2
Service
01 = show current data;
02 = freeze frame;
etc.
PID code
(e.g.: 05 = Engine coolant temperature)
not used
(ISO 15765-2 suggests CCh)
Vehicle specificNumber of
additional
data bytes:
3
Custom service: (e.g.: 22 = enhanced data)PID code
(e.g.: 4980h)
not used
(ISO 15765-2 suggests CCh)

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 (CAN bus protocol form Frameformat with 8 data bytes). The bytes are:

Byte
CAN Address01234567
SAE Standard
7E8h,
7E9h,
7EAh,
etc.
Number of
additional
data bytes:
3 to 6
Custom service
Same as query, except that 40h is added to the service 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 7
Custom service: same as query, except that 40h is added to the service value.(e.g.: 62h = response to service 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:
3
7Fh this a general response usually indicating the module doesn't recognize the request.Custom service: (e.g.: 22h = enhanced diagnostic data by PID, 21h = enhanced data by offset)31hnot used
(may be 00h)

See also

Related Research Articles

A controller area network is a vehicle bus standard designed to allow microcontrollers and devices to communicate with each other. It is a message-based protocol, designed originally for multiplex electrical wiring within automobiles to save on copper, but it can also be used in many other contexts. For each device, the data in a frame is transmitted serially but in such a way that if more than one device transmits at the same time, the highest priority device can continue while the others back off. Frames are received by all devices, including by the transmitting device.

Modbus or MODBUS is a client/server data communications protocol in the application layer. It was originally published by Modicon in 1979 for use with its programmable logic controllers (PLCs). Modbus has become a de facto standard communication protocol for communication between industrial electronic devices in a wide range of buses and network.

A vehicle bus is a specialized internal communications network that interconnects components inside a vehicle. In electronics, a bus is simply a device that connects multiple electrical or electronic devices together. Special requirements for vehicle control such as assurance of message delivery, of non-conflicting messages, of minimum time of delivery, of low cost, and of EMF noise resilience, as well as redundant routing and other characteristics mandate the use of less common networking protocols. Protocols include Controller Area Network (CAN), Local Interconnect Network (LIN) and others. Conventional computer networking technologies are rarely used, except in aircraft, where implementations of the ARINC 664 such as the Avionics Full-Duplex Switched Ethernet are used. Aircraft that use AFDX include the B787, the A400M and the A380. Trains commonly use Ethernet Consist Network (ECN). All cars sold in the United States since 1996 are required to have an On-Board Diagnostics connector, for access to the car's electronic controllers.

Society of Automotive Engineers standard SAE J1939 is the vehicle bus recommended practice used for communication and diagnostics among vehicle components. Originating in the car and heavy-duty truck industry in the United States, it is now widely used in other parts of the world.

LIN is a network protocol used for communication between components in modern vehicles. It is a low-cost single-wire serial protocol that supports communications up to 19.2 Kbit/s with a maximum bus length of 40 metres (131.2 ft).

<span class="mw-page-title-main">Data logger</span> Recording device

A data logger is an electronic device that records data over time or about location either with a built-in instrument or sensor or via external instruments and sensors. Increasingly, but not entirely, they are based on a digital processor, and called digital data loggers (DDL). They generally are small, battery-powered, portable, and equipped with a microprocessor, internal memory for data storage, and sensors. Some data loggers interface with a personal computer and use software to activate the data logger and view and analyze the collected data, while others have a local interface device and can be used as a stand-alone device.

<span class="mw-page-title-main">On-board diagnostics</span> Automotive engineering terminology

On-board diagnostics (OBD) is a term referring to a vehicle's self-diagnostic and reporting capability. In the United States, this self-diagnostic is a requirement to comply with Federal Emissions standards to detect failures that may increase the vehicle tailpipe emissions to more than 150% of the standard to which it was originally certified.

<span class="mw-page-title-main">MAP sensor</span> Sensor in an internal combustion engines electronic control system

The manifold absolute pressure sensor is one of the sensors used in an internal combustion engine's electronic control system.

<span class="mw-page-title-main">Chip tuning</span> Reprogramming a car to improve performance

Chip tuning is changing or modifying an erasable programmable read only memory chip in an automobile's or other vehicles electronic control unit to achieve superior performance, whether it be more power, cleaner emissions, or better fuel efficiency. Engine manufacturers generally use a conservative electronic control unit map to allow for individual engine variations, as well as infrequent servicing and poor-quality fuel. Vehicles with a remapped electronic control unit may be more sensitive to fuel quality and service schedules.

<span class="mw-page-title-main">Motronic</span> Series of engine control unit

Motronic is the trade name given to a range of digital engine control units developed by Robert Bosch GmbH which combined control of fuel injection and ignition in a single unit. By controlling both major systems in a single unit, many aspects of the engine's characteristics can be improved.

Renix was a joint venture by Renault and Bendix that designed and manufactured automobile electronic ignitions, fuel injection systems, electronic automatic transmission controls, and various engine sensors. Major applications included various Renault and Volvo vehicles. The name became synonymous in the U.S. with the computer and fuel injection system used on the AMC/Jeep 2.5 L I4 and 4.0 L I6 engines.

<span class="mw-page-title-main">Digifant engine management system</span> Engine component of the Volkswagen Group

Digifant is an Engine Management System operated by an Engine Control Unit that actuates outputs, such as fuel injection and ignition systems, using information derived from sensor inputs, such as engine speed, exhaust oxygen and intake air flow. Digifant was designed by Volkswagen Group, in cooperation with Robert Bosch GmbH.

Society of Automotive Engineers standard SAE J1708 is a standard used for serial communications between ECUs on a heavy duty vehicle and also between a computer and the vehicle. With respect to Open System Interconnection model (OSI), J1708 defines the physical layer. Common higher layer protocols that operate on top of J1708 are SAE J1587 and SAE J1922. The protocol is maintained by SAE International.

OBDuino is an open source trip computer design based on the Arduino platform. An OBDuino may be assembled and customised by an electronics hobbyist; it displays information such as instantaneous fuel economy, engine tuning parameters etc. on an LCD.

ISO 15765-2, or ISO-TP (Transport Layer), is an international standard for sending data packets over a CAN-Bus. The protocol allows for the transport of messages that exceed the eight byte maximum payload of CAN frames. ISO-TP segments longer messages into multiple frames, adding metadata (CAN-TP Header) that allows the interpretation of individual frames and reassembly into a complete message packet by the recipient. It can carry up to 232-1 (4294967295) bytes of payload per message packet starting from the 2016 version. Prior version were limited to a maximum payload size of 4095 bytes.

<span class="mw-page-title-main">Lucas 14CUX</span>

The Lucas 14CUX is an automotive electronic fuel injection system developed by Lucas Industries and fitted to the Rover V8 engine in Land Rover vehicles between 1990 and 1995. The system was also paired with the Rover V8 by a number of low-volume manufacturers such as TVR, Marcos, Ginetta, and Morgan.

An automotive scan tool (scanner) is an electronic tool used to interface with, diagnose and, sometimes, reprogram vehicle control modules.

The ELM327 is a programmed microcontroller produced for translating the on-board diagnostics (OBD) interface found in most modern cars. The ELM327 command protocol is one of the most popular PC-to-OBD interface standards and is also implemented by other vendors.

Unified Diagnostic Services (UDS) is a diagnostic communication protocol used in electronic control units (ECUs) within automotive electronics, which is specified in the ISO 14229-1. It is derived from ISO 14230-3 (KWP2000) and the now obsolete ISO 15765-3. 'Unified' in this context means that it is an international and not a company-specific standard. By now this communication protocol is used in all new ECUs made by Tier 1 suppliers of Original Equipment Manufacturer (OEM), and is incorporated into other standards, such as AUTOSAR. The ECUs in modern vehicles control nearly all functions, including electronic fuel injection (EFI), engine control, the transmission, anti-lock braking system, door locks, braking, window operation, and more.

CAN FD is a data-communication protocol used for broadcasting sensor data and control information on 2 wire interconnections between different parts of electronic instrumentation and control system. This protocol is used in modern high performance vehicles.

References

  1. 1 2 "Basic Information | On-Board Diagnostics (OBD)". US EPA. 16 March 2015. Retrieved 24 June 2015.
  2. "Escape PHEV TechInfo - PIDs". Electric Auto Association - Plug in Hybrid Electric Vehicle. Retrieved 11 December 2013.
  3. 1 2 "Extended PID's - Signed Variables". Torque-BHP. Retrieved 17 March 2016.
  4. 1 2 "Final Regulation Order" (PDF). US: California Air Resources Board. 2015. Retrieved 4 September 2021.
  5. "OBD2 Codes and Meanings". Lithuania: Baltic Automotive Diagnostic Systems. Retrieved 11 June 2020.
  6. "OBD2 Freeze Frame Data: What is It? How To Read It?". OBD Advisor. 2018-02-28. Retrieved 2020-03-14.
  7. "ETI Full Membership FAQ". The Equipment and Tool Institute. Retrieved 29 November 2013. showing cost of access to OBD-II PID documentation
  8. "Special OEM License Requirements". The Equipment and Tool Institute. Retrieved 13 April 2015.

Further reading