Table of Contents
- Introduction
- Diagnostic Mode vs Diagnostic Service
- Read supported PIDs request/response messages
- Read freeze frame PIDs request/response messages
- Scantool example
- Conclusion
Introduction
Mode/Service $02 provides access to freeze frame data. Freeze frame data is a snapshot of the operating conditions of a vehicle at the moment an emissions-related Diagnostic Trouble Code (DTC) is stored in the engine control module (ECM). The snapshot data is basically a list of parameter identification (PID), which are measured on-board the vehicle. This data is crucial for diagnosing and resolving issues that could affect emissions compliance.
To retrieve information from the vehicle, the scantool (client) sends a request for freeze frame data to the vehicle (serve) and the vehicle responds with the data.
The request message includes a parameter identification (PID) value that indicates to the on-board system the specific information requested. The ECU(s) shall respond to this message by transmitting the requested data value stored by the system. All data values returned for sensor readings shall be actual stored readings, not default or substitute values used by the system because of a fault with that sensor.
Diagnostic Mode vs Diagnostic Service
Service $02 – Request Powertrain Freeze Frame Data is defined in both SAE and ISO standards:
- SAE J1979:2017 – E/E Diagnostic Test Modes
- ISO 15031-5 – Emissions-related diagnostic services
Due to the fact that the SAE standards is also called E/E Diagnostics Test Modes, in some literature the diagnostic services are referred as diagnostics modes, but they mean the same thing.
Key attributes of Mode/Service $02 include:
- Purpose: the main purpose of Service $02 is to help technicians and engineers identify the environmental and operational factors that triggered a fault.
- Data Provided: freeze frame data includes parameters like engine speed, throttle position, vehicle speed, fuel system status, and sensor readings (e.g., oxygen sensor values) at the time the DTC was logged.
- Triggering Conditions: the ECM captures this data when certain fault conditions are met, prioritizing the most critical emissions-related issues.
- Access: diagnostic tools can request freeze frame data via Service $02 using standardized protocols defined in J1979, such as ISO 15765-4 (CAN).
NOTE: Freeze Frame is captured and stored when the DTC is set, not when the problem began! For example, misfire is evaluated every 1000 rpm. A misfire DTC may be stored 60-90 seconds after the misfire initially occurred, at substantially different engine speed and load conditions.
Read supported PIDs request/response messages
Table 1 below defines the structure of a request message for retrieving freeze frame data related to a specific PID (Parameter ID) and frame number.
- Data Byte #1: Contains the Service Identifier (SID), which is 02 in hexadecimal. This signifies the request for freeze frame data.
- Data Byte #2: Specifies the PID that identifies which parameter’s data is being requested (e.g., engine RPM, vehicle speed).
- Data Byte #3: Specifies the frame number (FRNO), which allows for identifying a particular freeze frame snapshot (if multiple freeze frames are stored).
Data Byte | Parameter Name | Cvt | Byte Value (Hex) | Mnemonic |
---|---|---|---|---|
#1 | Request powertrain freeze frame data request SID | M | 02 | SIDRQ |
#2 | PID (see Appendix A in SAE J1979DA) | M | xx | PID |
#3 | frame # | M | xx | FRNO |
Table 1. Request Powertrain Freeze Frame Data Request Message (read supported PIDs)
Table Header Overview
- Data Byte: represents the position of the byte in the message.
- Parameter Name: describes the type of information requested or transmitted.
- Cvt (Conversion Type): specifies if the parameter is Mandatory (M), User Optional (U), or Conditional (C).
- Hex Value: hexadecimal values used in the message.
- Mnemonic: shortened versions (labels) of the parameters.
The request message tells the vehicle’s ECM (Electronic Control Module) that the diagnostic tool wants to access freeze frame data associated with a specific emission-related fault or condition.
Table 2 below describes the response from the ECM to the diagnostic tool after it receives the request (SID $02).
- Data Byte #1: Contains the response SID, which is 42 (hex). This is the response to SID $02, which is 0x40 + 0x02.
- Data Byte #2: Contains the same PID that was requested.
- Data Byte #3: Contains the frame number (FRNO).
- Data Bytes #4-7: Provide the actual freeze frame data, organized into supported PIDs; Data A, Data B, Data C, and Data D represent specific values for the requested PID. These are reported in hexadecimal format.
Data Byte | Parameter Name | Cvt | Byte Value (Hex) | Mnemonic |
---|---|---|---|---|
#1 | Request powertrain freeze frame data response SID | M | 42 | SIDPR |
#2 | PID | M | xx | PID |
#3 | frame # | M | xx | FRNO |
#4 | Data A: supported PIDs | M | xx | DATA_A |
#5 | Data B: supported PIDs | M | xx | DATA_B |
#6 | Data C: supported PIDs | M | xx | DATA_C |
#7 | Data D: supported PIDs | M | xx | DATA_D |
Table 2. Request Powertrain Freeze Frame Data Response Message (report supported PIDs)
Request Example (from the scantool to ECM): 02 00 01
02
– Service Identifier (SID) for freeze frame data request.00
– PID to report supported PIDs.01
– frame number (the ECU can store multiple freeze frames).
Response Example (from the ECM to scantool): 42 00 01 5F B8 00 00
42
– Response Service Identifier.00
– PID to report supported PIDs.01
– frame number (the ECU can store multiple freeze frames).5F B8 00 00
– Bitmap indicating supported PIDs; each bit in the data bytes corresponds to a PID. If a bit is 1, the PID is supported.
To know exactly which PIDs are supported, we need to break down the bitmap response. For this we will convert the response bytes DATA_A and DATA_B from hexadecimal values to binary values. The response bytes DATA_C and DATA_D are irrelevant since their value is 00
.
Byte value | 0x5F | 0xB8 | ||||||||||||||
Bit # | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Bit value | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 0 |
PID # | 0x01 | 0x02 | 0x03 | 0x04 | 0x05 | 0x06 | 0x07 | 0x08 | 0x09 | 0x0A | 0x0B | 0x0C | 0x0D | 0x0E | 0x0F | 0x10 |
PID supported | no | yes | no | yes | yes | yes | yes | yes | yes | no | yes | yes | yes | no | no | no |
Table 3. Bitmap of the supported PIDs data bytes.
Description of the supported PIDs:
- PID 0x02 – DTC that caused required freeze frame data storage
- PID 0x03 – Fuel system status
- PID 0x04 – Calculated engine load value
- PID 0x05 – Engine coolant temperature [°C]
- PID 0x06 – Short Term Fuel Trim – Bank 1/3 [%]
- PID 0x07 – Long Term Fuel Trim – Bank 1/3 [%]
- PID 0x08 – Short Term Fuel Trim – Bank 2/4 [%]
- PID 0x09 – Long Term Fuel Trim – Bank 2/4 [%]
- PID 0x0B – Intake Manifold Absolute Pressure [kPa]
- PID 0x0C – Engine Speed [rpm]
- PID 0x0D – Vehicle Speed Sensor [km/h]
Read freeze frame PIDs request/response messages
Now that the list of supported PIDs is known, the scantool (client) can request the value of the PIDs memorized when a Diagnostic Trouble Code (DTC) was logged.
Table 4 below defines the structure of a request message to retrieve a specific freeze frame value for a given PID (Parameter ID) and frame number.
- Data Byte #1: contains the Service Identifier (SID) 02 in hexadecimal. This tells the ECM that the scantool is requesting freeze frame data.
- Data Byte #2: specifies the PID (Parameter ID) whose freeze frame data is to be retrieved. The PID value must match one of the supported PIDs from a previous response.
- Data Byte #3: specifies the frame number (FRNO), identifying which snapshot (if multiple) is to be retrieved.
Data Byte | Parameter Name | Cvt | Byte Value (Hex) | Mnemonic |
---|---|---|---|---|
#1 | Request current powertrain diagnostic data request SID | M | 02 | SIDRQ |
#2 | PID (see Appendix B in SAE J1979DA) | M/Ca | xx | PID |
#3 | frame # | M | xx | FRNO |
Ca = Conditional : PID value shall be one of the supported PIDs of previous response message. |
Table 4. Request Powertrain Freeze Frame Data Request Message (read freeze frame PID value).
This table ensures the diagnostic tool can request freeze frame values for a specific parameter in a particular stored frame, enabling precise analysis of conditions at the time of a fault.
Table 5 below describes the structure of the response from the ECM when a freeze frame PID value is requested:
- Data Byte #1: contains the response SID, which is 42 in hexadecimal. This signifies that the ECM is responding to a freeze frame request.
- Data Byte #2: the PID of the requested parameter.
- Data Byte #3: the frame number corresponding to the requested freeze frame.
- Data Bytes #4 to #7: provide the actual freeze frame data for the requested PID.
- Data A, B, C, and D represent the bytes of data, depending on the PID.
- Some data bytes (e.g., Data B, C, D) are conditional, meaning they depend on the specific PID being requested.
Data Byte | Parameter Name | Cvt | Byte Value (Hex) | Mnemonic |
---|---|---|---|---|
#1 | Request powertrain freeze frame data response SID | M | 42 | SIDPR |
#2 | PID | M | xx | PID |
#3 | frame # | M | xx | FRNO |
#4 | Data A | M | xx | DATA_A |
#5 | Data B | Ca | xx | DATA_B |
#6 | Data C | C | xx | DATA_C |
#7 | Data D | C | xx | DATA_D |
Ca = Conditional : Data B – D depend on selected PID value. |
Table 5. Request Powertrain Freeze Frame Data Response Message (report freeze frame PID value).
From the supported PIDs list we know which PIDs we can request the stored values for. The scantool will request the data for each PID in an sequential manner. For this example we are going to request the DTC which caused the freeze frame and the value of the engine speed, when the DTC was stored.
Request Example (from the scantool to ECM): Request PID 0x02 – DTC that caused required freeze frame data storage : 02 02 01
02
– Request powertrain freeze frame data request SID.02
– PID: DTC that caused required freeze frame data storage.01
– Frame number.
Response Example (from the ECM to scantool): 42 02 01 01 30
42
– Request powertrain freeze frame data response SID.02
– PID: DTC that caused required freeze frame data storage.01
– Frame number.01
– DTC High Byte of P0130.30
– DTC Low Byte of P0130.
The response message tell us that the DTC that caused the freeze frame is P0130 – O2 Sensor Circuit Malfunction (Bank 1, Sensor 1).
Now we want to know what was the engine speed when this DTC was stored. For this the scantool will request the value of the PID 0x0C.
Request Example (from the scantool to ECM): Request PID 0x0C – Engine speed [rpm] : 02 0C 01
02
– Request powertrain freeze frame data request SID.0C
– PID: DTC that caused required freeze frame data storage.01
– Frame number.
Response Example (from the ECM to scantool): 42 0C 01 1A F8
42
– Request powertrain freeze frame data response SID.0C
– PID: DTC that caused required freeze frame data storage.01
– Frame number.1A F8
– Engine speed reported on 2 bytes of data
The conversion from hexadecimal to decimal is done as:
- convert from hexadecimal to decimal:
1A = 26
,F8 = 248
- convert from decimal to physical using this formula: ((DATA_A*256)+DATA_B)/4, which gives 1726 rpm.
Hint: The conversion formulas for all the PIDs can be found in the SAE J1979 DA and ISO 15031-5.
Scantool example
The image below shows a compact OBD-II diagnostic scantool designed for vehicles. The device has a small rectangular screen displaying a “Diagnostic Menu” with the following options:
- Read Codes
- Erase Codes
- View Freeze Frame
- I/M Readiness
The OBD-II connector, which plugs into the vehicle’s diagnostic port, is attached via a cable at the top of the scanner. This device is typically used for retrieving diagnostic trouble codes (DTCs), viewing freeze frame data, and checking emission readiness status. It is portable and user-friendly, ideal for automotive troubleshooting.
To view the Freeze Frame data, the user needs to navigate to the menu using the arrow buttons and press the OK button.
The image below shows the display of an ANCEL JP700 OBD-II diagnostic scantool, specifically showing freeze frame data retrieved from a vehicle’s onboard diagnostics system.
Here’s the information displayed:
- DTCFRZ: the diagnostic trouble code (DTC) captured during the freeze frame. The code shown is P0420, which indicates a potential issue with the Catalyst System Efficiency Below Threshold (Bank 1).
- FUELSYS1: the status of the first fuel system, displayed as OL (Open Loop), meaning the engine control module is not using the oxygen sensor feedback for fuel mixture adjustment.
- FUELSYS2: indicates the status of the second fuel system, which is likely inactive or not used.
- LOAD_PCT: the engine’s calculated load percentage at the time the code was triggered, shown as 18.4%.
- ECT: the engine coolant temperature, displayed as 85°C.
The labels JOBD/OBDII/EOBD on the device indicate compatibility with Japanese (JOBD), standard OBD-II, and European (EOBD) protocols. This device helps mechanics and users diagnose and troubleshoot issues based on real-time and freeze frame data.
The next image is a screenshot from an OBD-II PC diagnostic tool interface (software) OBD 2007. It shows data retrieved using Service $02 – Request Freeze Frame Data, which is used to access freeze frame data stored by a vehicle’s ECU.
This data is critical for troubleshooting. By analyzing these parameters, a mechanic can understand the vehicle’s condition when the DTC was triggered. For example, the P1461 DTC, combined with parameters like engine load and coolant temperature, helps narrow down the issue’s cause.
Conclusion
Service $02 is used by on-board diagnostic (OBD) systems in modern vehicles, by providing critical freeze frame data that captures the exact conditions under which a Diagnostic Trouble Code (DTC) was triggered. This snapshot of parameters, including engine load, coolant temperature, vehicle speed, and intake manifold pressure, helps technicians analyze the root cause of an issues or defect.
Key attributes of Service $02 – Request Powertrain Freeze Frame Data
- Purpose: service $02 provides freeze frame data, a snapshot of key vehicle parameters when a Diagnostic Trouble Code (DTC) is triggered.
- Diagnostic Insight: it captures critical data such as engine speed, vehicle speed, coolant temperature, and manifold pressure, offering context for troubleshooting.
- Supported PIDs: freeze frame data depends on the PIDs (Parameter IDs) supported by the vehicle’s ECU and previously identified using Service $01.
- Triggered by DTCs: the data is stored whenever a fault meets the criteria for DTC storage, helping technicians pinpoint the conditions under which the issue occurred.
- Interdependency with Other Services: service $02 relies on supported PID information from Services $01 and $09 to interpret data correctly.
- Emission Compliance: freeze frame data is especially valuable for diagnosing issues related to emission control systems.
- Scantool Interaction: scantools are used to request and retrieve Service $02 data, with clear hexadecimal codes defining requests and responses.
- Improves Efficiency: by providing precise fault context, Service $02 reduces diagnostic time and supports targeted repairs.
By enabling a deeper understanding of a vehicle’s performance at the time of a fault, Service $02 enhances troubleshooting accuracy, reduces diagnostic time, and ensures effective repairs. It serves as an essential tool for maintaining vehicle health and compliance with emission standards, reinforcing its importance in automotive diagnostics.