Skip to main content

Fault Codes

FOME reports problems as OBD-II style fault codes (DTCs). Most of them are standard P0xxx/P2xxx codes with their usual meanings, so a code you see here means roughly what it would mean on a factory ECU.

Reading a code

There are three places a fault shows up, and they don't all show the same thing.

In TunerStudio

The Last error and Error#1Error#8 gauges show the eight most recent faults. They are shown as a plain decimal number, not as a P code. To convert, read the decimal number as hexadecimal — those digits are the P-code:

TunerStudio showsRead as hexFault code
2630x107P0107
2790x117P0117
8220x336P0336
85010x2135P2135

The tables below list both forms, so you can just look up the number you see.

The FOME console also prints a plain-English line when the fault happens, for example WARNING: Sensor fault: CLT input too low. That's usually faster to read than the code.

On the check engine light

If your board has a MIL output configured, it blinks stored codes out as hexadecimal digits, with a 1 second gap between digits and 5 seconds between codes. Each digit is blinked n+1 times, so 0 is one blink and 7 is eight blinks. P0107 blinks as 2, 1, 8.

Over CAN

FOME answers OBD-II service 0x03 (read stored DTCs) on the CAN bus, so a generic scan tool will read the codes normally. Pending and permanent DTCs (services 0x07 and 0x0A) are not supported.

Clearing codes

Stored codes live in RAM only, so power cycling the ECU clears them. Nothing is written to flash, and codes do not survive a reboot.

While the ECU is running, most sensor faults latch: once set, the code stays until reboot even if the sensor starts reading correctly again.

Choosing what a code does

Several codes have a configurable severity, set in TunerStudio next to the relevant sensor's settings (look for a "DTC Pxxxx severity" field):

  • Warning only — the fault is logged, the code is stored, and the MIL is lit.
  • Ignore — the fault is still logged as a warning, but no code is stored and the MIL stays off.

Use Ignore for codes that are noise on your setup — for example P0176 on a car with no flex sensor wiring, or the cam sensor codes on an engine where the cam signal is intentionally marginal.

Codes without a severity setting are always reported.

Sensor circuit codes

These come from the sensor checker, which runs once the ECU has been powered for a second and the battery voltage has been stable for 5 seconds. "Low"/"High" mean the raw input is outside the range that could possibly be real — almost always wiring, not calibration. "Timeout" means no reading has arrived at all.

CodeDecMeaningWhat to check
P0101257MAF signal timeoutMAF unplugged, wrong pin assigned, no signal on the wire
P0102258MAF input below mafMinVoltageShort to ground, open signal wire, or mafMinVoltage set too high for your sensor
P0103259MAF input above mafMaxVoltageShort to 5V, open ground on the MAF, or mafMaxVoltage set too low
P0106262MAP signal timeoutMAP sensor unplugged or wrong input pin assigned
P0107263MAP below the configured minimumShort to ground, broken signal wire, or mapErrorDetectionTooLow set too high for your sensor
P0108264MAP above the configured maximumShort to 5V, missing sensor ground, or mapErrorDetectionTooHigh set too low for a boosted engine
P0110272IAT signal timeoutIAT input not configured or not sampling
P0112274IAT input below 0.05VSensor shorted to ground, or a short in the harness
P0113275IAT input above 4.9VOpen circuit — unplugged sensor, broken wire, or missing bias resistor
P0115277CLT signal timeoutCLT input not configured or not sampling
P0117279CLT input below 0.05VSensor or harness shorted to ground
P0118280CLT input above 4.9VOpen circuit — unplugged sensor or broken wire
P0120288TPS1 primary timeoutTPS input not configured or not sampling
P0122290TPS1 primary below tpsErrorDetectionTooLowOpen or shorted signal wire, or closed-throttle calibration is wrong
P0123291TPS1 primary above tpsErrorDetectionTooHighShort to 5V, or wide-open calibration is wrong
P0176374Flex sensor signal lostSensor unplugged, broken wire, or missing pull-up resistor on the signal line
P0178376Flex frequency too low (<45 Hz)Marginal signal, noise, or a failing sensor
P0179377Flex frequency too high (>155 Hz)Failing sensor, or methanol contamination in the fuel
P0196406Oil temperature signal timeoutOil temp input not configured or not sampling
P0197407Oil temp input below 0.05VSensor or harness shorted to ground
P0198408Oil temp input above 4.9VOpen circuit — unplugged sensor or broken wire
P0220544TPS1 secondary timeoutSecond TPS channel not configured or not sampling
P0222546TPS1 secondary too lowOpen or shorted wire on the second TPS channel
P0223547TPS1 secondary too highShort to 5V on the second TPS channel
P0225549TPS2 primary timeoutSee P0120, for the second throttle body
P0227551TPS2 primary too lowSee P0122
P0228552TPS2 primary too highSee P0123
P05211313Oil pressure signal timeoutOil pressure input not configured or not sampling
P05221314Oil pressure below sensor rangeShort to ground or broken signal wire
P05231315Oil pressure above sensor rangeShort to 5V, or the sensor's configured pressure range is too small
P21208480TPS2 secondary timeoutSee P0220, for the second throttle body
P21228482TPS2 secondary too lowSee P0222
P21238483TPS2 secondary too highSee P0223
P21258485Pedal primary timeoutPedal input not configured or not sampling
P21278487Pedal primary too lowOpen or shorted pedal signal wire, or bad closed-pedal calibration
P21288488Pedal primary too highShort to 5V, or bad full-travel calibration
P21308496Pedal secondary timeoutSecond pedal channel not configured or not sampling
P21328498Pedal secondary too lowOpen or shorted wire on the second pedal channel
P21338499Pedal secondary too highShort to 5V on the second pedal channel
P22268742Implausible barometric pressure at startupMAP reading was not close to atmospheric when the ECU booted — check the MAP sensor calibration and that the engine was actually stopped

Redundancy correlation codes

Redundant sensor pairs (TPS and pedal) are cross-checked against each other. If the two channels disagree by more than 5% (10% on Hellen 121 Nissan), the combined sensor is invalidated:

CodeDecMeaning
P21358501TPS1 primary and secondary disagree
P21368502TPS2 primary and secondary disagree
P21378503Pedal primary and secondary disagree

A correlation fault almost always means one of the two channels has drifted, is noisy, or was calibrated against the wrong end of its travel. Log both raw channels and compare them across the whole range of travel — they should track each other everywhere, not just at idle.

warning

On an electronic throttle car, a correlation fault will cut the throttle. Fix it before driving.

Trigger and cam codes

CodeDecMeaningWhat to check
P033682250+ crank trigger decode errors in one runNoise on the crank signal, wrong trigger wheel selected, bad sensor gap, or a damaged reluctor
P0340832Bank 1 intake cam: no signalCam sensor unplugged, wrong input pin, or no signal reaching the ECU while the crank signal is fine
P0341833Bank 1 intake cam: 50+ decode errorsNoisy or intermittent cam signal, or the wrong VVT mode selected
P0345837Bank 2 intake cam: no signalAs P0340
P0346838Bank 2 intake cam: 50+ decode errorsAs P0341
P0365869Bank 1 exhaust cam: no signalAs P0340
P0366870Bank 1 exhaust cam: 50+ decode errorsAs P0341
P0385901Bank 2 exhaust cam: no signalAs P0340
P0386902Bank 2 exhaust cam: 50+ decode errorsAs P0341

Cam codes are only checked once the crank trigger has synced 20 times, and only for cam inputs that actually have a pin assigned. Crank checking is skipped below the cranking RPM threshold so that a stalling engine doesn't set a code on the way down.

Knock sensor codes

CodeDecMeaning
P0327807Knock sensor 1 signal too low
P0332818Knock sensor 2 signal too low

Set when a knock sensor that was previously working reads below knockNoiseThreshold for longer than knockNoiseTimeout while the engine is running. A healthy sensor reads roughly -50 to -20 dBv; a disconnected one sits near the noise floor below -80 dBv. Check the sensor connector, the shield ground, and the sensor's mounting torque. Setting knockNoiseTimeout to 0 disables the check.

Injector and ignition circuit codes

CodeDecMeaning
P0201–P0212513–530Injector circuit 1–12 fault
P0351–P0362849–866Ignition circuit 1–12 fault

These require a board with smart driver chips capable of reporting output diagnostics — boards without them never set these codes. The TunerStudio console message includes the specific fault the driver reported (open load, short to ground, short to battery, over temperature). Check the injector or coil connector and the wiring to it first.

Power supply and system codes

CodeDecMeaningWhat to check
P06121554Main relay faultThe main relay voltage sense input reads more than 3V below battery voltage, 0.5s after the relay was commanded on. Check the relay, its fuse, and the wiring to the ECU's main relay feed
P064216025V sensor supply below 4.75VA sensor is overloading or shorting the 5V rail. Unplug sensors one at a time to find it. Note that sensor checking is suspended while this is set
P064316035V sensor supply above 5.25VECU internal regulator problem, or something back-feeding the 5V rail
P06521618Second 5V sensor supply lowAs P0642, for boards with a second sensor supply (Proteus)
P290010496Wideband controller 1 faultThe controller is reporting a fault of its own. The console message names it — usually sensor heater, sensor open, or overheating
P290110497Wideband controller 2 faultAs P2900
P290210498Wideband controller firmware too oldUpdate the wideband controller's firmware to match this FOME build

P2900–P2902 are FOME-specific codes, not standard OBD codes — a generic scan tool will not have a description for them.

Configuration errors

These are fatal — the ECU refuses to run the engine and TunerStudio shows a critical error banner with a message explaining the problem. They mean the tune is wrong, not that hardware failed. Fix the setting named in the message and reboot.

CodeDecMeaning
P0090144Injector compensation is set to use a fuel pressure sensor, but no sensor is configured
P0111273Thermistor calibration points are not in ascending temperature order
P0121289Throttle/pedal configuration problem — open and closed calibration voltages too close together, a redundant pair that isn't actually redundant, both channels of a "redundant" pair wired to one sensor, or a failed ETB autotune
P06061542General ECU fault. Used for internal assertion failures and for prompting a power cycle after applying a preset. The console message says what happened
P06381592ETB startup position was more than 5% away from the configured neutral position. Check for a stuck throttle plate, a wrong etbNeutralPosition, or bad TPS calibration
P21588536An invalid CAN DBC was selected for CAN vehicle speed input

Internal codes (6000 and above)

Codes numbered 6000 and up are FOME internal diagnostics, not OBD codes. They aren't sent over CAN and they're rarely actionable — they indicate either a firmware bug or a configuration so far out of range that the firmware couldn't cope.

If you see one, the TunerStudio console message next to it is the useful part. Report the code together with that message and your tune on the Discord #firmware channel.

The full list is in firmware/controllers/algo/obd_error_codes.h.