My ECU isn't listed
Applies to: IOcan · Standalone controller. What this means
You want to run a ZF 8HP, a BMW DKG or a Porsche PDK, and there is no preset for your ECU. That does not mean it will not work — any ECU that transmits on CAN can be integrated by hand. A preset is a convenience, not a requirement.
This page is the manual route: what you have to map, how to find it in the stream, and how to build it.
Still choosing hardware? Which device do I need? compares the IOcan CAN gateway with the standalone transmission controller.
What you actually need
Far less than the full stream. The transmission drivers require a fixed set, and everything else is optional:
| Signal | Required by |
|---|---|
| Engine RPM | Every driver |
| Manifold pressure | Every driver |
| Throttle position | Every driver |
| Pedal position | Every driver |
| Brake | Every driver |
| Oil temperature | Both OEM gateways |
| Coolant temperature | Both OEM gateways |
| Vehicle speed | The PDK gateway only |
Engine torque is not on the list — it is calculated. But if your ECU broadcasts one, map it, because a real torque value beats a calibrated estimate. If it does not, map injector pulse width instead, which unlocks the strongest calculated method.
The exact per-driver sets are on the signal requirements matrix. Anything beyond these is optional and can wait.
Some of these usually will not be in the ECU stream at all. Brake is the common one — almost no aftermarket ECU broadcasts it, so plan on a device input from the brake switch regardless of what you map. Oil temperature is the second most common gap.
Finding the signals
Three ways, in order of how much time they save.
1. The vendor's CAN documentation or DBC. Most ECU makers publish their broadcast layout. This is by far the fastest route — you get IDs, byte positions, scaling and rates without touching a scope.
2. The device's own sniffer. It exposes candump-compatible CAN traffic over USB, so it can capture its own buses without extra hardware. See Technical specifications.
Capture with the engine idling, then again while moving one thing at a time — blip the throttle, press the brake, let it warm up. The byte that changes when you move one input is the byte you are looking for. This is slow but it works with no documentation at all.
3. Ask. sales@apex-control.com — if your ECU is common enough, the mapping may already exist even if the preset does not.
Building the inputs
For each signal, add a CAN bus input and set:
| Setting | What to put |
|---|---|
| CAN bus | The bus the ECU is wired to |
| Frame ID | From the vendor's documentation or your capture |
| Start bit / length | Where the value sits in the frame |
| Byte order | Big or little endian. Getting this wrong gives a value that jumps wildly — it is the first thing to suspect |
| Scaling | Multiplier and offset to reach the device's expected units |
| Timeout and Timeout mode | See below — do not skip this |
Where a signal needs more than a multiplier and offset — a non-linear sensor, say — feed the raw input through a map input.
For frames that pack several values, a CAN object input decodes the whole frame once rather than defining an input per field.
Getting the units right
The device expects specific units, and a preset would have handled this for you. The most common conversions to get wrong:
- Manifold pressure in kPa absolute, not bar and not gauge.
- Injector pulse width in microseconds.
- Throttle and pedal position as a percentage across the full range — confirm it actually reaches 100 %, not 93 %.
- Temperatures in °C, watching for an offset — many ECUs transmit temperature with a +40 or +50 offset to keep the value unsigned.
Check each against the ECU's own display before moving on. A signal that is plausible but wrong is worse than one that is missing, because nothing will fault — see wrong but plausible.
Set a timeout on everything
A preset ships with sensible timeout behaviour. A hand-mapped input does not.
UsePrevious holds the last value forever — on a torque-critical signal
that means the transmission keeps setting clutch pressure for an engine state
that no longer exists, with nothing indicating the value is stale. Use
UseDefault or UseFault on anything feeding the torque estimate or the
transmission.
What you give up without a preset
Worth knowing before you start:
- No transmit-back. Several presets also send gear, temperature and cut/blip levels to the ECU. Hand-mapped inputs are one-way — if you want data going back, build it yourself with a CAN object output.
- No automatic scaling. Every conversion is yours to get right.
- No timeout defaults. As above.
- It will not track the vendor. If the ECU's firmware changes its stream, your mapping breaks silently. A preset would be updated.
Verify before driving
- [ ] Every mandatory signal for your driver is present and no mandatory-input fault is active.
- [ ] Each value matches the ECU's own display for the same channel.
- [ ] Throttle and pedal reach full scale, not nearly.
- [ ] Brake toggles cleanly — the signal that usually is not in the stream.
- [ ] Temperatures rise from cold and settle at plausible values.
- [ ] Engine torque is present and passes the ten-minute check.
- [ ] Every input has a timeout and a timeout mode set.
If it is worth a preset
If you have mapped an ECU that others are likely to run, send the mapping to sales@apex-control.com. Presets are built from exactly this kind of work, and a mapping validated on a real car is the hard part.
Related
- Supported ECUs — check yours is genuinely not there first
- Signal requirements matrix
- CAN bus input · CAN object input
- Working with the CAN bus
- CAN Bus Diagnostics — if nothing arrives at all