A warning light lit up on Bus #47 rolling into the yard yesterday. The scanner reads "SPN 3251 FMI 16" and your morning tech shrugs while your afternoon tech guesses "DPF something." Two hours later the bus is on jack stands, the wrong sensor is pulled, and you still don't have a real diagnosis. That is what happens in every shop where J1939 SPN FMI codes stay cryptic instead of getting decoded on the spot -- wrong-guess repairs, wasted parts, and a bus that misses its afternoon route. If you run a bus fleet, book a 20-minute demo to see how BusCMMS reads J1939 codes straight from your telematics and translates them into plain English before the tech even opens the bay.
J1939 SPN FMI Codes (2026): Complete Fault Code Lookup & Diagnostic Guide
Decode every J1939 fault on your bus fleet, prioritize by severity, and fix the right thing the first time
- 250 kbpsJ1939 CAN bus rate
- 32 FMIsuniversal failure modes
- 1,000sSPNs defined
Anatomy of a J1939 Fault Code: What SPN, FMI, and SA Actually Mean
Every J1939 diagnostic trouble code has the same three-part structure regardless of engine make. Learn to read those three parts and any code on any bus starts to make sense -- Cummins, Detroit Diesel, Caterpillar, Allison transmissions, all of it.
SPN -- The What
Suspect Parameter Number. Identifies which component or system reported the fault. SPN 110 = Engine Coolant Temperature.
FMI -- The How
Failure Mode Identifier. Tells you how the parameter failed. FMI 0 = Data valid but dangerously above normal range.
SA -- The Where
Source Address. Identifies which ECU sent the fault. SA 0 = Engine Control Unit. SA 3 = Transmission. SA 11 = Brake controller.
Always capture all three parts plus the occurrence count and whether the code is active or inactive when it appears. An inactive code with 200+ occurrences tells a different story than a single active event. Most modern scan tools display the full string, but techs often only write down the SPN -- that missing FMI is where wrong diagnoses start. Book a demo to see how BusCMMS auto-captures the full code string plus freeze-frame data on every fault.
The FMI Decoder: 12 Failure Modes You'll See Most on Bus Fleets
There are 32 defined FMI codes (0 through 31), but on modern bus fleets you will run into the same 12 over and over. Memorize these and severity assessment becomes instant -- you know whether to pull the bus off the route or schedule it for next PM.
- FMI 0Critical
Data valid but dangerously above normal. Stop the bus -- engine, coolant, or oil at threshold.
- FMI 1Critical
Data valid but dangerously below normal. Oil pressure loss, coolant loss, DEF empty.
- FMI 2Electrical
Data erratic, intermittent, or incorrect. Usually a wiring or connector issue.
- FMI 3Electrical
Voltage above normal or shorted high. Signal wire broken or disconnected.
- FMI 4Electrical
Voltage below normal or shorted low. Wire shorted to ground.
- FMI 5Electrical
Current below normal or open circuit. Sensor disconnected or coil open.
- FMI 6Electrical
Current above normal or grounded circuit. Short to ground.
- FMI 7Critical
Mechanical system not responding. Actuator, valve, or turbo stuck.
- FMI 9Data
Abnormal update rate. Sensor sending data too fast or too slow.
- FMI 12Critical
Bad intelligent device or component. Replace the module.
- FMI 18Moderate
Data below normal, moderately severe. Trending toward failure, schedule PM.
- FMI 31Info
Condition exists. A state notification, not always a fault -- read the SPN.
The remaining 20 FMI codes are less common on bus fleets but still show up on aftertreatment and network faults. For the deeper protocol comparison including J1708, see our companion guide on bus telematics fault codes across J1939 and J1708 protocols.
Most Common Bus SPN Codes You'll See in 2026 (Grouped by System)
There are thousands of SPNs defined in the J1939 standard, but on a school bus, transit coach, or charter fleet you will encounter the same 15 to 20 over and over. Here they are, grouped by the system they belong to, with the FMI pairs that most often accompany them.
- SPN 100Engine Oil PressureCommon with FMI 1, 3, 4
- SPN 110Engine Coolant TemperatureCommon with FMI 0, 3, 4
- SPN 111Engine Coolant LevelCommon with FMI 1, 18
- SPN 190Engine Speed (RPM)Common with FMI 2, 8, 19
- SPN 3251DPF Differential PressureCommon with FMI 10, 16
- SPN 3226SCR Outlet NOx SensorCommon with FMI 2, 4, 20
- SPN 3868DEF Tank Level / QualityCommon with FMI 1, 17, 18
- SPN 4364SCR EfficiencyCommon with FMI 18, 31
- SPN 5246Operator Inducement (Derate)Common with FMI 15, 16, 31
- SPN 168Battery VoltageCommon with FMI 1, 17, 18
- SPN 639J1939 Network CommunicationCommon with FMI 9, 13, 19
- SPN 1569Engine Protection Torque DerateCommon with FMI 31 (companion code)
- SPN 157Engine Fuel Rail PressureCommon with FMI 0, 1, 4
- SPN 94Fuel Delivery PressureCommon with FMI 1, 17, 18
- SPN 97Water in Fuel IndicatorCommon with FMI 0, 31
On 2010-and-later emissions engines, aftertreatment codes dominate the shop volume -- SPN 3251, 3226, 3868, 4364, and 5246 together account for the majority of check-engine events on Cummins L9, Cummins X10, Detroit DD5, and comparable bus engines. Multiple codes often share a single root cause: SPN 1569 (torque derate) is almost never the real problem -- always look upstream at the DPF, NOx, or DEF code that triggered the derate. Sign up free to log every code your fleet generates and see which SPNs are hitting you most.
The J1939 Diagnostic Workflow: From Code Appearance to Confirmed Fix
Every good diagnosis follows the same six-step path. Skip any step and you end up buying a sensor that turns out to be fine, or clearing a code that comes right back after two warm-up cycles.
- 1
Capture the Full Code String
Record SPN, FMI, Source Address, active/inactive status, occurrence count, and freeze-frame data. All six pieces matter. A single active event is different from an inactive code with 300 occurrences.
- 2
Assess Severity by FMI
FMI 0, 1, 7, or 12 -- pull the bus off the route now. FMI 3, 4, 5, 6, 2 -- electrical, safe to drive to shop. FMI 15, 17, 18 -- schedule for the next PM window.
- 3
Decode the SPN and Find the Root
Look up the component. On derate codes (SPN 1569, 5246), scroll to find the originating fault -- the derate is a symptom, not the disease.
- 4
Review Freeze-Frame Data
Engine RPM, temperature, load, and vehicle speed at fault time. A code that only fires at cold start points to different causes than one that fires at full load.
- 5
Verify Electrically Before Replacing
Multimeter check on sensor voltage, current, and reference signal. About 60% of recurrent ECM faults trace back to low-voltage or wiring issues, not failed sensors.
- 6
Repair, Clear, Road-Test, Confirm
Fix the root cause. Clear codes. Run two full warm-up cycles. Verify the code stays inactive. Log the resolution in your CMMS with the freeze-frame data attached.
The single biggest time-saver in this workflow is Step 5. Techs skip the multimeter and replace the sensor because it feels faster -- then the code comes back three days later because the actual issue was a corroded connector on the return wire. Book a demo to see how BusCMMS attaches the full freeze-frame + prior-history to every fault-triggered work order.
Three Real Bus Scenarios With Actual J1939 Codes
Real shop cases, real codes, real root causes. These three scenarios cover more than half of the fault-code events a typical mixed-fuel bus fleet handles in a month.
Scenario 1 Regen Not Completing on a Cummins L9 School Bus
Codes seen: SPN 3251 FMI 16 + SPN 3720 FMI 15
What it means: DPF differential pressure moderately high + DPF ash load percent moderately high, both trending.
Root cause: Ash accumulation from short-route stop-and-go driving -- typical school bus duty cycle. Not a failed sensor.
Fix: Command a parked regen. If pressure does not clear, DPF is due for ash cleaning at the interval documented for that engine.
Scenario 2 Ghost Communication Fault on Cold Mornings
Code seen: SPN 639 FMI 9 (intermittent, only at cold start)
What it means: J1939 CAN bus communication error, abnormal update rate.
Root cause: Weak 12V batteries dropping voltage on cold-start crank, causing brief CAN dropouts. Not a wiring or ECU issue.
Fix: Load-test batteries. Replace if capacity below spec. Verify CAN termination resistance while there.
Scenario 3 SCR Derate on a Transit Coach at 4pm Friday
Codes seen: SPN 1569 FMI 31 with SPN 4364 FMI 18 and SPN 3226 FMI 20 in history
What it means: Torque derate triggered by SCR efficiency low, with outlet NOx sensor drift in the log.
Root cause: NOx sensor drift is the originating fault. The 1569 derate is a downstream symptom of the SCR system falling out of spec.
Fix: Replace outlet NOx sensor. Verify DEF quality. Clear codes and run two warm-up cycles.
In every scenario above, the diagnostic time saved comes from having the freeze-frame data attached to the code the moment it appeared. Guessing based on the code alone leads to Scenario 1's ash cleaning being misdiagnosed as a bad DPF sensor, or Scenario 2's low-battery event getting an ECU swap it did not need. Book a demo to see how BusCMMS logs freeze-frame data on every J1939 fault event.
What Happens When Your CMMS Reads J1939 Directly
Every J1939 fault code your fleet generates is a data point that should feed your PM schedule, your parts ordering, and your predictive maintenance plan -- not sit on a scan tool that gets closed at end of shift. Here is what BusCMMS does with the raw J1939 stream from your telematics device.
J1939 Handling Built for Bus Fleets
Native Telematics Integration
Pre-built connectors to Samsara, Geotab, and other J1939-capable devices. No middleware, no custom API work.
Plain-English Translation
SPN + FMI is decoded automatically. Your tech sees "coolant temp dangerously high -- stop engine" instead of raw hex.
Severity-Based Prioritization
FMI 0, 1, 7, 12 flag the bus for immediate hold. Lower-severity codes queue for the next PM slot -- no manual triage.
Auto Work Order Generation
Critical codes auto-create a work order with the SPN, FMI, freeze-frame, bus number, and suggested first steps prefilled.
Occurrence Count + Freeze Frame
Every fault event logged with engine conditions at the moment of the code. Patterns show up that a scan tool would never catch.
Historical Fault Trending
Which SPNs are hitting your fleet most? Which buses trend high on aftertreatment faults? Data feeds PM adjustments.
The compounding value is in the history. After six months of J1939 data flowing into BusCMMS, patterns emerge -- Bus #12 throws SPN 3251 every 18,000 miles like clockwork, or the buses on Route 7 collectively show 3x the SPN 168 (battery voltage) events of the Route 4 fleet because of shorter cold-start intervals. That is predictive maintenance built from your own real fault data, not a generic PM interval printed on a manufacturer sheet. Book a demo to see historical J1939 trending on a real bus fleet.
The Bottom Line on J1939 SPN FMI Codes for Bus Fleet Maintenance
Whether you run 20 school buses on a rural district route or 200 transit coaches through a metro system, the difference between fleets that manage J1939 well and fleets that ignore it is not the scanner they buy. It is whether every code the fleet generates ends up on someone's dashboard, tied to a work order, with a history behind it. That is the gap BusCMMS closes. Sign up free and start capturing every J1939 fault your fleet generates today.
What's the difference between SPN and FMI in J1939 fault codes?
SPN (Suspect Parameter Number) identifies which component or system reported the fault -- for example, SPN 110 is Engine Coolant Temperature. FMI (Failure Mode Identifier) tells you how it failed -- FMI 0 means data valid but dangerously above normal, FMI 3 means voltage above normal, FMI 5 means open circuit. Every J1939 diagnostic trouble code is a pair: the SPN tells you what part is affected, the FMI tells you what kind of fault occurred. Together they let a technician diagnose without opening a service manual just to interpret the code.
Are J1939 SPN FMI codes the same across Cummins, Detroit Diesel, and other bus engines?
The core SPN and FMI definitions are standardized by SAE J1939, so SPN 110 FMI 0 means "engine coolant temperature dangerously high" whether the engine is a Cummins L9 in a school bus, a Detroit Diesel DD5 in a transit coach, or a Cummins X10 in a new-fleet motorcoach. Each manufacturer also layers proprietary OEM codes on top that require their own diagnostic tool (Cummins INSITE, Detroit DDDL) to fully decode, but the underlying SPN + FMI pair works as a universal language across every J1939-compliant vehicle.
Which FMI codes indicate the most urgent bus fault conditions?
FMI 0, 1, 7, and 12 are the critical severity codes. FMI 0 means data is valid but dangerously above normal (like coolant temperature at the failure threshold). FMI 1 means dangerously below normal (like oil pressure loss). FMI 7 means a mechanical system is not responding (stuck actuator, turbo, valve). FMI 12 means a bad intelligent device or component -- the module itself is failing. If any of these appear on a bus in service, pull it off the route and inspect before continuing. Lower-severity FMIs like 15, 17, 18 indicate trending faults that can be scheduled for the next PM window.
Why do 2010+ bus engines generate more J1939 fault codes than older engines?
EPA emissions regulations from 2010 onward required diesel particulate filters (DPF), selective catalytic reduction (SCR), diesel exhaust fluid (DEF) systems, and NOx sensors on heavy-duty engines. Each of these adds sensors, actuators, and control loops -- and each generates its own SPN and FMI codes when out of spec. On modern engines a single aftertreatment issue can trigger multiple related codes at once: a low DEF quality event often shows up as SPN 3868, SPN 4364, SPN 1569, and SPN 5246 all in the same session. The rule for 2010+ engines is to find the originating fault upstream of the derate codes rather than chasing every code individually.
How does a bus CMMS use J1939 SPN FMI codes for preventive maintenance?
A bus-specific CMMS like BusCMMS pulls the raw J1939 data from your telematics device, translates every SPN + FMI into a plain-English description, prioritizes by FMI severity, and auto-creates work orders assigned to the right technician. Over time it builds a fault history per bus and per route, so patterns emerge -- Bus #12 throws SPN 3251 every 18,000 miles, or the Route 7 fleet shows 3x the low-voltage events of the Route 4 fleet. That data feeds real predictive maintenance: adjusting PM intervals based on your actual fault data, not a generic manufacturer schedule.







