Fault Codes
The device continuously monitors its own configuration, its inputs and outputs, and the CAN buses it is attached to. When something is wrong it raises a fault — a structured record that can be read back with the configuration software or the data logger.
This page documents every fault the firmware can currently raise, what triggers it, and what to check when you see one.
Step-by-step diagnostic procedures for the precisely-defined codes are on the companion page: Fault diagnostics.
Related pages: CAN bus diagnostics, Configuration concepts, Common IO settings, Working with the CAN bus.
How a fault is structured
Every fault is reported as five fields plus an optional parameter list:
| Field | Meaning |
|---|---|
| Type | Severity: Warning or Fault |
| Mode | How the fault is currently latched — see Fault modes |
| Category | Which subsystem raised it — see Categories |
| Fault ID | The specific problem, unique within its category |
| Component ID | Which input, output, pin, map, CAN channel or frame is affected |
The Component ID is the most useful field for diagnosis — the Fault ID tells you what kind of problem occurred, the Component ID tells you where. Its meaning depends on the fault and is listed for every code in the tables below.
Fault IDs are shown in hexadecimal throughout this page, matching the configuration software display. The first digit of the Fault ID corresponds to its category, so a code is unambiguous on its own.
Fault modes
| Mode | Value | Meaning |
|---|---|---|
| Intermittent | 1 | The condition has just been detected and has not yet persisted long enough to be confirmed |
| Continuous | 2 | The condition has been present continuously and is confirmed |
| Inactive | 6 | The condition was present earlier but is no longer active — a stored, historical fault |
Monitored signals use a debounce before a fault is confirmed: the fault appears first as Intermittent, and is promoted to Continuous only if the condition is still present some time later. A brief glitch therefore shows up as Intermittent and never escalates.
The debounce period depends on the subsystem. Input watchdog and sensor supply faults escalate after roughly 200 processing cycles. CAN entity frame timeouts count missed frames instead, and escalate once more than six consecutive frame periods have been missed.
Configuration faults skip the debounce entirely — they are raised directly as Continuous, because a configuration is either valid or it is not.
Active and inactive faults
When a monitored condition clears, the fault is not deleted. It is moved to Inactive so the event remains visible after the fact — this is what lets you find an intermittent wiring problem that was present during a drive but is gone by the time the vehicle is on the bench.
The configuration software reports the two counts separately, as
Faults active/inactive.
Fault lifecycle
A fault is identified by the combination of Category + Fault ID + Component ID. Raising the same combination twice does not create a second entry — the existing entry is updated. Two different inputs failing the same way therefore produce two separate faults, which is what you want when tracing a harness problem.
Important operational notes
- Faults are held in RAM and are lost on power-down. They are not written to non-volatile memory, so a fault list must be read while the device is still powered from the session you are diagnosing. Cycling the ignition clears the list.
- The fault table holds 32 entries. Once 32 distinct faults are present, further faults are discarded until the table is cleared. A badly broken configuration can fill the table on its own during startup and mask later run-time faults — fix configuration faults first, then re-check.
- Clearing removes everything, both active and inactive entries. Active conditions are re-raised on the next processing cycle, so after a clear, any fault that comes straight back is a live problem.
Reading and clearing faults
Both PC applications read faults over the same device link:
- Configuration software — the Faults view polls the device roughly five times per second while it is open and shows Type, Category, Fault ID, Component ID and Mode, plus a description. Clear faults empties the table.
- Data logger — shows the same list as severity-coded cards, with a Read and a Clear all action.
Neither application resolves a fault code without this page: the description column is populated from a lookup table that is currently empty, so codes are displayed numerically. Use the tables below to interpret them.
Fault categories
| Category | Value | Raised by | When |
|---|---|---|---|
| Configuration | 1 | Configuration and calibration parsing | At startup, when the configuration is loaded |
| Input watchdog | 2 | Input monitoring | Continuously, while running |
| Output watchdog | 3 | Output drivers | Continuously, while running |
| System | 4 | Device supplies and stored data | At startup and continuously |
| CAN entity | 32 | CAN presets / ECU integrations | At startup and continuously |
| CAN bus | 33 | CAN controllers | Continuously, while running |
Categories 17 (dual-clutch controller) and 18 (transmission) are defined in the protocol but are not raised by the current firmware — see Reserved codes.
Category 1 — Configuration faults
Configuration faults mean a requested element could not be applied. They are always Continuous. The affected element is not created — an input that failed to configure produces no value, and an output that failed to configure does not drive anything.
Most of these are raised once, while the configuration is being parsed at
startup. The exception is the map tuner group
(0x0035, 0x0036, 0x0039), which is raised at run time when the tuning
tool requests a cell or variant that does not exist in the map — those appear
while you are editing, not at startup.
These are the faults to resolve first: everything downstream depends on the configuration being valid.
Inputs
| Code | Name | Component ID | Meaning and what to check |
|---|---|---|---|
0x0003 |
Input ID duplication | Input ID | Two inputs are configured with the same ID. Only the first is created. Give each input a unique ID. |
0x0004 |
Input unknown type | Input type value | The configuration requests an input type this firmware does not implement. Usually a configuration built for a newer firmware — update the device. |
0x0005 |
Multiple frequency inputs on a single pin | Pin number | More than one frequency input is assigned to the same physical pin. Only one is possible per pin. |
0x0006 |
Frequency input does not exist | Pin number | A frequency input was requested on a pin that has no frequency-capable hardware. Check the pinout. |
0x00A0 |
RBC input has zero inputs | 0 | A reflected-binary-code input is configured with no source inputs. Assign its bit sources. |
0x00A1 |
RBC input has an unset source | 0 | One of the RBC bit sources refers to an input that does not exist — often an input that itself failed to configure. |
0x00B0 |
Timed input has an invalid source | 0 | The source input of a timed input does not exist. |
0x00C0 |
Compare input has an invalid source | 0 | One of the two inputs being compared does not exist. |
0x00D0 |
Divide input has an invalid source | 0 | The numerator or denominator input does not exist. |
0x00D1 |
Divide input has an unrecognised operation | 0 | The maths input's operation is not one the firmware implements. Firmware 2.1 and later; before that an unhandled operation registered nothing instead of faulting. |
0x00E0 |
Map input has an invalid source | 0 | The input feeding a map input does not exist. |
0x00E1 |
Map input has an invalid map size | 0 | The referenced map has no usable axis data. |
0x00F0 |
Mux input selector is unset | 0 | A multiplexer input has no selector input assigned. |
0x00F1 |
Mux input source is unset | Source index | The multiplexer source at this index does not exist. |
0x0015 |
Data logger channel duplication | Logger channel | Two data logger channels share the same ID. Only the first is recorded. |
When the Component ID is 0, the fault does not identify which element failed —
check every input of that type in the configuration.
Outputs
| Code | Name | Component ID | Meaning and what to check |
|---|---|---|---|
0x0013 |
Output ID duplication | Output ID | Two outputs share the same ID. Only the first is created. |
0x0014 |
Multiple outputs on a single pin | Pin number | More than one output is assigned to the same physical pin. |
0x001F |
Output unknown type | Output type value | The configuration requests an output type this firmware does not implement. Update the device firmware. |
0x0081 |
Power output does not exist | Pin number | A power (solenoid) output was requested on a pin that has no power stage. Check the pinout. |
0x0082 |
Analog output does not exist | Pin number | An analog output was requested on a pin without a DAC. |
0x0083 |
Digital output does not exist | Output number | A digital output was requested on a pin that cannot drive one. |
0x04D4 |
PWM output channels exhausted | Pin number | More PWM outputs were requested than the output driver provides. Reduce the number of PWM outputs. |
Unassigned mandatory elements
The transmission drivers check their mandatory inputs, outputs and maps when the configuration is applied, and raise these when one is missing. This is the most common fault on a first install — the driver refuses to run and the transmission will not engage a gear.
| Code | Name | Component ID | Meaning and what to check |
|---|---|---|---|
0x0001 |
Input not set | Input ID | A mandatory input is unassigned. The Component ID identifies which one. |
0x0002 |
Input ID out of range | Input ID | The configuration refers to an input index the device does not have. |
0x0011 |
Output not set | Output ID | A mandatory output is unassigned. Thirteen outputs are mandatory on the OEM gateways — see the configuration pages. |
0x0012 |
Output ID out of range | Output ID | The configuration refers to an output index the device does not have. |
0x0031 |
Map not set | Map ID | A mandatory map is unassigned. |
0x0032 |
Map ID out of range | Map ID | The configuration refers to a map index that does not exist. |
0x0041 |
Parameter not set | Parameter ID | A required numeric parameter is zero or negative. Raised by the OEM gateways for diff ratio (ID 401) and wheel diameter (ID 402). This one is a warning — the transmission still runs, but the speed conversion is skipped and road speed degrades. See Vehicle & wheel speed. |
The mandatory sets differ per driver, and vehicle speed is mandatory on the PDK gateway but not on the 8HP one: 8HP · PDK.
Calibration
Calibration faults mean the device's stored calibration does not match the configuration being loaded — usually a configuration built for a different hardware variant.
| Code | Name | Component ID | Meaning and what to check |
|---|---|---|---|
0x0021 |
Invalid ADC calibration | Calibration index | The analog input calibration entry is missing or out of range. |
0x0022 |
Invalid DAC calibration | Calibration index | The analog output calibration entry is missing or out of range. |
0x0023 |
Invalid digital input calibration | Calibration index | The digital input calibration entry is missing or out of range. |
0x0024 |
Invalid digital output calibration | Calibration index | The digital output calibration entry is missing or out of range. |
0x0025 |
Invalid PWM output calibration | Calibration index | The PWM output calibration entry is missing or out of range. |
If several of these appear together, the device is running a configuration intended for different hardware. Verify the device variant before continuing.
Maps and map tuners
| Code | Name | Component ID | Meaning and what to check |
|---|---|---|---|
0x0033 |
Map ID duplication | Map ID | Two maps share the same ID. Only the first is created. |
0x0034 |
Map tuner ID duplication | Map tuner ID | Two map tuners share the same ID. |
0x0035 |
Map tuner label index out of range | Map tuner ID | The tuner references a label position that does not exist in the map. |
0x0036 |
Map tuner index out of range | Map tuner ID | The tuner references a cell outside the map's dimensions. |
0x0037 |
Map X axis not monotonic | Map ID | X-axis breakpoints are not strictly increasing. Interpolation requires a rising axis — correct the axis values. |
0x0038 |
Map Y axis not monotonic | Map ID | Y-axis breakpoints are not strictly increasing. |
0x0039 |
Map tuner variant not found | Map tuner ID | The tuner refers to a map variant that is not present in the configuration. |
See Scaling and maps for axis requirements.
CAN configuration
These faults mean a CAN element could not be attached to a bus. The usual root cause is a single mistake: a frame, input, output or preset assigned to a CAN channel that is not enabled in the configuration. Enable the bus, or move the element to a configured one.
| Code | Name | Component ID | Meaning and what to check |
|---|---|---|---|
0x0051 |
CAN input on an unconfigured bus | CAN channel | An input is assigned to a CAN channel that is not enabled. |
0x0053 |
CAN preset on an unconfigured bus | Handler index | A CAN preset/entity is assigned to a channel that is not enabled. |
0x0054 |
Multiple presets on a single bus | Handler index | More than one CAN preset is assigned to the same bus. Only one preset may own a bus. |
0x0055 |
Standard input frame on an unconfigured bus | Handler index | An 11-bit receive frame is assigned to a channel that is not enabled. |
0x0056 |
Extended input frame on an unconfigured bus | Handler index | A 29-bit receive frame is assigned to a channel that is not enabled. |
0x0057 |
Standard output frame on an unconfigured bus | Handler index | An 11-bit transmit frame is assigned to a channel that is not enabled. |
0x0058 |
Extended output frame on an unconfigured bus | Handler index | A 29-bit transmit frame is assigned to a channel that is not enabled. |
0x0059 |
Failed to add standard input frame | CAN channel | The controller rejected an 11-bit receive filter — typically more receive frames than the controller has filter slots. |
0x005A |
Failed to add extended input frame | CAN channel | The controller rejected a 29-bit receive filter, for the same reason. |
0x005B |
Failed to create CAN input | CAN channel | A CAN input could not be created on this channel. |
0x005C |
Wrong handler for frame count | Handler index | Internal inconsistency between a preset and the frames assigned to it — usually a corrupted or partially updated configuration. Re-upload it. |
0x005D |
Failed to configure input frame | CAN frame ID | A receive frame could not be configured. The Component ID is the CAN identifier of the frame concerned. |
0x005E |
Wrong CAN bus ID | CAN channel | The configuration references a CAN channel number this hardware does not have. |
0x005F |
Invalid CAN handler | Handler index | A CAN element references a preset that does not exist. |
Category 2 — Input watchdog faults
The input watchdog checks configured inputs against their expected range while the device is running, and reports the input by ID. It is inhibited while the ignition input is low or the battery voltage is below 8 V, so cranking does not generate spurious faults.
Every fault in this category carries the Input ID as its Component ID — for an analog or frequency input. A CAN bus input can also have a fault window, and its faults land in this category too, but the identifier they carry is not set from the configuration, so it does not point back at the channel. Identify those from the fault window you configured and what the datalogger was showing.
| Code | Name | Applies to | Trigger and what to check |
|---|---|---|---|
0x0101 |
ADC value lower than expected | Analog inputs | The value is below the configured fault minimum. Check the sensor and its ground path. |
0x0102 |
ADC value higher than expected | Analog inputs | The value is above the configured fault maximum. Check the sensor and its supply. |
0x0103 |
ADC short to ground | Analog inputs | The reading is at the very bottom of the range — a shorted signal wire or a failed sensor. |
0x0104 |
ADC short to 5 V | Analog inputs | The reading is at the very top of the range, above the configured maximum — signal shorted to the sensor supply. |
0x0111 |
Frequency input voltage below limit | Frequency inputs | The DC voltage on the input pin — not the frequency — is below the configured fault voltage low limit. Check the sensor type, the pull-up/pull-down setting, and the sensor supply. |
0x0112 |
Frequency input voltage above limit | Frequency inputs | The DC voltage on the input pin is above the configured fault voltage high limit. |
0x0113 |
Frequency input short to ground | Frequency inputs | The input pin voltage is pinned at the bottom of its range. |
0x0114 |
Frequency input short to 5 V | Frequency inputs | The input pin voltage is pinned at the top of its range. |
The four frequency codes monitor the DC voltage on the input pin, not the
measured frequency — a frequency value that is simply wrong raises nothing. The
distinction between an out of range fault (0x0101, 0x0102, 0x0111,
0x0112) and a short fault (0x0103, 0x0104, 0x0113, 0x0114) is how far
the reading is from the valid band. A short fault is raised when the value is
pinned at a supply rail, which points at the harness rather than at the sensor's
calibration. Out-of-range limits come from the fault minimum and maximum you set
on the input — see Common IO settings.
Category 3 — Output watchdog faults
Output faults are detected by the current-controlled and voltage-controlled output drivers. The Component ID is the output pin number.
| Code | Name | Trigger and what to check |
|---|---|---|
0x0203 |
Output resistance out of specification | The measured load resistance is outside the expected window for this output. A partially shorted or wrong-specification solenoid, or corroded connections adding resistance. |
0x0204 |
Output open circuit | The driver commanded the output fully on during adaptation and measured essentially no current. The load is disconnected — check the connector, the wire, and the solenoid winding. |
Both are detected during the output adaptation phase that runs after ignition-on, and resistance monitoring is only performed when it has been enabled for that output.
Category 4 — System faults
System faults concern the device itself rather than the configuration. All are
raised with Component ID 0.
Sensor supply
| Code | Name | Trigger and what to check |
|---|---|---|
0x0301 |
5 V sensor supply out of specification | The 5 V sensor supply has sagged below roughly 4.64 V. Usually an overloaded supply — too many sensors, or one sensor drawing excessive current. |
0x0302 |
5 V sensor supply short to ground | The 5 V sensor supply has collapsed below roughly 0.05 V. A dead short on the sensor supply wire. |
While either fault is active, input range checking is suspended — with a bad reference every analog reading would be wrong, so the input watchdog would otherwise raise a fault on every sensor at once. Fix the supply first; input faults can only be assessed once it is back in range.
Stored data
| Code | Name | Trigger and what to check |
|---|---|---|
0x03F1 |
No calibration data | The device has no valid calibration. Startup halts here — the device raises this fault and stops, so no configuration is loaded and nothing runs. The device must be re-calibrated. |
0x03F2 |
No configuration data | No valid configuration is stored. Upload a configuration. |
0x03F3 |
No adaptation data | Both the main and backup adaptation copies failed their checksum. Adaptation restarts from defaults; expect the first drive cycle to relearn. |
0x03F4 |
Adaptation backup resynchronised | The backup copy did not match the main copy and has been rewritten automatically. Self-healing — no action required. |
0x03F5 |
Adaptation checksum notice | Raised on devices with no backup segment whenever adaptation data is present. Due to an inverted check it fires when the checksum is valid, so it does not indicate a problem — see diagnostics. |
0x03F3 is informational after a firmware update or a first power-up. If it
returns on every start, the storage is failing or power is being removed before
the device finishes writing.
Category 32 — CAN entity faults
A CAN entity (or preset) is a packaged integration with a specific ECU or transmission — it knows which frames to expect and which to send. These faults report problems with that traffic. See Working with the CAN bus.
| Code | Name | Component ID | Trigger and what to check |
|---|---|---|---|
0x2001 |
Missing frame | Frame index within the preset | An expected frame has not arrived within its timeout. The most common CAN fault in service: the sending ECU is off, on a different bus, at a different baud rate, or not transmitting that frame. |
0x2002 |
Wrong frame | CAN identifier, or frame index | A frame arrived but its contents did not match what the preset expects — wrong length, or wrong ECU variant. Check that the selected preset matches the actual ECU. |
0x2005 |
Failed to create entity | Internal element index | The preset could not allocate the frames it needs, usually because the bus already has other elements consuming its filter slots. Reduce the number of separately configured frames on that bus. |
For 0x2001, the Component ID is the preset's own frame index, not the CAN
identifier — which frame that is depends on the preset in use. Confirm with a
CAN analyzer which expected frame is absent; see
CAN bus diagnostics.
Category 33 — CAN bus faults
These come directly from the CAN controller's error state, and describe the physical bus rather than the message content. The Component ID is the CAN channel number.
| Code | Name | Meaning |
|---|---|---|
0x2101 |
Bus off | The controller has exceeded its error limit and removed itself from the bus. Nothing is transmitted or received on that channel until it recovers. |
0x2103 |
Protocol warning | The error counters have crossed the warning threshold — errors are accumulating but the bus is still operating. |
0x2104 |
Error passive | The error counters have crossed the passive threshold. The controller can still communicate but no longer signals errors actively. This is a late warning before bus-off. |
0x2105 |
Stuff error | Bit-stuffing violation — noise, or a baud rate mismatch. |
0x2106 |
Form error | A frame's fixed-format field was malformed. |
0x2107 |
Acknowledge error | A transmitted frame was not acknowledged by any other node. Very often this means the device is alone on the bus, or the other node is silent. |
0x2108 |
Bit 1 error | A recessive bit was transmitted but read back as dominant — commonly a short to ground or a stuck-dominant node. |
0x2109 |
Bit 0 error | A dominant bit was transmitted but read back as recessive — commonly an open circuit or missing termination. |
0x210A |
CRC error | A received frame failed its checksum. |
0x210B |
CAN controller startup failed | The CAN controller did not initialise. This is a hardware or wiring-level failure of the controller itself, not a bus condition. |
For 0x210B, the Component ID is encoded as (0x100 × channel) + stage, where
the stage indicates how far initialisation progressed. Report the raw value when
raising a support request.
The practical order of interpretation is: 0x2107 first, since a bus with no
acknowledging node produces it constantly and cascades into the others; then
0x2101/0x2104, which indicate the bus has already degraded; then the
individual bit and frame errors, which point at wiring and termination. Each
error type maps to a physical cause in
CAN bus diagnostics.
Quick reference — first checks by category
| You see | Look at |
|---|---|
| Any Category 1 code | The configuration itself. Fix these before diagnosing anything else — the affected element does not exist at run time. |
| Category 2 on one input | That input's harness and sensor. |
| Category 2 on many inputs at once | The 5 V sensor supply — check for 0x0301/0x0302 first. |
| Category 3 | The output's load: connector, wire, and solenoid. |
Category 4 0x03Fx |
Stored data. Re-upload configuration or re-calibrate. |
| Category 32 | Whether the other ECU is present and transmitting, and whether the correct preset is selected. |
| Category 33 | Physical bus: termination, wiring, baud rate, and whether a second node exists to acknowledge. |
Reserved codes
The following codes are defined in the device protocol but are not raised by the current firmware. They are listed so that the numbering is documented and so a code seen in a protocol capture can be identified. Seeing one of these in the field is not expected.
| Category | Codes | Intended meaning |
|---|---|---|
| 1 — Configuration | 0x0052 |
CAN output on an unconfigured bus |
| 1 — Configuration | 0x0071, 0x0072 |
Controller failed to decode its configuration / failed to be created |
| 2 — Input watchdog | 0x0105, 0x0115 |
Analog and frequency input short to 12 V |
| 3 — Output watchdog | 0x0201, 0x0202, 0x0205, 0x0206 |
Output short to ground, short to 12 V, possible backfeed, overcurrent protection |
| 4 — System | 0x0311, 0x0312 |
Supply voltage too low / too high |
| 17 — Dual-clutch controller | 0x1001–0x10F0 |
Shift fork travel, synchronisation, and gear adaptation faults |
| 18 — Transmission | 0x1101, 0x1102, 0x1110–0x1112 |
Gear ratio and tailshaft speed plausibility faults |
| 32 — CAN entity | 0x2003, 0x2004 |
Frame received too slowly / too quickly |
| 33 — CAN bus | 0x2102 |
Protocol exception |
Output short-circuit conditions (0x0201, 0x0202) are still protected against
in hardware — the driver's protection acts whether or not a fault code is
raised. What is absent is the diagnostic report, not the protection.
Limitations of the current implementation
Known constraints, so that fault data is not over-interpreted:
- Faults are not stored across power cycles. Read them in the same power session in which the problem occurred.
- The table is limited to 32 entries, after which new faults are silently dropped.
- No timestamps or occurrence counts. A fault records that a condition occurred, not when or how often.
- Additional parameters are not transmitted. The protocol reserves a parameter list for measured values, but the device does not currently send one; only the five identification fields are available.
- Inactive faults are not distinguished per occurrence. A condition that comes and goes repeatedly appears as one entry in its most recent state.