What a DTC on a Haltech Elite is telling you
Every Haltech Elite ECU watches its own inputs, outputs, internal supplies and CAN-connected devices all the time. When one of those checks fails, the ECU stores a diagnostic trouble code (DTC) and ESP shows it to you. A DTC is not a diagnosis. It's a pointer that says "this signal or this circuit did something the ECU didn't expect." Your job, and ours when a car comes in, is to work out why.
Haltech uses the same letter-and-four-character format you'll know from OBD-II scan tools, but the numbers are Haltech's own. Don't look up a Haltech code in a generic OBD-II chart and assume it means the same thing. A few line up with the factory meaning, plenty don't.
The three code families
| Prefix | Covers | Typical examples |
|---|---|---|
| P (powertrain) | Engine sensors, injector and ignition drivers, drive by wire, internal ECU supplies, widebands, nitrous, and the PD-16 and PDM power modules | Coolant temp out of range, injector open circuit, throttle sensors disagreeing, battery voltage too high |
| C (chassis) | Suspension, ride height, brake pressure, wheel speed, steering angle, yaw and G sensors | A shock travel sensor reading outside its range, one wheel speed disagreeing with the others |
| U (network) | Haltech CAN devices and internal startup checks | An IO-12, TCA or wideband box not talking, two boxes set to the same ID, a CAN port left unassigned |
How to read the wording in a code name
Most of the index is sensor range checks, and once you understand the naming you can read almost any of them without a lookup.
- Raw Min / Raw Max: the voltage at the ECU pin is below or above the limits you set for that input. This is almost always electrical. A raw min usually means an open circuit, a missing 5 V reference or a signal shorted to ground. A raw max usually means a signal shorted to 5 V or 12 V, or a broken sensor ground.
- Operating Min / Operating Max: the wiring may be fine, but the calibrated value (temperature, pressure and so on) has gone beyond what you told the ECU is believable. Check the sensor calibration you selected before you blame the part.
- Open Circuit (Not Connected) and Short Circuit: these are driver checks on outputs such as injectors.
- Over-current and I/O Error: an output, for example a wastegate solenoid channel, pulled more current than it should or failed its own check.
- Comms Error (RX) or Timeout: the ECU stopped hearing from a CAN device.
So "Oil Temperature Sensor Raw Max" reads as "the oil temp input voltage is higher than the allowed limit." Start at the connector, not the tune.
Current vs past codes
ESP separates codes that are active right now from ones that happened earlier and have since cleared. A past code still matters. An intermittent fault, like a wideband that drops out while cranking, often only ever shows up as a past code. Clear the list, drive the car the way it failed, and see what comes back.
Injector driver codes are worth a special mention. The ECU re-evaluates them on a short, repeating window, and if an injector output wasn't fired during that window the code falls back to past. That means an unplugged injector on a cylinder that isn't being fueled can look like a past code even though the fault is still there. Test with the engine running or with an output test before you call it fixed.
The codes we see most, and what we check first
| Code(s) | What it means | Our first checks |
|---|---|---|
P0109 | MAP hose failure. The ECU watches vacuum while running and flags a signal that looks like a cracked, kinked or disconnected hose. Only relevant when the MAP sensor is plumbed by hose, such as the on-board sensor or a firewall-mounted one. | Hose routing, clamps, a tee feeding other devices, and whether this check should be enabled at all on your setup |
P0261, P0262 and the matching codes for later injectors | Injector output 1 open (almost no current when switched on) or shorted (current far too high right after switch-on, so the ECU shuts the channel off). Later channels, including the aux injector outputs, use the same logic. | Connector, injector resistance, chafed harness near the rail. See our injector diagnostics guide. |
P0563 | Battery voltage has reached 18 V or more. | Alternator regulation, jump packs, a loose battery terminal. Our battery voltage diagnostics article covers the related settings. |
P0601 to P0605 | The saved settings memory failed an integrity check, meaning a write was corrupted. | Reload a known-good map, then look at why power dropped during a save |
P0668 / P0669 | ECU internal temperature below -40 °F (-40 °C) or above 185 °F (85 °C). | ECU mounting location, heat soak, airflow |
P1A15 | Sensor ground loop. The sensor ground has continuity to power ground or the chassis. | With the ECU unplugged, meter between sensor ground and power ground. Also look for a sensor whose body grounds itself to the engine. |
P1A53 | External dash timeout between the ECU and a Haltech dash. | Dash Type setting under Haltech CAN System (see below) |
P1165 and the wideband RX timeout codes | A CAN wideband controller has gone quiet. It's either unpowered or dropping out, commonly during cranking. | Power feed on the WB1 or WB2, and which port Haltech CAN System is assigned to |
U1157 | CAN bus startup error because the Haltech CAN System port is blank. | Very common after loading a dual-connector map into a single-connector ECU. Assign the port in Connections. |
U1132 | Real time clock failure. The clock keeps date and time with the ECU off using its own small battery. | Usually a flat clock battery, so expect log timestamps to be off until it is sorted. |
Drive by wire codes deserve extra respect
DBW throttles are checked from several angles at once, because a throttle that opens on its own is dangerous. P0227, P0228 and the P2122 to P2139 range cover each throttle and pedal sensor track going below or above the minimum and maximum voltages you set in the DBW setup, plus correlation codes for when the two tracks of a sensor stop moving together. P1590 to P1593 fire when the main processor and the independent supervisor read different voltages from the same sensor. P2113 means the throttle blade isn't following what the ECU is asking for, and P2109 means DBW control has been shut down and the motor outputs are off. The P2A2x codes repeat the same set for a second throttle body.
If you've changed throttle bodies or pedals, redo the DBW calibration before chasing wiring. Our DBW diagnosis guide walks through the rest.
If the ECU is relaxing its tracking tolerances (P2163) just to keep the throttle working, that's a warning, not a fix. Find the cause before the car goes back on the street or track.
Haltech dash timeout: the settings that fix it
P1A53 almost always comes down to the two units disagreeing about who controls what. Pick the case that matches your car:
- The ECU uses the dash's inputs or outputs: on the ECU, under Connections > CAN > Haltech CAN System, set Dash Type to your dash (iC-7 or uC-10). Then connect to the dash and turn on Enable External IO Control in the same menu.
- The dash only displays data: on the ECU, set Dash Type to Generic Dash.
CAN device codes (U codes)
Each expander box, including the IO-12, TCA-2, TCA-4 and TCA-8, gets its own set of codes for comms loss, hardware failure, erased firmware and internal errors, separated by box A or box B. The one that trips people up is Duplicate ID Error: the box sees something else transmitting on its IDs. That's usually two identical boxes left on the same box identifier, or a non-Haltech device on the bus. Check the ID selection on each box and review your Haltech CAN System setup.
You'll also see U codes named for traction control, rolling anti-lag and cruise control initialization failures. Those mean the feature couldn't start up. For rolling anti-lag that can be an input pin that's badly chosen or already claimed by another function; for traction control it points at the limiter or slip calculation failing to initialize. Recheck the pin assignments and the feature's setup. U1210 means a Race Expansion Module needs a firmware update over its own USB connection, because the ECU firmware is newer than the REM's.
PD-16 and PDM power module codes
If your car runs a Haltech power distribution module, its health codes land in the ECU's list as well. They cover supply voltage too low or too high (below 8 V or above 24 V on PD-16 boxes), total current over the limit, internal supply rails out of range, and internal temperature. PD-16 boxes warn once an internal temperature passes 239 °F (115 °C) and shut their outputs off past 293 °F (145 °C). A timeout code means the ECU hasn't heard from that box for more than two seconds.
A PDM under-voltage lockout (P195C) means the hardware protection has kicked in. Our usual suspects are an output channel drawing too much current, a poor ground at the bus bar or battery, or the ignition switch feed. On 16 V race cars in particular, feeding the ignition sense from the other side of the switch can help.
Codes you shouldn't see
A long list of "ECU Internal Failure" codes exist for factory testing, such as startup checks for memory, CAN and logging. They shouldn't appear in normal use. If one does, or if U1163 says the firmware doesn't match the hardware, stop and contact us before you keep driving.
Our DTC workflow
- Connect with ESP, note every current and past code, then clear them.
- Reproduce the condition: start, idle, drive or crank, whatever caused it.
- Read the code name for its type: range, driver, comms or internal.
- For range codes, watch the live raw voltage in Text View while wiggling the harness.
- Fix the cause, clear again and confirm it stays gone over a few drive cycles.
DTC FAQ
Will clearing a code fix the problem?
No. Clearing just resets the list. If the fault is still there, the code comes straight back, sometimes as a past code if it's intermittent.
Why do I get sensor codes for sensors I don't have?
Usually an input is enabled in the map with nothing connected to it, often from a base map built for another car. Disable inputs you aren't using and the matching raw min or max codes stop.
Can I find the meaning of every Haltech code here?
We've grouped the code families and explained the ones that come up in real cars. If you have a code we haven't covered, send us the code and a log and we'll help you track it down, or book a free 30-minute consultation.




