Truck SAE Codes Such as J1939, J1708, SPN, FMI, & MID Explained (2024)

The Society of Automotive Engineers (SAE) and the American Trucking Association (ATA)

Without making this too complicated, the short version is this:commercial trucks started to go away from mechanical systems to electronic systems in the early 1990s. When the first generations of these trucks started to come on the market, each truck maker was using their own special plugs and their own proprietary tools. This is where the Cummins QuickCheck, ProLink 9000, and other tools started to emerge. These were handheld devices, and in some cases, you could purchase additional cartridges to get the software you needed. Here are some examples of those.

Truck SAE Codes Such as J1939, J1708, SPN, FMI, & MID Explained (1)

The problem with this solution was that the truck and engine manufacturers were not talking and communicating well with each other, and since certain vendors such as CAT, Cummins, Bendix, Meritor, and others are used in a variety of different truck manufacturers, they needed to get standardized. This is where the SAE and the ATA stepped in and started developing some standardization.

Download the PDFs


Truck SAE Codes Such as J1939, J1708, SPN, FMI, & MID Explained (2)

In the early to mid-1990s is when we first saw the standard 6-pin plug placed in commercial trucks. This would be used for the next 10-15 years, and we now saw computerized diagnostic tools enter the market. This was great because instead of having to purchase tools that only dealers could have, hardware and software were made available to the general public.


Now that a standard had been set for both the physical connections and the software language, the manufacturers need a logical way to read and display this data. This is where we first saw this new system. If you have ever used some diagnostic software or a generic code reader, these acronyms will look familiar. Here is how they work.


The MID tells which system it is coming from. Each component on a truck (Engine, transmission, ABS, etc…) all have a MID that is used. There are hundreds of MIDs that are defined, but only a handful are commonly used. Here are the most common ones:

  • MID 128 = Engine
  • MID 130 = Transmission Control Unit
  • MID 136 = Anti-lock Brakes (ABS)
  • MID 140 = Instrument Cluster
  • MID 142 = Satellite Communications
  • MID 144 = Vehicle ECU
  • MID 146 = Climate Control ECU
  • MID 206 = Radio
  • MID 216 = Lighting Control Module
  • MID 219 = VORAD/ACC
  • MID 232 = Airbag Control Unit
  • MID 249 = Body Builder Module
  • MID 250 = Steering Wheel Module

We have also compiled a list of all MIDs that are created. Please use the link at the top of this page to receive them.


Parameters Identifiers, or PIDs, are numbers and names used to identify data being displayed. So think if PIDs in terms of “readings” such as oil temperature, coolant level, miles driven, engine RPMs, and so on. PID is a J1708 term and PIDs go from 0 to 511.

The entire PID list can be downloaded by filling out the form at the top of the page. It is approximately 11 pages in total.


Now that we have defined MID (The component) and PID (types of data), we can talk about Failure Mode Identifiers (FMI). Every diagnostic trouble code (DTC) that you find will have an FMI. This code is set by the ECM detecting a variety of problems, such as too much voltage, not enough voltage, resistance is incorrect, and so on. So here is the list of possible FMI values:

  • 0 = Data Valid but Above Normal Operational Range, Most Severe Level
  • 1 = Data Valid but Below Normal Operational Range, Most Severe Level
  • 2 = Data Erratic, Intermittent or Incorrect (rationality)
  • 3 = Voltage Above Normal, or Shorted to High Source
  • 4 = Voltage Below Normal, or Shorted to High Source
  • 5 = Current Below Normal, or Open Circuit
  • 6 = Current Above Normal, or Grounded Circuit
  • 7 = Mechanical System not Responding or Out of Adjustment
  • 8 = Abnormal Frequency or Pulse Width or Period
  • 9 = Abnormal Update Rate
  • 10 = Abnormal Rate of Change
  • 11 = Failure Code not Identifiable
  • 12 = Bad Intelligent Device or Component
  • 13 = Out of Calibration
  • 14 = Special Instructions
  • 15 = Data Valid but Above Normal Range: Least Severe Level
  • 16 = Data Valid but Above Normal Range: Moderately Severe Level
  • 17 = Data Valid but Below Normal Range: Least Severe Level
  • 18 = Data Valid but Below Normal Range: Moderately Severe Level
  • 19 = Received Network Data in Error: (Multiplexed Data)
  • 20 = Data Drifted High (rationality high)
  • 21 = Data Drifted Low (rationality low)
  • 22 to 30 = Reserved for SAE Assignment
  • 31 = Condition Exists


Now that we understand that a MID is a component, such as an engine, it can be further broken down into subsystems. Each subsystem has its own set of SIDs. For example, MID 128 (Engine) could have SID 6 for Injector number 6. However, SID 6 on a Mid 136 (Transmission) is for the C6 Solenoid Valve.

We have compiled a PDF that contains all the SIDs for J1708. It is broken down by MID, which this list gives you:

  • Common SIDs
  • Engine SIDs (MID = 128, 175, 183, 184, 185, 186)
  • Transmission SIDs (MID = 130)
  • Brake SIDs (MID = 136, 137, 138, 139, 246, 247)

We have also compiled a list of the smaller subsystems as well, which includes:

  • Instrument Panel SIDs (MID = 140, 234)
  • Vehicle Management Systems SIDs (MID = 142)
  • Fuel System SIDs (MID = 143)
  • Cab Climate Control SIDs (MID = 146, 200)
  • Suspension SIDs (MID = 150, 151, 152, 153)
  • Vehicle Navigation SIDs (MID = 162, 191)
  • Vehicle Security SIDs (MID = 163)
  • Tire SIDs (MID = 166, 167, 168, 169)
  • Particular Trap System SIDs (MID = 177)
  • Refrigerant Management Systems SIDs (MID = 190)
  • Tractor/Trailer Bridge SIs (MID = 217, 218)
  • Collision Avoidance Radar SIDs (MID = 219)
  • Driveline Retarder SIDs (MID = 222)
  • Vehicle Sensors to Data Coverter SIDs (MID = 178)
  • Safety Restraint Systems SIDs (MID = 232)
  • Forward Road Image Processor SIDs (MID = 248).

You can download the entire list of SIDs for each of these MIDs using for the form at the top of the website. It is approximately 40 pages in total.

The important thing to note when it comes to diagnostic trouble codes is that you will either have a PID or SID, followed with an FMI. You will never have both.


Some manufacturers, mainly Volvo & Mack, decided that they needed to add their own PIDs and SIDs to the mix. We call this Proprietary PID and Proprietary SID, or PPID and PSID for short. While we do not have a list of these, it is important to know what they are.

J1939 – GOODBYE J1708!

Truck SAE Codes Such as J1939, J1708, SPN, FMI, & MID Explained (3)

Before we can move much further, everyone needs to understand the relationship between J1708 and J1939. Basically, J1708 worked great, but it was quickly becoming obsolete. This is because manufacturers started adding more sensors, needs to collect more data, and everything was getting more complex. This is where J1939 steps in, and around the mid-2000’s equipment manufacturers started to navigate away from the J1708 to J1939. This is where we started seeing the 9-pin Deutch connector placed in trucks.


Parameters Identifiers, or PIDs, are numbers and names used to identify data being displayed. So think if PIDs in terms of “readings” such as oil temperature, coolant level, engine RPMs, and so on. PID is a J1708 term, and then SPN is a J1939 term. If you compared a list of PIDs to SPNs, you would notice two things. One, PIDs go from 0 to 511. SPNs go from 0 to over 50,000. Again, the SPN was needed because of the extra complexity of commercial trucks. The other thing you would notice that both lists are almost identical from 0 to 511.

The important thing to understand is that there is a “static” list of SPN numbers, but not every vehicle uses each one. An example is CAT, which can be found on Numerakod’s website. This website shows which SPNs are currently being used by CAT.

We have also compiled a list of all known SPNs, which is available by using the form at the top of this page.


So now that we understand the basics of how trucks read & display code information, we can take it one step further and explain how it all related to diagnostic trouble codes. Almost all equipment manufacturers (Also called OEMs) take all of these acronyms we just discussed and then translate them to a flash code. This is where a lot of customers run into problems. Let's use one of the code readers we sell as an example.

Truck SAE Codes Such as J1939, J1708, SPN, FMI, & MID Explained (4)

In this example, we have a $300 or so heavy truck scanner connected to an ABS system. Notice how we get the SID and the FMI? Those results are what give us our generic, or “raw data” from the ECM. This is why you purchase a generic scanner to “read” codes. The problem is that we do not know the true flash code that this ABS manufacturer uses. The cheaper hand-held scanner can’t convert the J1708 & J1939 codes to true flash codes. At this point, the technician using the tool can attempt to find service manuals or use Internet searches to find repair and troubleshooting information.

Truck SAE Codes Such as J1939, J1708, SPN, FMI, & MID Explained (5)

The next example is a universal diagnostic software program called PF-Diagnose, which is made by Pocketfleet. In this program, it shows us the column for “CODE” and “FMI”, but also gives us the “FLASH” code. On the code that is highlighted, you will see that we have a flash code of “26”, which also is PID 108 FMI 03. This is great because now we actually find the repair information in a service manual or easily find the information online.


So there you have, a beginners guide to all those crazy acronyms that you see with commercial trucks and diesel diagnostic tools. We hope that this information gave you some insight into how these heavy-duty scan tools work, and why you need to make sure you match up the correct tool with what you are trying to accomplish. Comments are always appreciated!

Truck SAE Codes Such as J1939, J1708, SPN, FMI, & MID Explained (2024)


What is SAE J1708 code? ›

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.

What is SAE J1939 fault code? ›

The J1939 fault code error message consists of a Source Address (SA) identifying the Electronic Control Unit (ECU) sending the DTC (SA0 = Engine Controller #1), a Suspect Parameter Number (SPN) which identifies the parameter sending the fault code error message, and a Failure Mode Identifier (FMI) which identifies the ...

What is J1708 or J1939? ›

SAE J1708, although still widely used, is replaced by SAE J1939 which is a CAN (Controller Area Network) based protocol. Some quick facts: Describes the physical and data link layer according to OSI model. Almost always used in conjunction with the application layer protocol SAE J1587.

What is spn and fmi in J1939? ›

SPN: - Specifies the SPN with fault (0-524,287). FMI: - Failure Mode indicator specifies the type/nature of the error (0-31). OC: - Occurrence Counter specifies the number of occurrences of the given fault (0-127). CM: - Specifies the conversion method by defining the byte alignment in DTC (0-1).

How does J1708 work? ›

A J1708 network uses a bus topology with “random” access to the bus. Random access means that any node can transmit when it desires, unless the bus is not already busy. The bus must have been in idle mode (logical high level) for at least a bus access time before a node may access it.

What is the difference between J1587 and J1708? ›

SAE J1708 makes up the physical and data link layers while SAE J1587 makes up the transport and application layers with respect to the OSI model. SAE J1587 is used in conjunction with SAE J1708 for automobile communication.

What does SPN mean on a code? ›

Next, we see SPN which stands for suspect parameter number, this is used to identify the specific component or condition that is triggering a fault. In our example, we see SPN 3216, when looked up this SPN shows that there is an issue with the Aftertreatment Intake NOx sensor.

When did J1939 replace J1708? ›

SAE J1939 was initially released in 1994, but the top-level document was published in 2000. Around the mid-2000s, manufacturers began switching from the SAE J1587/J1708 system to the SAE J1939 protocol.

What does J1939 stand for? ›

J1939 is a set of standards defined by SAE (there's an overview here). They are used in heavy-duty vehicles such as trucks and buses, mobile hydraulics, etc. In many ways, J1939 is similar to the older J1708 and J1587 standards, but J1939 is built on CAN.

What does FMI stand for in fault codes? ›

FMI stands for failure mode identifier—this part of the fault code tells you what type of problem your truck has. For example, in the fault code SPN 3226 FMI 13, the SPN number 3226 tells you the problem is with the SCR outlet NOx sensor and FMI 13 tells you that the signal from the part is unavailable.

What is the difference between J1850 and J1708? ›

The J1708 and J1939 protocols are for medium to heavy duty vehicles while the J1850 is for passenger cars. OBD is most commonly associated with car mechanics that use OBD technology to diagnose engine troubles.

Where is J1939 used? ›

The J1939 protocol is a set of standards created by the Society of Automotive Engineers (SAE) to define how Electronic Control Units (ECUs) transmit data over the Controller Area Network (CAN) bus protocol. The standard applies to heavy-duty vehicles such as trucks, buses, tractors, and industrial machinery.

What is the fault code J1939? ›

A J1939 code on the dash is normally an indication the truck has lost communication with the engine ECM. I have seen this before. There are two things I have seen cause an engine shutdown and no restart with this code. The first is the engine ECM has lost power.

How do I reset the SPN? ›

Reset an SPN

To change the default SPN settings, open a command prompt and type the setspn -r hostname command. In this command, hostname should be replaced with the actual host name of the computer object whose settings you want to change.

What is SPN used for? ›

A service principal name (SPN) is a unique identifier of a service instance. Kerberos authentication uses SPNs to associate a service instance with a service sign-in account. Doing so allows a client application to request service authentication for an account even if the client doesn't have the account name.

What is the difference between RS485 and J1708? ›

SAE J1708 is basically an RS485 hardware interface without the typical 120 ohm termination resistors. In typical applications, a half-duplex RS485 transceiver chip is used to connect to the bus.

What is the format of J1708? ›

J1708 is a differential serial communications bus which is half duplex and multi-master (i.e. multi-drop). It uses 8, N, 1 byte framing and has a network speed of 9600 bits per second (bps). The first byte of every message is the MID, which stands for message identifier.

What is J1708 data link? ›

J1708 is an SAE specification developed especially for heavy duty vehicles (trucks and busses). The intention is that the protocol will promote a standard for serial communication between modules with microcontrollers. The standard means that data can be transferred between devices in a more cost-effective way.

Top Articles
Latest Posts
Article information

Author: Fr. Dewey Fisher

Last Updated:

Views: 5669

Rating: 4.1 / 5 (62 voted)

Reviews: 93% of readers found this page helpful

Author information

Name: Fr. Dewey Fisher

Birthday: 1993-03-26

Address: 917 Hyun Views, Rogahnmouth, KY 91013-8827

Phone: +5938540192553

Job: Administration Developer

Hobby: Embroidery, Horseback riding, Juggling, Urban exploration, Skiing, Cycling, Handball

Introduction: My name is Fr. Dewey Fisher, I am a powerful, open, faithful, combative, spotless, faithful, fair person who loves writing and wants to share my knowledge and understanding with you.