Table of Contents
Diagnostic Trouble Codes, or DTCs, are a system of diagnostic codes used to indicate issues with a vehicle’s performance. These codes have been in use since the 1980s, and have become increasingly important in recent years as vehicle technology has advanced. In this article, we will explore the history of DTC codes, what they mean, and how to read and interpret them, both for OBD-II and J1939 systems.
History of DTC Codes:
DTC codes were first implemented in the 1980s as a way to standardize diagnostic procedures for vehicles. The first codes were simple and only provided a rough indication of where the problem might lie. As technology advanced, the codes became more detailed, providing more information about the specific issue.
OBD-II and J1939 Systems:
The two main types of DTC systems in use today are OBD-II and J1939. OBD-II, or On-Board Diagnostics version II, is a system used in passenger cars and light trucks. J1939, on the other hand, is a system used in heavy-duty vehicles such as commercial trucks and buses. Both systems use DTC codes to indicate issues, but the codes themselves can be different between the two systems.
How to Read an OBD-II DTC:
To read an OBD-II DTC, you will need a diagnostic tool that can connect to the vehicle’s OBD-II system. These tools can be purchased at most auto parts stores, and many come with software that can read and interpret the codes. Once the tool is connected to the vehicle, it will display the codes that have been stored in the vehicle’s system.
To read the codes, the scanner must be connected to the vehicle’s diagnostic port, typically located under the dashboard. Once connected, the scanner will initiate communication with the vehicle’s Engine Control Module (ECM) and request any stored diagnostic trouble codes. The scanner will then display the codes on its screen for the technician to read.
In addition to reading codes, some scanners also provide additional features such as Live Data Streaming, which allows the technician to monitor the vehicle’s sensor data in real-time, freeze frame data, which captures the vehicle’s sensor data at the time a code was set and can be used as a reference for diagnosis, and system-specific functions such as resetting monitors or performing system-specific tests.
For example, the code P0171 indicates a problem with the fuel system in the engine. This code is a generic code, which means that it applies to all vehicles equipped with OBD-II. The code P0171 indicates explicitly that the engine control module has detected a lean condition in the fuel system.
How to Interpret an OBD-II DTC:

Interpreting an OBD-II DTC can be a bit more complex than simply reading the code. Each code has a specific meaning, and many codes can have multiple causes. A good place to start when interpreting a code is to look up the code in a repair manual or online code database. These resources will provide information about the code, including possible causes and recommended repairs.
For example, code P0171 may be caused by a vacuum leak in the engine, a clogged fuel filter, or a problem with the mass air flow sensor. To determine the specific cause, a technician would need to perform further diagnosis and testing.
How to Read a J1939 DTC:
Reading a J1939 DTC is similar to reading an OBD-II DTC, but the process may vary slightly depending on the diagnostic tool being used. As with OBD-II codes, a diagnostic tool that can connect to the J1939 system will be required. Once connected, the tool will display the codes that have been stored in the vehicle’s system.
For example, the code SPN 5233 FMI 0 indicates that the Engine Oil Pressure Circuit is below normal operating range. This code is specific for J1939 systems and doesn’t apply for OBD-II.
How to Interpret a J1939 DTC:
Interpreting a J1939 DTC can be a bit more complex than interpreting an OBD-II code. The codes are specific to the J1939 system, which means
that they may not be listed in traditional repair manuals or online code databases. In addition, J1939 codes often include additional information, such as the failure mode indicator (FMI), which provides more detail about the specific issue.
To interpret a J1939 DTC, it is important to have access to the appropriate documentation for the specific vehicle or equipment. This may include the vehicle or equipment’s service manual or information from the manufacturer. In the previous example, SPN 5233 FMI 0 indicates a problem with Engine Oil Pressure Circuit, the FMI value 0 indicates that the circuit is below normal operating range. This means that there’s an issue with the oil pressure sensor or low oil pressure in the engine.
When interpreting J1939 codes, it’s important to not just rely on the code itself but also gather additional information by checking the engine system parameters and performing additional tests.
Conclusion:
DTC codes are an essential tool for identifying and troubleshooting issues with a vehicle’s performance. Understanding the history, meanings, and methods of reading and interpreting these codes is crucial for proper maintenance and repair. Both OBD-II and J1939 systems use DTC codes to indicate issues, but the codes and methods of interpretation may vary. By familiarizing yourself with these codes and how to read and interpret them, you can quickly and accurately diagnose problems with your vehicle and keep it running smoothly.