Project

General

Profile

Build Your First Configuration » History » Version 1

Adam Klama, 06/22/2026 12:28 PM

1 1 Adam Klama
# Build Your First Configuration
2
3
This is a guided, start-to-finish walkthrough for your **first** IOcan configuration.
4
It sits between two other pages: [Getting Started with IOcan](Getting_Started_with_IOcan)
5
gets the device wired and powered, and [Configuration Concepts](Configuration_Concepts)
6
explains the model behind everything below. If you have read those two, you are ready.
7
8
The goal here is not to document every field — the reference pages do that. The goal
9
is to give you a **safe, sensible order** to work in, so your first config comes
10
together predictably instead of by trial and error. Take it one step at a time and
11
you will end up with a transmission that wakes, communicates, and shifts.
12
13
> **Off-road use only.** IOcan does exactly what your configuration tells it to. A
14
> first config is something you build *and validate* — never a finished tune. Keep the
15
> car on a bench or in a controlled setting until every check in Step 9 passes.
16
17
## What you will build
18
19
To keep things concrete, this walkthrough follows one common setup:
20
21
- a **BMW ZF 8HP** transmission,
22
- driven by a **standalone aftermarket ECU** that publishes engine data on CAN,
23
- with **paddle / sequential** shift input.
24
25
Your build may differ — a different transmission, an OEM ECU, an OEM selector. That is
26
fine. The *order* of the steps is the same for every build; only the specific presets
27
and signals change. Where your setup differs, follow the linked reference page for that
28
piece and rejoin the sequence.
29
30
## The shape of a configuration
31
32
Everything you are about to add fits into one loop (this is the model from
33
[Configuration Concepts](Configuration_Concepts)):
34
35
```
36
Inputs  →  Controller  →  CAN Presets  →  Transmission
37
Outputs ←  Controller  ←  CAN Presets  ←  Transmission
38
```
39
40
We will build it roughly in that order: first the plumbing (CAN networks), then the
41
two ends that talk to the outside world (the transmission preset and your ECU), then
42
the brain in the middle (inputs and the controller), and finally what the system
43
reports back out (outputs). Then we validate.
44
45
---
46
47
## Step 1 — Start from a base configuration, not a blank one
48
49
Do not build from nothing. Flash a **base configuration / template** for your
50
transmission and use it as your starting point. A base config already has the
51
transmission controller and the OEM emulation wired up correctly, which removes most
52
of the ways a first attempt can go wrong.
53
54
- Connect IOcan to your PC over USB-C and let it come up in **USB safe mode** (no
55
  transmission power — see [Getting Started](Getting_Started_with_IOcan#4-First-Power-Up-Using-USB-Safe-Mode)).
56
- Flash the firmware and load the base configuration for your transmission.
57
- Save a copy under your own name before you change anything, so you always have a
58
  known-good fallback.
59
60
Everything from here is **editing** that base config to match your car.
61
62
## Step 2 — Define your CAN networks
63
64
A CAN network is just transport — it carries frames, it does not interpret them. Before
65
you can add anything that talks on CAN, the bus it lives on has to exist. For a typical
66
build you will have two:
67
68
- the **transmission bus** (IOcan ↔ transmission),
69
- the **vehicle / ECU bus** (IOcan ↔ your standalone ECU and any dash, keypad, etc.).
70
71
For each network set the bitrate, CAN FD if used, and termination. IOcan has switchable
72
on-board 120 Ω termination — enable it only when IOcan is an **end node** on that
73
bus, and make sure the far end is terminated too. Details and the timeout behaviour you
74
will need later are on [Working with the CAN Bus](Working_with_the_CAN_Bus).
75
76
> A base config usually has the transmission bus defined already. You mainly need to add
77
> and check the vehicle/ECU bus.
78
79
## Step 3 — Confirm the transmission preset
80
81
The transmission side is handled by an **OEM emulation preset** — for this example, the
82
BMW 8HP emulation. It reproduces the OEM communication the transmission expects and
83
automatically creates the matching CAN objects the controller drives. In a base config
84
this is already in place; your job is to confirm it is present and assigned to the
85
**transmission** network from Step 2, not to invent it.
86
87
You will not hand-decode any transmission frames. That is the whole point of the preset.
88
89
## Step 4 — Bring in your engine signals
90
91
Now give the controller something to work with. The transmission controller needs to
92
know engine and driver state. Common required signals:
93
94
- engine RPM,
95
- throttle position,
96
- accelerator pedal position,
97
- fuelling information (fuel pressure / injection timing),
98
- brake pedal state,
99
- wheel speed (optional).
100
101
You have two ways to get them in, covered on
102
[Working with the CAN Bus](Working_with_the_CAN_Bus):
103
104
1. **A CAN Preset for your ECU** (preferred, if one exists). Add the preset, assign it
105
   to the vehicle bus, and it publishes named objects you simply reference — no byte
106
   math.
107
2. **Raw CAN signals** ([CAN Bus Input](CAN_Bus_Input)),
108
   when you have a DBC or know the byte layout of your ECU's broadcast.
109
110
If a signal is not on the CAN bus at all, you can supply it from a hardware pin instead
111
— for example an [Analog Input](Analog_Input)
112
for a 0–5 V sensor, or a [Frequency Input](Frequency_Input)
113
for a pulse-based speed signal. The full menu of input types is on
114
[Configuring Inputs](Configuring_Inputs).
115
116
## Step 5 — Map signals to the controller (and know what is mandatory)
117
118
Adding a signal makes it *available*; it does not yet make it the controller's source.
119
For each logical input the controller needs, choose the **one** signal that drives it.
120
You can read extra copies of a signal for logging, but only one can be the active
121
source — extra ones are logged and ignored.
122
123
This is the step where it pays to understand mandatory vs. optional:
124
125
- **Missing a mandatory signal** → the controller reports a configuration fault and
126
  **halts transmission operation**. Logging still works, but the transmission will not
127
  run. This is intentional, not a bug — it is the device refusing to operate blind.
128
- **Missing an optional signal** → a safe internal default is used, the device keeps
129
  running, and the real signal is picked up automatically if it appears later.
130
131
For any safety-relevant CAN signal, set a **timeout** (`UsePrevious` / `UseDefault` /
132
`UseFault`) so a dropped frame is detected rather than silently held at its last value.
133
134
If a value needs scaling or a curve before the controller uses it, that is handled with
135
[Scaling & Maps](Scaling_and_Maps).
136
137
## Step 6 — Set up shift input
138
139
Decide how the driver requests gears and wire that into the controller:
140
141
- **Paddles or a sequential shifter** via a shifter preset, or via
142
  [Digital Inputs](Digital_Input)
143
  for simple up/down buttons.
144
- **An OEM gear selector** (e.g. a BMW GWS) via its preset.
145
- **A CAN keypad** for mode and range selection.
146
147
Keep it minimal for the first config: up, down, and a way to select drive/neutral/reverse
148
is enough to validate. Add modes and refinements once the basics shift cleanly.
149
150
## Step 7 — Configure the outputs you actually need
151
152
Outputs expose transmission and controller state back to the rest of the car. For a
153
first config, less is more — add only what you need to drive and to be safe:
154
155
- **reverse light** (so reversing is legal and visible),
156
- **gear display** (so you can see what gear is engaged while validating),
157
- **torque-management signal back to the ECU**, if your strategy uses one.
158
159
Two rules from [Configuring Outputs](Configuring_Outputs)
160
worth repeating, because breaking them is a classic first-config mistake:
161
162
- an output does nothing on its own — it must be **driven by a controller**;
163
- assign each output to **one** controller function only. The same output driven by two
164
  sources gives undefined behaviour.
165
166
Mode indicators, dash gauges, and the rest can wait until the car drives.
167
168
## Step 8 — Re-read your config before applying power
169
170
Before you leave USB safe mode, do a quick self-review. Most first-config problems are
171
one of these (the full list is under *Common conceptual errors* on
172
[Configuration Concepts](Configuration_Concepts)):
173
174
- two sources assigned to the same input;
175
- a CAN network defined but with no preset assigned to it;
176
- an output with no controller driving it;
177
- assuming a missing **mandatory** signal will be emulated (it will not — it faults);
178
- transmission and ECU presets on the wrong networks.
179
180
Save the config.
181
182
## Step 9 — Validate on the bench
183
184
Now bring up bench or vehicle power and check, in order. These mirror the checks in
185
[Getting Started](Getting_Started_with_IOcan#5-First-Power-Up-with-Vehicle-or-Bench-Power):
186
187
1. Connect BAT+, GND and KL15. Use a **current-limited supply** on a bench.
188
2. Assert KL15. IOcan should become visible in the tool and CAN traffic should appear.
189
3. Confirm **transmission parameters show up in the datalogger** and there are **no
190
   communication fault codes**.
191
4. **Current-draw sanity check:** with a full valve body installed and the engine off,
192
   current through IOcan should not exceed roughly **2 A**. A much higher figure
193
   means stop and investigate before going further.
194
5. Exercise your shift inputs and watch the requested vs. actual gear in the datalogger.
195
6. Check that your outputs behave — reverse light on in R, gear display tracking.
196
197
If any of these fail, the cause is almost always in wiring or in one of the steps above
198
— work back through them rather than pushing on.
199
200
## Step 10 — First controlled drive
201
202
Only once the bench checks are clean: move to a controlled environment and verify
203
behaviour under load — clean engagements, sensible shift points, torque handling during
204
shifts. Keep validating in small increments. This is the point where your first config
205
stops being a setup exercise and becomes a tune you refine.
206
207
---
208
209
## Where to go next
210
211
- [Configuration Concepts](Configuration_Concepts) — the model behind every step here
212
- [Configuring Inputs](Configuring_Inputs) and [Configuring Outputs](Configuring_Outputs) — the full reference for every IO type
213
- [Working with the CAN Bus](Working_with_the_CAN_Bus) — networks, presets, raw frames, timeouts
214
- [Supported transmissions](Supported_transmissions) — what is supported and transmission-specific notes
215
- [CAN Gateway Pinout](CAN_Gateway_Pinout) — pinouts for the physical side