8HP OEM Gateway » History » Version 1
Adam Klama, 06/21/2026 06:44 PM
| 1 | 1 | Adam Klama | # 8HP OEM Gateway |
|---|---|---|---|
| 2 | |||
| 3 | ## Overview |
||
| 4 | The **8HP OEM Gateway** (app name *Gateway BMW OEM*) is a controller that lets you |
||
| 5 | keep a **factory BMW / ZF 8HPxx automatic** and its original **TCU (mechatronics)** |
||
| 6 | while the engine is run by a standalone / aftermarket ECU. The TCU keeps doing the |
||
| 7 | shifting; the gateway gives it the **engine torque** and other engine signals it |
||
| 8 | expects, and reports gear state back to the car. |
||
| 9 | |||
| 10 | Use it when you have swapped the engine management (or the whole engine) but want to |
||
| 11 | retain the OEM 8HP behaviour, shift quality and diagnostics. It runs on a **CANbus |
||
| 12 | Gateway** (`CGW…`) or **IOcan** (`IOC…`) device. For the standalone alternative that |
||
| 13 | drives an 8HP without its TCU, see the GCU `ZF 8HPxx` driver. |
||
| 14 | |||
| 15 | > This is an **OEM gateway** driver. Read |
||
| 16 | > [Controllers → OEM gateway drivers](Controllers#oem-gateway-drivers) for the |
||
| 17 | > shared concepts (engine-torque estimation, DBW Modifier, fuel model) — this page |
||
| 18 | > covers the 8HP specifics and the full field/table reference. |
||
| 19 | |||
| 20 | ## Supported transmissions |
||
| 21 | ZF **8HP45 / 8HP50 / 8HP70 / 8HP90** and related variants as fitted to BMW F- and |
||
| 22 | G-series, plus **Alpina** calibrations. The correct **generation** is selected by |
||
| 23 | the paired CAN preset (see [CAN presets](#can-presets-to-pair)). See |
||
| 24 | [8HPxx](8HPxx) and [Supported transmissions](Supported_transmissions). |
||
| 25 | |||
| 26 | ## Prerequisites & hardware |
||
| 27 | - A **factory 8HP TCU** on the transmission, powered and woken (the gateway drives |
||
| 28 | **Transmission wakeup**). |
||
| 29 | - The transmission's drive CAN wired to a [CAN bus](Working_with_the_CAN_Bus) on the |
||
| 30 | device. The 8HP TCU lives on **PT-CAN** or **PT-CAN2** depending on platform — pick |
||
| 31 | the matching preset. |
||
| 32 | - Engine signals available to the device (from the ECU over CAN, or on physical |
||
| 33 | pins) — at minimum engine **RPM** and a **torque** source; see [Inputs](#inputs). |
||
| 34 | - For paddle/selector control, an OEM or emulated shifter — see the |
||
| 35 | [BMW F-Series GWS pinout](BMW_F_Series_Gear_Selector_Switch_(GWS)_Pinout). |
||
| 36 | |||
| 37 | Wiring references: [8HPxx connections](8HPxx_connections), |
||
| 38 | [BMW F30 Gateway connection guide](BMW_F30_Gateway_connection_guide), |
||
| 39 | [CAN Gateway Pinout](CAN_Gateway_Pinout), [OBD Pinout](OBD_Pinout). |
||
| 40 | |||
| 41 | ## Add it in the app |
||
| 42 | 1. On a CANbus Gateway / IOcan configuration, add the **8HP OEM Gateway** controller. |
||
| 43 | 2. Add a [CAN bus](Working_with_the_CAN_Bus) for the transmission and pair the |
||
| 44 | matching **transmission-emulation preset** ([list below](#can-presets-to-pair)). |
||
| 45 | 3. Assign the engine **[inputs](#inputs)** (RPM, throttle/pedal, MAP, temperatures, |
||
| 46 | and a torque source). |
||
| 47 | 4. Choose a **[Torque calculation method](#parameters)** and fill the |
||
| 48 | **[tables](#calibration-tables-maps)** it needs. |
||
| 49 | 5. Route the **[outputs](#outputs)** you need (gear display, reverse light, vehicle |
||
| 50 | speed, torque-management handshake) to CAN or pins. |
||
| 51 | |||
| 52 | ## Inputs |
||
| 53 | Assign each signal to a source ([CAN object](CAN_Object_Input), |
||
| 54 | [CAN frame](CAN_Bus_Input), or a pin). Mandatory signals missing → the controller |
||
| 55 | faults and the transmission will not run; optional signals fall back to an internal |
||
| 56 | value (see [Configuration Concepts](Configuration_Concepts#inputs)). |
||
| 57 | |||
| 58 | ### Engine parameters |
||
| 59 | | Signal | Unit | Notes | |
||
| 60 | |---|---|---| |
||
| 61 | | **Engine RPM** | 1/min | Mandatory. | |
||
| 62 | | **Throttle position** | % | 0–100. | |
||
| 63 | | **Pedal position** | % | 0–100. | |
||
| 64 | | **Manifold pressure** | kPa | For air-model torque. | |
||
| 65 | | **Atmospheric pressure** | kPa | Barometric reference. | |
||
| 66 | | **Coolant temperature** | °C | | |
||
| 67 | | **Oil temperature** | °C | | |
||
| 68 | | **Lambda** | λ | Mixture correction for torque. | |
||
| 69 | |||
| 70 | ### Engine torque |
||
| 71 | Used directly by the **External Inputs** method and as a sanity reference for the |
||
| 72 | others. |
||
| 73 | |||
| 74 | | Signal | Unit | Notes | |
||
| 75 | |---|---|---| |
||
| 76 | | **No intervention** | Nm | Driver-demanded torque before traction/stability cuts. | |
||
| 77 | | **Intervention** | Nm | Actual torque after intervention. | |
||
| 78 | | **Max** | Nm | Upper limit reported to the TCU. | |
||
| 79 | | **Min** | Nm | Lower limit. | |
||
| 80 | | **Loses** | Nm | Friction / accessory losses. | |
||
| 81 | |||
| 82 | ### Chassis signals |
||
| 83 | | Signal | Unit | Notes | |
||
| 84 | |---|---|---| |
||
| 85 | | **Brake switch** | on/off | Needed for park/drive interlocks. | |
||
| 86 | | **Brake pressure** | — | Optional analogue brake input. | |
||
| 87 | | **Vehicle speed** | km/h | Or derived from the wheel speeds below. | |
||
| 88 | | ↳ Front left / right | km/h | Per-wheel speed. | |
||
| 89 | | ↳ Rear left / right | km/h | Per-wheel speed. | |
||
| 90 | | **KL15 / Ignition** | on/off | Wake / ignition state. | |
||
| 91 | | **Drive Mode** | enum | Comfort / Sport / etc. drive-mode select. | |
||
| 92 | |||
| 93 | ## Outputs |
||
| 94 | Outputs do nothing until routed to a CAN message or a pin and driven by this |
||
| 95 | controller (see [Configuring Outputs](Configuring_Outputs)). Each can feed several |
||
| 96 | consumers at once via a [splitter output](Splitter_Output). |
||
| 97 | |||
| 98 | ### Torque management (handshake to the ECU) |
||
| 99 | | Signal | Notes | |
||
| 100 | |---|---| |
||
| 101 | | **Engine torque** | Torque the TCU is requesting/expects. | |
||
| 102 | | **Cut request** | Torque-cut request during an upshift. | |
||
| 103 | | **Blip request** | Throttle-blip request during a downshift. | |
||
| 104 | |||
| 105 | ### Transmission parameters |
||
| 106 | | Signal | Unit | Notes | |
||
| 107 | |---|---|---| |
||
| 108 | | **Current gear** | gear | | |
||
| 109 | | **Current gear / park** | gear | Includes P. | |
||
| 110 | | **Next gear** | gear | Target gear during a shift. | |
||
| 111 | | **Gearbox mode** | enum | R / P / N / D / M. | |
||
| 112 | | **TCC slip** | 1/min | Torque-converter clutch slip. | |
||
| 113 | | **Gear ratio** | :1 | Active ratio. | |
||
| 114 | | **Turbine speed** | 1/min | Input-shaft speed. | |
||
| 115 | | **Tailshaft speed** | 1/min | Output-shaft speed. | |
||
| 116 | | **Transmission temperature** | °C | | |
||
| 117 | | **Vehicle speed** | km/h | | |
||
| 118 | | **Wheel RPM** | 1/min | | |
||
| 119 | | **Reverse light** | on/off | | |
||
| 120 | | **Transmission wakeup** | on/off | Keeps the TCU awake. | |
||
| 121 | |||
| 122 | ## Parameters |
||
| 123 | |||
| 124 | ### Engine torque calculation |
||
| 125 | | Parameter | Meaning | Unit | Range | Default | |
||
| 126 | |---|---|---|---|---| |
||
| 127 | | **Torque calculation method** | How engine torque is produced — see [methods](Controllers#engine-torque-estimation) | enum | Torque Tables · External Inputs · Internal Calculation · Fuel Calculation · Fuel Calculation v2 · Fuel Only Calculation · Air only calculation | Torque Tables | |
||
| 128 | | **Idle RPM** | Expected idle speed | RPM | 0–20000 | 800 | |
||
| 129 | | **Rev limiter** | Engine rev limit | RPM | 0–20000 | 6500 | |
||
| 130 | | **Cylinder count** | Number of cylinders | — | 1–20 | 6 | |
||
| 131 | | **Displacement** | Engine displacement | cm³ | 1–20000 | 3000 | |
||
| 132 | | **Compression ratio** | Geometric compression | :1 | 1–20 | 10.0 | |
||
| 133 | | **Throttle diameter** | Throttle-body bore | mm | 1–20000 | 90 | |
||
| 134 | | **Maximum MAP value** | Full-scale manifold pressure | kPa | 1–2000 | 300 | |
||
| 135 | |||
| 136 | ### Primary injector / Secondary injector |
||
| 137 | The secondary set is optional (staged/auxiliary injection) and has the same fields. |
||
| 138 | |||
| 139 | | Parameter | Meaning | Unit | Range | Default | |
||
| 140 | |---|---|---|---|---| |
||
| 141 | | **Fuel type** | Fuel selection | enum | Gasoline · Flex Fuel · Ethanol 100 · Ethanol 85 · Methanol · Diesel · User defined | Gasoline | |
||
| 142 | | **Injector pulse width** | Live injection-time input | — | — | — | |
||
| 143 | | **Injector size** | Static flow | cm³/min | 1–20000 | 600 | |
||
| 144 | | **Nominal injector pressure** | Rating pressure | kPa | 1–200000 | 350 | |
||
| 145 | | **Deadtime mode** | Source of injector dead time | enum | Do not use · Input · User defined | Do not use | |
||
| 146 | | **Deadtime input** | Live dead-time input | — | — | — | |
||
| 147 | | **Fuel pressure** | Live fuel-pressure input | — | — | — | |
||
| 148 | | **Fuel temperature** | Live fuel-temperature input | — | — | — | |
||
| 149 | | **Flex Fuel** | Live ethanol-content input | — | — | — | |
||
| 150 | |||
| 151 | ### Speed calculation |
||
| 152 | | Parameter | Meaning | Unit | Range | Default | |
||
| 153 | |---|---|---|---|---| |
||
| 154 | | **Diff ratio** | Final-drive ratio | :1 | 1–20 | 2.7 | |
||
| 155 | | **Wheel diameter** | Rolling diameter | mm | 1–20000 | 640 | |
||
| 156 | |||
| 157 | ### DBW Modifier |
||
| 158 | Clutchless-shift throttle override — see [concept](Controllers#dbw-modifier). |
||
| 159 | |||
| 160 | | Parameter | Meaning | Unit | Range | Default | |
||
| 161 | |---|---|---|---|---| |
||
| 162 | | **Mode** | Enable the modifier | enum | No DBW Modifier · DBW Modifier | No DBW Modifier | |
||
| 163 | | **PPS A in / B in** | Raw pedal-sensor inputs | — | — | — | |
||
| 164 | | **PPS A out / B out** | Modified pedal outputs to the throttle | — | — | — | |
||
| 165 | | **Cut time limit** | Max duration of an upshift cut | ms | 1–20000 | 200 | |
||
| 166 | | **Blip time limit** | Max duration of a downshift blip | ms | 1–20000 | 200 | |
||
| 167 | |||
| 168 | ## Calibration tables (maps) |
||
| 169 | All tables are entered and interpolated as described in |
||
| 170 | [Scaling and Maps](Scaling_and_Maps). Fill only the tables required by your |
||
| 171 | **Torque calculation method** plus the DBW tables if the modifier is enabled. |
||
| 172 | |||
| 173 | ### DBW Modifier — Cut (upshift) |
||
| 174 | Axes: **Gear × Torque**. |
||
| 175 | |||
| 176 | | Table | Calibrates | |
||
| 177 | |---|---| |
||
| 178 | | **Limit pos** | Pedal/throttle target during the cut | |
||
| 179 | | **Ramp in time** | How fast the cut is applied | |
||
| 180 | | **Ramp out time** | How fast torque is restored | |
||
| 181 | |||
| 182 | ### DBW Modifier — Blip (downshift) |
||
| 183 | Axes: **Gear × ΔRPM** (rev-match need). |
||
| 184 | |||
| 185 | | Table | Calibrates | |
||
| 186 | |---|---| |
||
| 187 | | **Target pos** | Pedal/throttle target for the blip | |
||
| 188 | | **Ramp in time** | How fast the blip is applied | |
||
| 189 | | **Ramp out time** | How fast it is removed | |
||
| 190 | | **Time** | Blip hold duration | |
||
| 191 | |||
| 192 | ### Torque tables (method: *Torque Tables*) |
||
| 193 | | Table | Calibrates | Axes | |
||
| 194 | |---|---|---| |
||
| 195 | | **Engine torque TPS-RPM** | Torque from throttle and RPM | TPS × RPM | |
||
| 196 | | **Engine torque MAP-RPM** | Torque from manifold pressure and RPM | MAP × RPM | |
||
| 197 | |||
| 198 | ### VE tables (method: *Internal / Air* calculation) |
||
| 199 | | Table | Calibrates | Axes | |
||
| 200 | |---|---|---| |
||
| 201 | | **VE Speed-Density** | Volumetric efficiency vs load and RPM | MAP × RPM | |
||
| 202 | | **VE Alpha-N** | Volumetric efficiency vs throttle and RPM | TPS × RPM | |
||
| 203 | | **VE Blending** | Blend between Speed-Density and Alpha-N | MAP (1D) | |
||
| 204 | |||
| 205 | ### Drag / efficiency maps |
||
| 206 | Correct the estimate for engine braking and mixture (1-row maps). |
||
| 207 | |||
| 208 | | Table | Calibrates | Axis | |
||
| 209 | |---|---|---| |
||
| 210 | | **Engine speed drag map** | Engine-braking torque vs RPM | RPM | |
||
| 211 | | **Throttle drag map** | Drag correction vs throttle | TPS | |
||
| 212 | | **Manifold pressure drag map** | Drag correction vs MAP | MAP | |
||
| 213 | | **Lambda efficiency** | Torque efficiency vs lambda | λ | |
||
| 214 | |||
| 215 | ### Injector / fuel tables (methods: *Fuel* calculation) |
||
| 216 | The primary and secondary injectors each have the same four tables. |
||
| 217 | |||
| 218 | | Table | Calibrates | Axes | |
||
| 219 | |---|---|---| |
||
| 220 | | **Deadtime** | Injector dead time | Voltage × Fuel pressure | |
||
| 221 | | **Fuel density** | Density vs ethanol and temperature | Flex fuel × Temperature | |
||
| 222 | | **Stochiometric AFR** | Stoich AFR vs ethanol | Flex fuel (1D) | |
||
| 223 | | **Fuel energy** | Energy content vs ethanol | Flex fuel (1D) | |
||
| 224 | |||
| 225 | ## CAN presets to pair |
||
| 226 | Pair the driver with the **transmission-emulation preset** for your platform and |
||
| 227 | generation (Transmission Emulation category). The preset implements the on-wire 8HP |
||
| 228 | protocol on the chosen bus; the driver provides the signals. |
||
| 229 | |||
| 230 | | Platform | PT-CAN | PT-CAN2 | |
||
| 231 | |---|---|---| |
||
| 232 | | **F-series 8HP, Gen 1** | BMW 8HP PT_CAN Fxx Gen1 | BMW 8HP PT_CAN2 Fxx Gen1 | |
||
| 233 | | **F-series 8HP, Gen 2** | BMW 8HP PT_CAN Fxx Gen2 | BMW 8HP PT_CAN2 Fxx Gen2 | |
||
| 234 | | **G-series 8HP, Gen 2** | BMW 8HP PT_CAN Gxx Gen2 | BMW 8HP PT_CAN2 Gxx Gen2 | |
||
| 235 | | **G-series 8HP, Gen 3** | BMW 8HP PT_CAN Gxx Gen3 | BMW 8HP PT_CAN2 Gxx Gen3 | |
||
| 236 | |||
| 237 | Also available: **BMW PT_CAN Forwarder** and **BMW ISO TP Gateway** (diagnostic/ |
||
| 238 | bridging). BMW **DKG** (dual-clutch) uses the same gateway with the *DKG* presets and |
||
| 239 | is documented with the DCT drivers. |
||
| 240 | |||
| 241 | ## Example — engine-swapped F30 with an aftermarket ECU |
||
| 242 | 1. Add the **8HP OEM Gateway** on a CANbus Gateway; add a CAN bus on **PT-CAN** and |
||
| 243 | pair **BMW 8HP PT_CAN Fxx Gen1**. |
||
| 244 | 2. Map **Engine RPM**, **Throttle**, **Pedal**, **MAP**, **Coolant/Oil temp** from |
||
| 245 | the ECU's CAN stream via [CAN Object Inputs](CAN_Object_Input). |
||
| 246 | 3. Set **Torque calculation method = Torque Tables**; fill **Engine torque TPS-RPM** |
||
| 247 | from the engine's torque data. Set **Cylinder count**, **Displacement**, **Rev |
||
| 248 | limiter**. |
||
| 249 | 4. Set **Diff ratio** and **Wheel diameter** so **Vehicle speed** reads correctly. |
||
| 250 | 5. Enable the **DBW Modifier**, wire **PPS A/B in** from the pedal and **PPS A/B out** |
||
| 251 | to the throttle, and fill the **Cut** and **Blip** tables. |
||
| 252 | 6. Route **Current gear**, **Gearbox mode** and **Reverse light** to the cluster/CAN. |
||
| 253 | |||
| 254 | ## Troubleshooting |
||
| 255 | - **Transmission won't engage / faults at start:** a mandatory input (RPM or a torque |
||
| 256 | source) is unassigned — check [input rules](Configuration_Concepts#inputs). |
||
| 257 | - **Harsh or lazy shifts:** the TCU is getting a poor **engine torque** value — verify |
||
| 258 | the torque method and its tables; cross-check against the torque inputs. |
||
| 259 | - **Shifts but no rev-match / driveline shock on manual shifts:** enable and calibrate |
||
| 260 | the **DBW Modifier** Cut/Blip tables. |
||
| 261 | - **Wrong road speed:** check **Diff ratio** and **Wheel diameter**. |
||
| 262 | - **TCU keeps sleeping:** route and drive **Transmission wakeup**. |
||
| 263 | |||
| 264 | ## Related |
||
| 265 | - [Controllers](Controllers) — driver catalogue and shared OEM-gateway concepts |
||
| 266 | - [OEM PDK Gateway](OEM_PDK_Gateway) — the same driver family for Porsche PDK |
||
| 267 | - [8HPxx](8HPxx) · [8HPxx connections](8HPxx_connections) · |
||
| 268 | [Supported transmissions](Supported_transmissions) |
||
| 269 | - [Working with the CAN Bus](Working_with_the_CAN_Bus) · |
||
| 270 | [Scaling and Maps](Scaling_and_Maps) |