OBD Diagnostic Service (Mode) $03 – Request emission-related diagnostic trouble codes (DTCs)

Table of Contents

Introduction

Service/Mode $03 of the OBD-II (On-Board Diagnostics) standard is used to read emission-related Diagnostic Trouble Codes (DTCs) from the vehicle’s Engine Control Unit (ECU). These DTCs indicate problems related to the engine, transmission, and emissions systems that can affect the vehicle’s compliance with emission regulations.

On-board of an ECU (Electronic Control Unit), there are different types of DTC, as explained in the table below.

Type of DTC Description OBD Service to read OBD Service to clear
Pending
  • these are faults detected by the vehicle’s onboard diagnostic system in the current driving cycle.
  • have not been confirmed as actual problems.
  • these DTCs become active only if they reoccur a certain number of times in a certain number of driving cycles.
  • the number of reoccurrences and the number of drive cycles depends on the fault.
Service/Mode $07 Service/Mode $04
Confirmed
  • these are faults that have been verified by the system over multiple driving cycles.
  • they meet the conditions required to be considered an actual issue.
  • the fault has been continuously active for a specific monitoring routine and is matured enough in the
    current operation cycle so that it can be said confirmed.
Service/Mode $03 Service/Mode $04
Permanent
  • these are DTCs that are “confirmed” and are retained in the non-volatile memory of the ECU until the appropriate monitor for each DTC has determined that the malfunction is no longer present and is not commanding the MIL on.
  • the intended use of these DTCs is to prevent vehicles from passing an in-use inspection simply by disconnecting the battery or clearing DTCs with a scan tool prior to the inspection.
  • the presence of permanent DTCs at an inspection without the MIL illuminated is an indication that a proper repair was not verified by the on-board monitoring system
1)Service/Mode $0A 2)Can NOT be cleared by scantool
1) applicable only for Diagnostics over CAN (ISO 15765-4)
2) permanent DTC can only self-heal, they will disapear after a number of driving cycle if the fault has been fixed

Table 1. Types of DTCs used in OBD-II.

The purpose of Service $03 is to enable the external test equipment to read “confirmed” emission-related DTCs.

Go back

DTC encoding

The recommended Diagnostic Trouble Codes (DTCs) follow a specific structure. Each code is a three-digit hexadecimal number preceded by an alphanumeric prefix that identifies the category of the fault. Here’s how the structure works:

  • alphanumeric designators (prefixes): the alphanumeric prefix consists of a letter and a digit, which classify the type of system or component affected:
    • B0, B1, B2, B3: codes for the Body system (e.g., airbags, climate control, lighting).
    • C0, C1, C2, C3: codes for the Chassis system (e.g., ABS, traction control).
    • P0, P1, P2, P3: codes for the Powertrain system (e.g., engine, transmission, emissions).
    • U0, U1, U2, U3: codes for Network and Vehicle Integration (e.g., communication between control modules).
  • code structure: the structure of the code is partially open-ended, meaning:
    • certain numeric sequences are reserved for standardized codes. These are uniform and assigned by regulatory bodies or future updates to ensure consistency across manufacturers.
    • for example: portions of the B0, C0, P0, P2, P3, U0, and U3 categories are reserved for these standardized codes.
    • other portions of the code space may be used by manufacturers for proprietary or specialized codes unique to their vehicles.

The following table specifies systems, code categories, hexadecimal values and particular sections of electrical/electronic systems diagnostic.

System Code Categories Hex Value Appendix
Body B0xxx – B3xxx 8xxx – Bxxx B0
Chassis C0xxx – C3xxx 4xxx – 7xxx C0
Powertrain P0xxx – P3xxx 0xxx – 3xxx P0
Network & Vehicle Integration U0xxx – U3xxx Cxxx – Fxxx U0

Table 2. OBD-II DTCs categories.

Most diagnostic trouble codes (DTCs) for circuits, components, or systems that do not use a detailed sub-fault strategy fall into four basic categories:

  1. General Circuit/Open: indicates an open circuit or general issue with connectivity.
  2. Range/Performance: indicates a signal that is outside the expected range or indicates poor performance.
  3. Circuit Low: indicates a signal that is lower than expected when the external circuit, component, or system is connected; the specific signal type (e.g., voltage, frequency) should be included in the message after “Circuit Low.”
  4. Circuit High: indicates a signal that is higher than expected when the external circuit, component, or system is connected; the specific signal type (e.g., voltage, frequency) may be included in the message after “Circuit High.”

Let’s take for example the code P0143 – O2 Sensor Circuit Low Voltage Bank 1 Sensor 3 and break it down.

OBD-II DTC encoding

Image: OBD-II DTC encoding (2-byte)

Diagnostic Trouble Codes (DTCs) can be defined either 2 bytes long (e.g., SAE J1979) or 3 bytes long (e.g., ISO 14229-1). The decoding process depends on the length and format of the DTC:

  • 2-byte DTCs:
    • These are always decoded using a single, standardized list contained in SAE J2012DA.
  • 3-byte DTCs:
    • the two most significant bytes are decoded based on the DTC Format Identifier (e.g., 0x00 or 0x04), as specified by the diagnostic protocol in use.
    • the least significant byte is decoded using the SAE J2012DA Failure Type Byte (FTB) Table, which identifies the specific type of fault.

This structure ensures compatibility with different diagnostic protocols and provides detailed fault information by combining the main DTC code with the failure type.

The DTC P0143 is what the user/service technician is seeing on the diagnostic scantool. On the communication bus (K-line, CAN, etc.) the same DTC is sent as a hexadecimal value as described in the table below.

Scantool display P 0 1 4 3
Binary conversion 0 0 0 0 0 0 0 1 0 1 0 0 0 0 1 1
Hexadecimal conversion 0x0 0x1 0x4 0x03
Byte type DTC high byte DTC low byte
Byte value 0x01 0x43
Bus value 0x0143

Table 3. Decomposition of DTC P0143.

This means that on the communication bus the DTC P0143 is going to be transmitted as 2-bytes in hexadecimal format: 0x0143.

Let’s take another example, DTC code B3A1C – A/C System Temperature – Too High.

Scantool display B 3 A 1 C
Binary conversion 1 0 1 1 1 0 1 0 0 0 0 1 1 1 0 0
Hexadecimal conversion 0xB 0xA 0x1 0xC
Byte type DTC high byte DTC low byte
Byte value 0xBA 0x1C
Bus value 0xBA1C

Table 4. Decomposition of DTC B3A1C.

ISO/SAE-controlled diagnostic trouble codes (DTCs) are standardized codes applicable to all vehicles for which ISO/SAE OBD standards are mandatory. These codes have the following characteristics:

  • Standardization: these codes are consistent across manufacturers to ensure compatibility and uniform understanding of common faults.
  • Reserved numbers: Unused codes within each category are reserved by ISO/SAE for future updates and should not be used without approval.
  • Uniform faults: While service procedures may vary between manufacturers, the faults represented by these codes are sufficiently consistent to warrant a standardized DTC.
  • Usage restrictions: Manufacturers are prohibited from using ISO/SAE-controlled codes until they are formally approved by ISO/SAE.

The Powertrain DTCs have the following areas of vehicle systems:

P 0 Overall system
1 Secondary air system/Mixture preparation
2 Fuel system
3 Ignition system/Misfires
4 Additional exhaust gas monitoring
5 Cruise control/Idle speed control
6 Input/Output signals, Control units
7 Gearbox/Transmission
8 Transmission
9 Transmission
A Hybrid Propulsion
B Reserved

Table 5. The areas of vehicle systems for Powertrain DTCs.

Manufacturer-controlled DTCs address faults that are unique to a particular manufacturer due to differences in system design, implementation, or diagnostic strategies. These codes have the following characteristics:

  • Manufacturer-specific use: these codes are not widely shared among manufacturers because they reflect unique system or strategy variations.
  • Consistency encouraged: Manufacturers or suppliers responsible for designing diagnostic algorithms, software, and DTCs are strongly encouraged to maintain consistency in code assignments across their entire product line.
  • Customization allowed: Manufacturers have the flexibility to define DTCs to align with their specific controller algorithms.
  • Standardized descriptions: All DTC descriptions must comply with SAE J1930 or ISO 15031-2 standards, ensuring clear and consistent communication of fault information.

Go back

Examples of DTCs

Powertrain P0004 Fuel Volume Regulator “A” Control Circuit High
P01E8 Engine Coolant Heater “A” Control Circuit/Open
P219C Cylinder 1 Air-Fuel Ratio Imbalance
Chassis C0005 Front/Left Front Park Brake Actuator
C061C Variable Effort Steering Actuator Control Circuit/Open
C06A5 Brake Master Cylinder Piston Position Sensor “A” Circuit Intermittent/Erratic
Body B0104 Sensor Cleaning Air Blower Actuator “A” Relay Control
B0171 A/C System Performance
B023E Side Mirror Spotlight Lamp
Network & Vehicle Integration U0009 High Speed CAN Communication Bus (-) shorted to Bus (+)
U013C Lost Communication With Accelerator Pedal Module
U0301 Software Incompatibility With ECM/PCM

Table 6. Example of ISO/SAE controlled DTCs.

Go back

Read DTC sequence

The purpose of Service/Mode $03 is to allow external test equipment to retrieve confirmed emission-related DTCs through a two-step process:

Step 1. Query the Number of Stored DTCs

  • Send a Service $01, PID $01 request to all ECUs capable of reporting emission-related DTCs.
  • Each ECU responds with a message indicating the number of stored DTCs:
    • If DTCs are stored, the response includes the count.
    • If no DTCs are stored, the response indicates zero (0) stored DTCs.

Step 2. Retrieve the DTCs

  • Send a Service $03 request to each ECU to retrieve all stored emission-related DTCs.
    • ECUs with stored DTCs respond with one or more messages, each containing up to three DTCs per message.
    • If no DTCs are stored, the ECU may choose not to respond.

The image below depicts the sequence of request-response messages between the scantool and ECU to retrieve the confirmed DTCs.

OBD-II Read DTC sequence

Image: OBD-II Read DTC sequence

Handling Additional DTCs

If additional DTCs are logged between the initial count (Step 1) and the retrieval (Step 2), the number of reported DTCs may exceed the expected count. In such cases, the external test equipment must repeat the cycle (Steps 1 and 2) until the number of retrieved DTCs matches the count reported in the Service $01, PID $01 response. This iterative process ensures the accurate retrieval of all confirmed emission-related DTCs.

Go back

Request number of DTCs

The table below defines the structure of the message sent by the scantool to request the current powertrain diagnostic data (specifically, the number of emission-related DTCs and the status of the Malfunction Indicator Lamp, or MIL).

Data Byte Parameter Name Cvt Byte Value (Hex) Mnemonic
#1 Request current powertrain diagnostic data request SID M 01 SIDRQ
#2 PID {Number of emission-related DTCs and MIL status} M 01 PID

Table 7. Request current powertrain diagnostic data request message (PID $01).

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.

Data Byte Details

  • Data Byte #1: Service Identifier (SID) for the request.
    • Byte Value: 01 (indicating Service $01 – Request Current Data).
  • Data Byte #2: Parameter Identifier (PID) that specifies what data is being requested.
    • Byte Value: 01 (indicating PID $01 – Number of emission-related DTCs and MIL status).

The table below defines the structure of the response sent by the ECU to the scantool. The response contains the requested information, including the number of stored emission-related DTCs and the MIL status.

Data Byte Parameter Name Cvt Byte Value (Hex) Mnemonic
#1 Request current powertrain diagnostic data response SID M 41 SIDPR
#2 PID {Number of emission-related DTCs and MIL status} M 01 PID
#3 Data A M xx DATA_A
#4 Data B M xx DATA_B
#5 Data C M xx DATA_C
#6 Data D M xx DATA_D

Table 8. Request current powertrain diagnostic data response message (PID $01).

Data Byte Details

  • Data Byte #1: Response Service Identifier (SID) for the response
    • Byte Value: 41 (indicating a response to Service $01).
  • Data Byte #2: PID, matching the PID sent in the request.
    • Byte Value: 01 (indicating a response to PID $01).
  • Data Bytes #3–#6: Data Record:
    • Data A: Encodes the MIL status and the number of stored emission-related DTCs.
    • Data B–D: Provide additional status information about readiness tests and other diagnostic data.

To understand how the number of stored DTCs are embedded into the PID $01, let’s break down its structure. The table below explains the decomposition of every byte of the PID $01.

Bytes Bit # Min value Max value Bit Description
Byte 1
(A)
0 0 127 Number of DTCs stored in this ECU
1
2
3
4
5
6
7 0 = MIL OFF 1 = MIL ON Malfunction Indicator Lamp (MIL) status
Byte 2
(B)
0 0 = NO 1 = YES Misfire monitoring supported
1 0 = NO 1 = YES Fuel system monitoring supported
2 0 = NO 1 = YES Comprehensive component monitoring supported
3 0 = SI 1 = CI Compression ignition monitoring supported
4 0 = YES 1 = NO Misfire monitoring ready
5 0 = YES 1 = NO Fuel system monitoring ready
6 0 = YES 1 = NO Comprehensive component monitoring ready
7 0 0 ISO/SAE reserved
Byte 3
(C)
0 0 = NO 1 = YES Catalyst monitoring supported
NMHC catalyst monitoring supported
1 Heated catalyst monitoring supported
NOx after-treatment monitoring supported
2 Evaporative system monitoring supported
ISO/SAE reserved
3 Secondary air system monitoring supported
Boost pressure system monitoring supported
4 ISO/SAE reserved
ISO/SAE reserved
5 Oxygen sensor monitoring supported
Exhaust gas sensor monitoring supported
6 Oxygen sensor heater monitoring supported
PM filter monitoring supported
7 EGR and/or VVT system monitoring supported
EGR and/or VVT system monitoring supported
Byte 4
(D)
0 Catalyst monitoring ready
NMHC catalyst monitoring ready
1 Heated catalyst monitoring ready
NOx aftertreatment monitoring ready
2 Evaporative system monitoring ready
ISO/SAE reserved
3 Secondary air system monitoring ready
Boost pressure system monitoring ready
4 ISO/SAE reserved
ISO/SAE reserved
5 Oxygen sensor monitoring ready
Exhaust gas sensor monitoring ready
6 Oxygen sensor heater monitoring ready
PM filter monitoring ready
7 EGR and/or VVT system monitoring ready
EGR and/or VVT system monitoring ready

Table 9. PID $01 structure (encoding).

As you can see, the first 6 bits of byte A will give the total number of stored DTCs.

Request Example (from the scantool to ECU): 01 01

  • 01 – Request current powertrain diagnostic data request SID.
  • 01 – PID: Number of emission-related DTCs and MIL status.

Response Example (from the ECM to scantool): 41 01 83 33 FF 63

  • 41 – Request current powertrain diagnostic data response SID.
  • 01 – PID: Number of emission-related DTCs and MIL status.
  • 83
    • Number of emission-related DTCs: 3
    • MIL: ON
  • 33
    • Misfire monitoring supported (YES)
    • Fuel system monitoring supported (YES)
    • Compression ignition monitoring supported (SI)
    • Misfire monitoring ready (NO)
    • Fuel system monitoring ready (NO)
  • FF – all supported.
  • 63
    • Catalyst monitoring ready (YES)
    • Heated catalyst monitoring ready (YES)
    • Oxygen sensor monitoring ready (YES)
    • Oxygen sensor heater monitoring ready (YES)

From the response message we can see that there are 3 stored and confirmed DTCs, which we are going to read next with Service $03.

Go back

Request confirmed DTCs

Table 10 below specifies the structure of the message sent by the tester (scantool) to request Diagnostic Trouble Codes (DTCs) related to emissions from the ECU.

Data Byte Parameter Name Cvt Byte Value (Hex) Mnemonic
#1 Request emission-related DTC request SID M 03 SIDRQ

Table 10. Request emission-related DTC request message.

Data Byte Details

  • Data Byte #1: Contains the Service Identifier (SID), which is 03 (hex) for this request.

Table 11 below describes the structure of the response message sent by the ECU to the tester (scantool).

Data Byte Parameter Name Cvt Byte Value (Hex) Mnemonic
#1 Request emission-related DTC response SID M 43 SIDPR
#2 DTC#1 (High Byte) M/Ca xx DTC1HI
#3 DTC#1 (Low Byte) M/C xx DTC1LO
#4 DTC#2 (High Byte) M/C xx DTC2HI
#5 DTC#2 (Low Byte) M/C xx DTC2LO
#6 DTC#3 (High Byte) M/C xx DTC3HI
#7 DTC#3 (Low Byte) M/C xx DTC3LO
a: C = Conditional — DTC#1, DTC#2, and DTC#3 are always present. If no valid DTC number is included the DTC values shall contain $00.

Table 11. Request emission-related DTC response message.

Data Byte Details

  • Data Byte #1: Contains the Service Identifier for the response, which is 43 (hex).
  • Data Byte #2 to #7: Contain the emission-related DTCs. Each DTC is represented by two bytes: High Byte and Low Byte

Request Example (from the scantool to ECU): 03

  • 03 – Request emission-related DTC request SID.

Response Example (from the ECM to scantool): 43 01 43 01 96 02 34

  • 43 – Request emission-related DTC response SID.
  • 01 – DTC#1 High Byte of P0143 – O2 Sensor Circuit Low Voltage Bank 1 Sensor 3.
  • 43 – DTC#1 Low Byte of P0143 – O2 Sensor Circuit Low Voltage Bank 1 Sensor 3.
  • 01 – DTC#2 High Byte of P0196 – Engine Oil Temperature Sensor “A” Range/Performance.
  • 96 – DTC#2 Low Byte of P0196 – Engine Oil Temperature Sensor “A” Range/Performance.
  • 02 – DTC#3 High Byte of P0234 – Turbocharger/Supercharger “A” Overboost Condition.
  • 34 – DTC#3 Low Byte of P0234 – Turbocharger/Supercharger “A” Overboost Condition.

Go back

Read DTCs example

The image below displays the Readiness Status section from the OBD-II scan tool for Service $01 PID $01, which reports the number of active emission-related Diagnostic Trouble Codes (DTCs), the Malfunction Indicator Lamp (MIL) status, and the readiness status of various onboard monitors.

OBD-II Scantool Service $01 PID $01 Response

Image: OBD-II Scantool Service $01 PID $01 Response.

The system reports 2 stored emission-related DTCs, but the MIL is off, suggesting the issues may not be currently active or critical. The Fuel System, Comprehensive Component, and EGR System tests are supported and have been successfully completed. Most non-continuous monitors (e.g., Catalyst, Oxygen Sensor) are not supported in this ECU configuration.

The image below, from an OBD-II scantool, displays the results for Service $03, which reports stored Diagnostic Trouble Codes (DTCs).

OBD-II Scantool Service $03 Response

Image: OBD-II Scantool Service $03 Response.

With Service $03 two codes are retrieved, P1462 and P1461, which indicate issues with the air conditioning (A/C) pressure sensor circuit, specifically high and low voltage conditions. These are stored in the ECU and may represent past or persistent faults.

Go back

Conclusions

Service $03 in the OBD-II diagnostic protocol is responsible for retrieving Diagnostic Trouble Codes (DTCs) from the vehicle’s memory, providing critical information about malfunctions or irregularities detected by the Engine Control Unit (ECU). These codes represent specific issues, such as faults in the emission system, sensors, or actuators, enabling technicians and vehicle owners to identify and address potential problems. Service $03 is essential for maintaining vehicle performance and ensuring compliance with emission standards. By offering a detailed record of stored issues, it supports timely maintenance and repairs, contributing to improved engine efficiency, reduced environmental impact, and enhanced vehicle reliability.

Leave a Reply

Ad Blocker Detected

Dear user, Our website provides free and high quality content by displaying ads to our visitors. Please support us by disabling your Ad blocker for our site. Thank you!

Refresh