Fault Diagnostics

This page is the companion to the fault code reference. For each fault it states exactly what the device measured to raise it, and gives a diagnostic procedure to find the cause.

It covers the 57 fault codes whose trigger condition is precisely defined in the firmware. The remaining implemented codes are listed in the reference page with a short description only — their trigger is a generic failure path with no single measurable condition to document.

Related pages: Fault codes, CAN bus diagnostics, Common IO settings, Configuration concepts.

How to work through a fault list

Faults are not independent. One root cause routinely raises several codes, so resolving them in the wrong order wastes time. Work in this order:

flowchart TD A[Read fault list] --> B{Any 0x03F1 or 0x03F2?} B -->|Yes| B1[Device has no calibration or configuration<br/>Nothing else is meaningful] B -->|No| C{Any 0x0301 or 0x0302?} C -->|Yes| C1[Sensor supply bad<br/>All analog readings suspect] C -->|No| D{Any Category 1 codes?} D -->|Yes| D1[Configuration invalid<br/>Affected elements do not exist] D -->|No| E{Any Category 33 codes?} E -->|Yes| E1[Physical CAN bus problem<br/>Fix before entity faults] E -->|No| F[Diagnose remaining faults individually]
  1. Stored data faults (0x03F1, 0x03F2) — the device has nothing to run.
  2. Sensor supply faults (0x0301, 0x0302) — while active, input range checking is suspended and every analog reading is unreliable.
  3. Configuration faults (Category 1) — the affected element does not exist, so anything depending on it will also misbehave.
  4. CAN bus faults (Category 33) — a degraded bus causes CAN entity faults as a side effect.
  5. Everything else.

After each fix, clear the fault list and re-read it. Anything that returns immediately is a live condition; anything that does not was historical.

A note on scaling

Analog and frequency input values in this page are given on the device's internal 0–1024 scale, where 1024 represents the full span of the input range selected for that channel (5 V, sensor-5 V, 12 V, or raw). The fault minimum and maximum you configure for an input use the same scale, so the thresholds below can be compared directly against your configured limits.

The device's own supply measurements use 1024 counts per volt.

Sensor supply faults

Diagnose these first. While either fault is active the input watchdog stops checking every other input, because with a bad reference all ratiometric sensor readings would be wrong at once.

0x0302 — 5 V sensor supply short to ground

Description. The device measured its own 5 V sensor supply below roughly 0.05 V — the supply has collapsed. Raised as Intermittent immediately, and promoted to Continuous after about 200 cycles of the condition persisting.

Diagnostics.

  1. Power the device down and measure resistance from the 5 V sensor supply pin to ground. A near-zero reading confirms a hard short.
  2. Disconnect sensors from the 5 V supply one at a time, re-measuring after each. The reading returning to normal identifies the faulty sensor.
  3. With all sensors disconnected and the short still present, the fault is in the harness — inspect for chafing where the loom passes through bulkheads or over sharp edges.
  4. If the short clears only with the device unplugged, the device's own supply has failed.

0x0301 — 5 V sensor supply out of specification

Description. The 5 V sensor supply is present but has sagged below approximately 4.64 V. This is the partial-load version of 0x0302.

Diagnostics.

  1. Measure the 5 V supply with the engine off and ignition on. A reading below 4.6 V confirms it.
  2. Total the current draw of everything fed from the supply and compare against the device specification. Too many sensors on one supply is the most common cause.
  3. Disconnect sensors one at a time. A large recovery when one is removed points at a partially shorted sensor.
  4. If the voltage is correct at the device but low at the sensor, the fault is voltage drop in the harness — check for undersized wire, corroded pins, and shared return paths.

Input watchdog faults

All four analog codes and all four frequency codes carry the input ID as their component ID, so the fault names the input directly.

Input monitoring is suppressed while the ignition input is below half scale or the battery is below roughly 7.8 V, so cranking does not raise spurious faults. It is also suppressed entirely while a sensor supply fault is active.

Only inputs with a configured fault minimum or maximum are monitored. An input with both limits left at zero is never checked, and never raises any of these codes.

0x0101 / 0x0102 — analog value lower / higher than expected

Description. The input's scaled value fell below the configured fault minimum (0x0101) or rose above the configured fault maximum (0x0102), without being pinned at either rail. The reading is plausible as a voltage but outside the window you declared valid.

Diagnostics.

  1. Open the input in the data logger and read its live value. Compare against the fault minimum and maximum configured for it.
  2. Decide which is wrong — the sensor or the limits. A sensor reading correctly for its actual physical state, with limits set too tight, is a configuration problem, not a wiring problem.
  3. If the value is genuinely wrong, check the sensor's supply and ground at the sensor connector, not at the device.
  4. Compare with a second sensor measuring the same quantity where one exists.
  5. Substitute a known-good sensor to separate sensor failure from harness failure.

0x0103 — analog short to ground

Description. The input read below 5 counts — the bottom 0.5% of its range. This is below anything a working sensor produces, so the signal line is being held at ground.

Diagnostics.

  1. Disconnect the sensor. If the reading rises off the bottom, the sensor has failed shorted. If it stays at zero, the fault is in the harness.
  2. With the sensor disconnected and the device unplugged, measure resistance from the signal pin to ground. Near zero confirms a shorted wire.
  3. Inspect the connector for a bent pin bridging to an adjacent ground terminal and for water ingress — both produce this fault intermittently.
  4. Check whether the fault is Intermittent rather than Continuous: an intermittent short that comes and goes is almost always mechanical chafing, worth tracing by flexing the loom while watching the live value.

0x0104 — analog short to 5 V

Description. The input read above 1019 counts — the top 0.5% of its range — while its configured fault maximum was below that level. The signal line is being held at the supply rail.

Diagnostics.

  1. Disconnect the sensor. A reading that stays at full scale means the signal wire is shorted to a supply; a reading that drops means the sensor failed.
  2. With the device unplugged, measure resistance from the signal pin to the 5 V sensor supply pin.
  3. Check for a pull-up wrongly enabled on that channel in the configuration — this produces a permanent 0x0104 with no wiring fault present at all.
  4. Inspect the connector for a bent pin bridging to an adjacent supply terminal.

0x0111 / 0x0112 — frequency input voltage lower / higher than expected

Description. These monitor the DC voltage present on the frequency input pin, not the measured frequency. The pin voltage fell below the configured fault voltage low limit (0x0111) or rose above the fault voltage high limit (0x0112).

This is a wiring and signal-integrity check on speed sensors: a healthy sensor idles within a known voltage band, and departure from it indicates an open circuit, a short, or a failed sensor — regardless of whether a frequency is currently being produced. A frequency reading that is simply wrong does not raise these codes.

Diagnostics.

  1. Read the frequency input's channel voltage in the data logger with the vehicle stationary. Compare against the fault voltage limits configured for the channel.
  2. Confirm the sensor type matches the channel setup — a Hall sensor on a channel configured for a variable-reluctance sensor sits at the wrong idle voltage permanently.
  3. Check the pull-up or pull-down setting for the channel. An open-collector Hall sensor without its pull-up enabled sits near ground and raises 0x0111.
  4. Verify sensor supply and ground at the sensor connector.
  5. If the voltage is correct but the speed signal is still wrong, the problem is mechanical — sensor air gap, tone wheel damage, or debris — and will not appear as a fault code.

0x0113 / 0x0114 — frequency input short to ground / 5 V

Description. The frequency input pin voltage was pinned at the bottom (below 5 counts) or the top (above 1019 counts) of its range, with the configured limits inside that band. As with the analog equivalents, this indicates a hard short rather than a signal that is merely out of range.

Diagnostics. Follow the procedure for 0x0103 and 0x0104, measuring at the frequency input pin. In addition:

  1. Check the shield termination. A shield grounded at both ends can pull a sensor signal toward ground on long runs.
  2. Verify that the pull-up or pull-down configuration for the channel matches the sensor. A pull-up enabled against a sensor that also drives high can pin the input at the rail.

!!! note Because of a timer defect in the current firmware, 0x0103, 0x0104, 0x0113 and 0x0114 remain in Intermittent mode and do not escalate to Continuous, even when the short is permanent. Treat an intermittent short fault as confirmed — do not wait for it to promote.

Output watchdog faults

Both codes carry the output pin number as their component ID, and both are detected during the output adaptation phase that runs shortly after ignition-on.

0x0204 — output open circuit

Description. During adaptation the driver commanded the output fully on, waited, and measured less than 0.1 A flowing. A connected solenoid always draws substantially more, so the load is not electrically present.

Diagnostics.

  1. With the device unplugged, measure resistance across the solenoid at the device connector. An open reading confirms the break is in the solenoid or the harness.
  2. Measure the solenoid directly at its own connector to split harness failure from solenoid failure.
  3. Check the output's ground return — an open return raises this fault just as a broken feed does.
  4. Confirm the output is wired to the pin the configuration assigns it to. An output configured on the wrong pin produces a permanent 0x0204 on a perfectly good harness.
  5. Check the connector terminals for retraction — a terminal backed out of its housing makes and breaks with vibration and produces this fault intermittently.

0x0203 — output resistance out of specification

Description. The driver's live estimate of the load resistance fell outside the minimum-to-maximum window configured for that output. Reported only when resistance checking has been enabled for the output.

Diagnostics.

  1. Measure the solenoid's actual resistance cold, at the device connector, and compare against the window configured for that output.
  2. Compare against the transmission manufacturer's specification for that solenoid. A reading well below specification indicates shorted windings and the solenoid should be replaced.
  3. A reading above specification is usually connection resistance rather than the solenoid — inspect terminals for corrosion and check crimps.
  4. Solenoid resistance rises with temperature. If the fault appears only when hot, the configured window is too narrow rather than the solenoid being faulty.
  5. Confirm the window matches the solenoid actually fitted. A configuration written for a different transmission variant raises this immediately on a healthy unit.

Stored data faults

All carry component ID 0.

0x03F1 — no calibration data

Description. The device could not load a valid calibration at startup. Startup halts at this point — the device raises the fault and stops, so no configuration is loaded, no inputs or outputs are created, and nothing runs.

Diagnostics. This is not a field-serviceable condition. The device requires factory recalibration. Confirm the fault is genuinely 0x03F1 before returning a unit, since a device halted this way appears superficially dead.

0x03F2 — no configuration data

Description. Calibration loaded successfully, but the stored configuration could not be decoded.

Diagnostics.

  1. Re-upload the configuration and power-cycle the device.
  2. If it recurs, verify the configuration was built for this device variant and firmware version.
  3. If it recurs with a known-good configuration, the configuration storage area is failing — the device needs service.

0x03F3 — no adaptation data

Description. Both copies of the adaptation data failed their checksum, so neither could be used. Adaptation restarts from defaults.

Diagnostics.

  1. Expect this once after a firmware update or on first power-up. It is not a fault condition in that context.
  2. Clear the fault and complete a drive cycle so adaptation values are relearned and written.
  3. If it returns on every start, the device is losing power before it finishes writing. Check that the device is allowed to complete its shutdown sequence and is not fed from a supply that is cut immediately with the ignition.

0x03F4 — adaptation backup resynchronised

Description. The main adaptation data was valid, but the backup copy did not match it. The firmware automatically rewrites the backup from the main copy at the moment this fault is raised.

Diagnostics. No action required — this is self-healing and the fault is a record that the resynchronisation happened. It commonly follows an interrupted shutdown. Investigate the power supply only if it appears on every start.

0x03F5 — adaptation checksum notice

Description. Raised on devices that have no adaptation backup segment, whenever stored adaptation data is present.

!!! warning Because of an inverted check in the current firmware, this fault is raised when the stored adaptation checksum is valid, not when it fails. It therefore does not indicate corrupt data and requires no action. Do not use 0x03F5 as evidence of an adaptation problem — use 0x03F3, which is the code that genuinely reports unusable adaptation data.

CAN bus faults

These come from the CAN controller's own error state and describe the physical bus. All carry the CAN channel number as their component ID, except 0x210B.

Interpret them in this order: a bus with no acknowledging node produces 0x2107 continuously and cascades into everything else, so resolve that first.

0x2107 — acknowledge error

Description. The controller transmitted a frame and no other node acknowledged it. Every CAN frame must be acknowledged by at least one other node, so this means the device is effectively alone on the bus.

Diagnostics.

  1. Confirm at least one other node is powered and active on that channel. A device alone on a bus cannot transmit successfully, however good the wiring.
  2. Verify the baud rate matches the other nodes exactly. A mismatched node cannot acknowledge.
  3. Check that the channel is wired to the intended bus — swapped channels are a frequent cause.
  4. Follow the no-TX walkthrough if the above are all correct.

0x2101 — bus off

Description. The controller exceeded its error limit and removed itself from the bus. Nothing is transmitted or received on that channel.

Diagnostics.

  1. Treat it as the end state of an untreated error condition — look for the other Category 33 codes on the same channel and diagnose those.
  2. Measure resistance across CANH and CANL with everything powered down. Roughly 60 Ω is correct; 120 Ω means one terminator is missing and 40 Ω or less means one too many.
  3. Confirm every node's baud rate. A single wrong-rate node drives the whole bus to bus-off.
  4. Disconnect nodes one at a time to find one holding the bus dominant.

0x2104 / 0x2103 — error passive / protocol warning

Description. The controller's error counters crossed the passive threshold (0x2104) or the warning threshold (0x2103). The bus still works, but errors are accumulating. 0x2103 is the earliest warning available; 0x2104 means degradation is well advanced and bus-off is close.

Diagnostics. Diagnose as an early 0x2101 using the same procedure. These codes are most useful when they appear without bus-off, since they identify a marginal bus while it is still communicating — check termination, stub lengths, and shielding before the problem becomes intermittent dropouts.

0x2105 / 0x2106 / 0x210A — stuff, form and CRC errors

Description. Received frames violated bit-stuffing (0x2105), had a malformed fixed-format field (0x2106), or failed their checksum (0x210A). All three mean bits are being corrupted in transit.

Diagnostics.

  1. Check baud rate on every node first — a mismatch produces all three simultaneously and is far more common than a wiring fault.
  2. Verify termination is exactly two 120 Ω resistors at the physical ends of the bus.
  3. Check that CANH and CANL are a twisted pair for the whole run and that stubs are short.
  4. Look for noise coupling: route CAN away from ignition leads, injector wiring, and alternator cables.
  5. Confirm all nodes share a ground reference within the permitted common-mode range.

0x2108 / 0x2109 — bit 1 and bit 0 errors

Description. The controller transmitted a bit and read back the opposite value. 0x2108 means a recessive bit was read back dominant; 0x2109 means a dominant bit was read back recessive.

These are the most directionally useful CAN codes, because each points at a distinct physical cause:

  • 0x2108 — something is holding the bus dominant: a short between CANH and CANL, a short to ground, or a failed transceiver on any node.
  • 0x2109 — the bus cannot be driven dominant: an open circuit, a broken CANH or CANL wire, or missing termination.

Diagnostics.

  1. For 0x2108, measure resistance between CANH and CANL with power off. A very low reading confirms a short. Disconnect nodes one at a time to find a failed transceiver.
  2. For 0x2109, check continuity of CANH and CANL end to end, and confirm both terminators are present.
  3. In both cases, disconnecting nodes one at a time and re-testing isolates the offending node quickly.

0x210B — CAN controller startup failed

Description. The CAN controller did not initialise. This is a failure of the controller itself rather than a bus condition, and the channel is completely unavailable.

The component ID encodes (0x100 × channel) + stage, where the stage indicates how far initialisation progressed before failing.

Diagnostics.

  1. Power-cycle the device. A transient failure that does not recur is not significant.
  2. If it persists, the device requires service — record the raw component ID value and include it in the support request, since it identifies the failure stage.

CAN entity faults

0x2001 — missing frame

Description. An expected frame did not arrive within its timeout period. The component ID is the frame's index within the preset, not its CAN identifier — which frame that corresponds to depends on the preset in use.

This code has its own escalation: it is raised as Intermittent on the first few missed periods and promoted to Continuous once more than six consecutive periods have been missed. The affected signals are zeroed when the timeout expires.

Diagnostics.

  1. Check the Category 33 codes on that channel first. A bus-level problem stops all frames and makes this fault a symptom rather than a cause.
  2. Confirm the sending ECU is powered and running.
  3. Verify the baud rate matches and that the preset is assigned to the channel the ECU is actually wired to.
  4. Confirm with a CAN analyzer that the frame is present on the bus at all. If it is absent, the problem is at the transmitter; if present, the preset expects it on a different channel or at a different identifier.
  5. Check that the selected preset matches the exact ECU variant — some variants of the same ECU family do not transmit the full frame set.

0x2002 — wrong frame

Description. A frame arrived on the expected identifier, but its contents failed the preset's validation — typically the wrong length, or a field carrying a value the preset does not recognise. Where the preset supports it, the component ID is the CAN identifier of the offending frame.

Diagnostics.

  1. Capture the frame with a CAN analyzer and compare its length against what the preset expects.
  2. Confirm the ECU variant matches the selected preset. Receiving a frame at the right identifier with the wrong contents almost always means a different variant or firmware version at the other end.
  3. Check for an identifier collision — two nodes transmitting on the same ID produce alternating valid and invalid contents.

Configuration faults

Every fault in this section means the affected element was not created. Anything depending on it will fail too, so fix these before interpreting anything else.

0x0003 / 0x0013 / 0x0033 — input, output and map ID duplication

Description. Two elements were configured with the same ID. The first is created and the duplicate is discarded. The component ID is the duplicated ID.

Diagnostics.

  1. Search the configuration for the ID given in the component ID field. Exactly two elements will carry it.
  2. Renumber one of them and re-upload.
  3. Check whether anything referenced the discarded element — it will have been silently using the surviving one, which is usually the real symptom that brought you here.

0x0034 — map tuner ID duplication

Description. Two maps attempted to register with the map tuner under the same ID. The second registration is rejected, so that map cannot be tuned even though it still functions.

Diagnostics. As for 0x0033 — locate the duplicated tuner ID and renumber one of the maps.

0x0021 – 0x0025 — calibration entry invalid

Description. A calibration entry referenced a logical channel number beyond what this hardware provides. The five codes distinguish the channel type: ADC (0x0021), DAC (0x0022), digital input (0x0023), digital output (0x0024), and PWM output (0x0025). The component ID is the offending logical channel number, and the entry is rejected.

Diagnostics.

  1. Several of these appearing together means the device is running a calibration built for different hardware. Confirm the device variant before anything else.
  2. Compare the logical channel number in the component ID against the device specification for the variant you actually have.
  3. These are not user-serviceable individually — a device reporting them needs its calibration reloaded for the correct variant.

0x0006 / 0x0081 / 0x0082 — requested pin does not exist

Description. The configuration requested a function on a pin the hardware does not provide: a frequency input (0x0006), a power output (0x0081), or an analog output (0x0082). The component ID is the requested pin number.

Diagnostics.

  1. Compare the pin number against the device pinout. Not every pin supports every function.
  2. Move the function to a pin that supports it, or move the physical wiring to match the configuration.
  3. If the pin number looks far too large, the configuration was built for a larger device variant.

0x00E0 / 0x00E1 — map input misconfigured

Description. A map input either references a source input that does not exist (0x00E0), or references a map whose input and output axes have different lengths (0x00E1).

Diagnostics.

  1. For 0x00E0, check the source input assigned to the map input. If that input itself failed to configure, fix its fault first — this one will clear with it.
  2. For 0x00E1, open the map and confirm the input and output value lists are the same length. A truncated paste when entering data is the usual cause.

0x00F0 / 0x00F1 — mux input misconfigured

Description. A multiplexer input has no selector assigned (0x00F0), or one of its source slots is empty (0x00F1). For 0x00F1 the component ID is the index of the empty slot.

Diagnostics.

  1. Open the multiplexer input and confirm a selector input is assigned.
  2. For 0x00F1, check the source at the index given by the component ID.
  3. As with all reference faults, an empty slot is frequently caused by the referenced input having failed its own configuration.

0x00A0 / 0x00A1 — reflected binary code input misconfigured

Description. An RBC input is configured with no source inputs at all (0x00A0), or one of its bit sources is empty (0x00A1).

Diagnostics.

  1. Open the RBC input and confirm every bit position has an input assigned.
  2. A gear position switch decoded through an RBC input with a missing bit reads plausible but wrong values — treat this as a functional fault, not cosmetic.
  3. Check the faults of the individual digital inputs feeding it.

0x0037 / 0x0038 — map axis not monotonic

Description. A map's X axis (0x0037) or Y axis (0x0038) breakpoints are not strictly increasing. The component ID is the map ID. Interpolation requires a rising axis, so the map cannot be evaluated correctly.

Diagnostics.

  1. Open the map identified by the component ID and read down the axis. Look for a value equal to or lower than the one before it.
  2. Duplicate breakpoints are as invalid as decreasing ones — each must be strictly greater than its predecessor.
  3. Re-upload after correcting, and confirm the fault does not return.

0x0035 / 0x0036 / 0x0039 — map tuner request out of range

Description. Unlike the rest of this section, these are raised at run time while tuning, not at startup. The tuning tool requested a label position outside the axis (0x0035), a cell outside the map's dimensions (0x0036), or a map variant that does not exist (0x0039). The component ID is the map ID and the request is rejected.

Diagnostics.

  1. Confirm the tuning software is working against the same configuration that is loaded on the device. A stale map definition in the tool requests cells the device does not have.
  2. Re-read the configuration from the device and retry.
  3. For 0x0039, check that the variant you are editing exists in the map on the device — variants added in the tool but never uploaded produce this.
  4. These faults do not affect running behaviour; the rejected edit simply did not apply. Verify your change actually took effect.

0x0054 / 0x005B / 0x005C / 0x005F — CAN configuration invalid

Description.

  • 0x0054 — more than one CAN preset was assigned to the same bus. Only one preset may own a bus; the second is rejected.
  • 0x005B — a CAN input could not be created on the channel.
  • 0x005C — a preset and the frame counts assigned to it are inconsistent.
  • 0x005F — a CAN element references a preset that does not exist.

Diagnostics.

  1. For 0x0054, review the presets assigned to each channel. Move one to a different bus, or combine the requirement into a single preset.
  2. For 0x005C and 0x005F, re-upload the configuration first. Both indicate internal inconsistency, most often from a partially applied upload.
  3. If either persists after a clean re-upload, the configuration was built against a different firmware version — rebuild it against the version on the device.
  4. For 0x005B, check how many receive frames are configured on that channel. Controllers have a finite number of filter slots and reject additions beyond it.

0x04D4 — PWM output channels exhausted

Description. More PWM outputs were requested than the output driver provides. The driver supplies four channels; the fifth and any beyond it are rejected and return nothing. The component ID is the pin of the rejected output.

Diagnostics.

  1. Count the PWM outputs in the configuration. More than four on one driver cannot be satisfied.
  2. Reassign lower-priority functions to plain digital outputs where full PWM control is not required.
  3. The rejected output does not exist at run time — anything driving it has no effect, which is usually the symptom that led here.

!!! note This code is not part of the documented fault ID range and is emitted as a raw literal by the output driver. It is included here because it does occur in the field.