OpenHaldex is an open-source Haldex AWD controller for Volkswagen and Audi Group vehicles using Haldex Generation 1, 2, 4 (PQ Chassis) and 5 (MQB) differentials. The full source and hardware files are published under the permissive MIT License, so anyone is free to use, modify, and redistribute them, and it incorporates MIT‑licensed upstream work — see Licensing.
Install is easy with the new harnesses for later PQ & MQB chassis:
Lift seat -> Plug in -> Drive it
Performance doesn't need to be expensive or complicated!
Starting from the codebase from A-Banging-Donk for Generation 1 differentials; OpenHaldexC6 has grown to adapt Generation 2, 4 and 5.
The firmware runs on an ESP32‑C6 and reads CAN bus messages from the vehicle, allowing the controller to modify or generate commands so the Haldex differential behaves exactly as you've configured.
It can operate using OEM CAN signals or it is also able to run in Standalone mode - this makes it perfect for conversions!
- Features
- Purchase
- Overview
- Hardware
- Supported Platforms
- Modes
- Expert Mode
- Installation
- Firmware Installation
- Low Power Mode
- CAN Sniffing
- Live Diagnostics
- Frame Editing
- PCB & Enclosure
- Acknowledgements
- Licensing
- Disclaimer
- Two TWAI (CAN) interfaces for reading and bridging CAN traffic
- Built‑in Wi‑Fi for on‑device configuration and diagnostics
- Multiple preset modes plus customisable mode profiles
- Tune your Haldex system directly from your phone via Wi-Fi
- Configurable inputs features onboard and external mode switching options
- Configurable outputs include two high-side drivers for handbrake and brake outputs (or PWM control for optional oil cooling!)
- SavvyCAN support via Wi‑Fi or Serial
- Wi‑Fi access point password protection, with long-press reset
- Force mode via CAN using hazard lights or TC button
- Adjustable LED brightness
- Live diagnostics: UDS (Gen5) and KWP2000‑over‑TP2.0 (Gen2/Gen4) with measurement scaling confirmed against VCDS
- Selectable CAN frames — enable/disable CAN messages per Generation from the Web UI
Assembled modules are available from Forbes Automotive if you do not wish to build one yourself:
➡ OpenHaldex C6 Controller – Forbes Automotive
OpenHaldex sits between your vehicle and the OEM Haldex controller. It can operate as a passthrough (OEM behaviour), or modify messages to request different amounts of differential lock.
This is the original source of Generation 2, 4 (including GM) and 5 logic - any forks or code copied from this project is NOT the work of Forbes Automotive and therefore we cannot support other work unless it is remains part of this project.
Supported generations: Gen1, Gen2, Gen4 and Gen5
Gen3 is currently unsupported.
The PCB is based around an ESP32‑C6 Mini (with Wi‑Fi) but has superior protection against ESD and transient voltages. It has a built-in fuse and uses quality automotive based components for a reliable system.
Two TWAI/CAN controllers are built into the PCB along with external IO control:
- External mode button
- On‑board RGB LED
- Brake / handbrake management (for Generation 1 systems) *Note: some brake/handbrake outputs may require a 10k pulldown resistor on certain platforms(!)
These two high‑side drivers for brake/handbrake could be repurposed for other functions like oil coolers!
This platform replaces the earlier Teensy (OpenHaldex T4) design to provide better wireless support and on‑device configuration.
- Generation 1 - PQ
- Generation 2 - PQ
- Generation 4 - PQ
- Generation 4 - GM
- Generation 4 - Ford (ongoing)
- Generation 5 - MQB (0CQ)
- Generation 5 - PQ (0AY)
The controller provides several preset modes along with a fully customisable 'Expert' mode':
| Mode | Behaviour | LED Colour |
|---|---|---|
| Stock | OEM behaviour | Red |
| FWD | Zero lock | Green |
| 7525 | 25% lock | Cyan |
| 6040 | 40% lock | Magenta |
| 5050 | 100% lock | Blue |
| Expert | User‑defined lock | White |
Expert mode allows lock targets to be configured based on speed and throttle setpoints using a table inside the Web UI. This is true full control over your Haldex system. No guesswork. You tune it and it'll do exactly what you want it to do, every time. It requires OEM CAN messages to be present for throttle/speed inputs.
Expert mode grid configuration interface within the OpenHaldex C6 UI.
Allow the controller to learn your Haldex by replacing the original methodology of approximating a lock percentage by cycling through all of the available lock percentages.
Use the 'Learn Haldex' in the Settings page and within one minute the controller will learn how to get EXACTLY the lock percentage you request. No more approximations, just exact values.
Certain Generation 5 controllers — specifically those running the 554K variant — use a different torque model to calculate the lock request. On these units, the standard learning process will not produce accurate results. Use the Fix Hunt option in the Settings page to ensure the correct torque model is used.
Modes can be changed using multiple interfaces:
On‑board button
Press the Mode button to cycle through modes.
Wi‑Fi
Use the Web UI at:
192.168.1.1 or openhaldex.local
CAN
See CAN Broadcast / Change Mode for the required Broadcast over CAN setting, CAN IDs and mode byte.
CAN — Force Mode (Hazards / TC Button)
Two optional force mode triggers are available via. CAN signals already present on the bus:
- Hazard lights — activating the hazard switch will trigger a force mode command
- TC button — pressing the traction control button can also trigger force mode
Both are optional and can be enabled in the Settings page. They allow mode changes from OEM controls without any additional wiring.
The same Broadcast over CAN setting enables both:
- External mode-change commands received by the controller on
0x6A0 - OpenHaldex state broadcast from the controller on
0x6B0
Note
Enabling these features will broadcast NEW CAN IDs the system might already look for(!). Caution should be exercised when using this feature(!).
Broadcast over CAN must be enabled in Settings, otherwise the controller will ignore the mode-change frame.
Send a standard 11-bit CAN frame to 0x6A0. Put the required mode value in Byte 0 / data[0]. If sending an 8-byte frame, set unused bytes to 0x00.
| CAN ID | Byte | Value | Mode |
|---|---|---|---|
0x6A0 |
0 / data[0] |
0x01 |
Stock |
0x6A0 |
0 / data[0] |
0x02 |
FWD |
0x6A0 |
0 / data[0] |
0x03 |
50:50 |
0x6A0 |
0 / data[0] |
0x04 |
60:40 |
0x6A0 |
0 / data[0] |
0x05 |
75:25 |
0x6A0 |
0 / data[0] |
0x06 |
Expert |
Default CAN ID:
0x6B0
The module broadcasts its current state on the CAN bus. This can be used by aftermarket ECUs or FIS displays to show current status
data[0] = reserved
data[1] = standalone flags (bitmask for Gen1/Gen2/Gen4/Gen5)
data[2] = processed haldex engagement (requested by firmware)
data[3] = lock target percent (actual lock, returned by differential)
data[4] = vehicle speed (kmh)
data[5] = mode_override_flag (legacy)
data[6] = current_mode_number (0...5)
data[7] = driver's pedal value (percentage: 0...100%)
- Connect to the access point OpenHaldex‑C6 (open by default).
- Open a browser and navigate to
192.168.1.1 or openhaldex.local
- Access the Web UI
From the Diagnostics page you can:
- Change the WiFi Name (SSID) — set any 1–32 character printable name (e.g.
MyHaldex,MK7-R). The AP restarts immediately on save. - Set / change the WiFi Password — WPA2, minimum 8 characters. Leave blank for an open network.
If you are locked out or forget your password, long-pressing the Mode button will clear the WiFi password and restore the open AP. The SSID is preserved (use Reset to Default in the UI if you want to revert the name to OpenHaldex-C6).
If the Wi‑Fi interface becomes unresponsive:
- Long‑press the
Modebutton to clear the WiFi password and restart the AP to an open state.
OpenHaldex C6 is designed to live on a permanent +12 V feed without flattening your battery. With Low Power Mode configured correctly the controller draws approximately:
| State | Current |
|---|---|
| Sleeping (car off, WiFi off, CAN quiet) | ~14 mA |
| Awake (CAN activity detected or WiFi client connected) | ~50 mA |
There are three layers of power saving. Each layer builds on the previous one and all are configured from the Settings page.
After 5 minutes with no WiFi clients connected and no CAN activity, the controller automatically shuts down the WiFi AP and turns off the LED. This runs regardless of any other Low Power settings.
As soon as CAN traffic resumes — typically the instant the car wakes up — WiFi is restored automatically. No user action required.
Enable the CAN Sleep toggle in Settings. When active:
- The ESP32-C6 CPU enters light sleep whenever FreeRTOS is idle, cutting CPU power consumption significantly.
- The TWAI (CAN) peripheral powers down during sleep but preserves its registers and receive queue across cycles, so no messages are lost on wake-up.
- The CAN transceiver chips remain powered and continue listening on the bus, so the first incoming frame wakes the controller instantly.
This mode gives the majority of power savings for most installs and is the recommended starting point.
Enable CAN Sleep (Aggressive) in Settings — everything from Layer 2 remains active, plus:
- The CAN transceiver chips are completely shut down (standby pin asserted). This eliminates the ~10 mA standby draw per transceiver.
- The CPU minimum clock drops to 10 MHz.
- WiFi AP transmit power is trimmed to reduce active-client current.
- Wake is interrupt-driven: a GPIO ISR on each CAN_RX line fires on the first bus edge and re-enables the transceivers within microseconds.
Use Aggressive mode when the car sits unused for days at a time and you want the absolute lowest standby current (~14 mA).
Low Power Mode requires one short calibration step the first time, because every car idles its CAN bus at a slightly different rate.
Step 1 — Measure your Sleeping CAN rate
- Park and lock the car. Wait 15 minutes or until the Chassis bus goes fully quiet.
- Stay connected to the OpenHaldex WiFi AP — the controller will remain awake while a client is connected.
- Open the Web UI → Settings and watch the Chassis fps and Haldex fps counters.
- Note the highest reading you see while the car is asleep. Most cars show 800 fps; some show a handful of fps from a periodic gateway heartbeat.
Step 2 — Set the wake threshold
- Set the LP Wake Threshold (fps) slider to a value slightly above the parked-bus reading — e.g. if the bus is quiet at 0 fps, set the slider to 5; if it idles at 8 fps, set the slider to 15.
Step 3 — Enable Sleep and Disconnect
- Enable CAN Sleep (and optionally CAN Sleep (Aggressive)) in Settings.
- Disconnect from the WiFi AP (close the browser / forget the network).
The controller will now sleep, drawing ~14 mA, and wake automatically whenever the CAN frame rate rises above the threshold — i.e. when you unlock or start the car. The LED, CAN chips and CPU are all off/reduced.
Note
Standalone mode: with no chassis bus, the Haldex ECU itself sleeps fully, so any Haldex-bus CAN traffic wakes the module regardless of the slider value.
Note
Switched-ignition installs: if the module is already powered off with the ignition, Low Power Mode saves little and is optional.
Tip
Recommended for quick installation (and removal) — typically <10 minutes on Generation 1 Controllers. The latest harnesses for Generation 5 are even simpler and you'll be experiencing your Haldex controller in less than 30 seconds:
- Lift the rear seat
- Split the factory 6-pin Haldex connector
- Install your new harness & OpenHaldexC6 Controller
- Drive it (you could put the seat back down too, if you want!)
For Generation 1 Controllers:
- Remove original connector and install the long end of the harness onto the differential.
- Route the long end along with the original connector back into the boot floor via. the OEM grommet
- Install and secure the OpenHaldexC6 Controller to the new harness, pairing it with the original plug
For full step‑by‑step instructions see the OpenHaldex Installation Guide.
▶ Installation demo (YouTube Short): https://youtube.com/shorts/iUkNh9NbyKY?si=IhgqLIi0WM8wXqe9
▶ Installation demo (YouTube Short): https://youtu.be/Wu-u-Dz1444
Warning
Modules sold without a harness include connector pins for manual wiring. This is a little harder and more involved than using the optional harness, but following the installation guide above it can still be completed easily. Give us a shout if you need a hand.
Gen1:
- Chassis Connector:
1J0‑973‑714 - Haldex Conneector:
1J0‑973‑814
Gen4>:
- Haldex Connector —
VW 1J0‑973‑713 - Vehicle Connector —
VW 1J0‑973‑813
Build this as a Y-branch harness between the two VW 8 or 6-pin connectors, with a long tail to the MX plug.
Routing summary:
-
Permanent power (Term30) and ground must also be branched to the OpenHaldex controller:
- Term30 -> MX Pin 1
- Ground -> MX Pin 2
-
Chassis CAN is taken from the Vehicle side and sent to the controller:
- Vehicle Pin 5 -> MX Pin 3 (Chassis CAN Low)
- Vehicle Pin 6 -> MX Pin 4 (Chassis CAN High)
-
Returned CAN from the controller then goes to the Haldex side:
- MX Pin 5 -> Haldex Pin 5 (Haldex CAN Low)
- MX Pin 6 -> Haldex Pin 6 (Haldex CAN High)
Generation 1 > 4:
- Vehicle Connector —
VW 1J0‑973‑714:
| Pin | Signal | Notes |
|---|---|---|
| 1 | Term15 | Pass-through: Vehicle → Haldex |
| 2 | Ground | Pass-through: Vehicle → Haldex and branch to MX Pin 2 |
| 3 | Brake Light | Pass-through: Vehicle → Haldex |
| 4 | Handbrake | Pass-through: Vehicle → Haldex |
| 5 | K-Line | Pass-through: Vehicle → Haldex |
| 6 | N/A | Not Used |
| 7 | Chassis Low | To MX Pin 3 (chassis side) |
| 8 | Chassis High | To MX Pin 4 (chassis side) |
- Haldex Connector —
VW 1J0‑973‑814:
| Pin | Signal | Notes |
|---|---|---|
| 1 | Term15 | Pass-through: Vehicle → Haldex |
| 2 | Ground | Pass-through: Vehicle → Haldex and branch to MX Pin 2 |
| 3 | Brake Light | Pass-through: Vehicle → Haldex |
| 4 | Handbrake | Pass-through: Vehicle → Haldex |
| 5 | K-Line | Pass-through: Vehicle → Haldex |
| 6 | N/A | Not Used |
| 7 | Chassis Low | To MX Pin 5 (Haldex side) |
| 8 | Chassis High | To MX Pin 6 (Haldex side) |
Generation 5:
- Vehicle Connector —
VW 1J0‑973‑813:
| Pin | Signal | Notes |
|---|---|---|
| 1 | Term15 | Pass-through: Vehicle → Haldex |
| 2 | Ground | Pass-through: Vehicle → Haldex and branch to MX Pin 2 |
| 3 | Term30 | Pass-through: Vehicle → Haldex and branch to MX Pin 1 |
| 4 | N/A | Not used |
| 5 | Chassis Low | To MX Pin 3 (chassis side) |
| 6 | Chassis High | To MX Pin 4 (chassis side) |
- Haldex Connector —
VW 1J0‑973‑713:
| Pin | Signal | Notes |
|---|---|---|
| 1 | Term15 | Pass-through: Vehicle → Haldex |
| 2 | Ground/MALT | Pass-through from Vehicle side |
| 3 | Term30 | Pass-through from Vehicle side |
| 4 | N/A | Not used |
| 5 | Haldex Low | From MX Pin 5 (Haldex side) |
| 6 | Haldex High | From MX Pin 6 (Haldex side) |
| Pin | Signal | Notes |
|---|---|---|
| 1 | Vbatt | +12 V |
| 2 | Ground/MALT | Ground |
| 3 | Chassis CAN Low | To chassis/ECU side |
| 4 | Chassis CAN High | To chassis/ECU side |
| 5 | Haldex CAN Low | To Haldex differential |
| 6 | Haldex CAN High | To Haldex differential |
| 7 | Switch Mode External | +12 V to activate |
| 8 | Brake Switch In | +12 V input |
| 9 | Brake Switch Out | Gen1 / 2 differentials only |
| 10 | Handbrake Switch In | +12 V input |
| 11 | Handbrake Switch Out | Gen1 differentials only |
Firmware can be installed directly from your browser using ESP Web-Tools.
This is the recommended method for most users.
- Connect the OpenHaldex-C6 controller to your computer using a data-capable USB-C cable.
- Open the firmware installer page: Module Software Updater
- Click Connect and select the OpenHaldex serial port.
- Click Install and follow the prompts.
- Wait for the firmware to flash and the device to reboot.
Note
Some USB-C cables are power-only and will not work for flashing.
If the device does not appear, try a different cable or USB port.
Adding more functionality couldn't be easier - you just need to know the feature you want and grab some CAN data to help implement it. Using the SavvyCAN interface, you can listen to the CAN messages to see what the car is talking about...
[Thanks to Maetro for this feature!]
Enable Analyzer Mode in the setup menu to capture CAN frames.
Warning
Enabling Analyzer Mode disables active Haldex control and returns the device to OEM 'pass-through' behaviour.
-
Connect to the OpenHaldex Wi‑Fi AP
-
In Settings, enable SavvyCAN via WiFi
-
In SavvyCAN:
Open 'Connection'
Add New Device Connection → Network Connection (GVRET)
- Enter:
IP: 192.168.1.1
Port: 23
- Set CAN speed:
500000
SavvyCAN can also connect directly over USB without needing Wi‑Fi:
- Connect the OpenHaldex controller via USB-C
- In Settings, enable SavvyCAN via Serial
- In SavvyCAN, add a new device connection → Serial Connection (GVRET)
- Select the correct COM port and set the speed to 500000
OpenHaldex can request data from the Haldex ECU for live measurement data and display it in the Web UI - just like a scan tool would. This occupies the module's diagnostic channel, it is controlled by a single Enable Live Diagnostics toggle in Settings that is off by default — however if you use VCDS, ODIS or another diagnostic tool, it will automatically turn itself off until the scan tool is removed.
When enabled, the controller automatically uses the correct protocol for the configured generation — there is nothing else to select.
Gets data from the Haldex ECU over ISO‑TP / UDS and decodes:
- Terminal voltage
- Control module temperature
- Clutch temperature
- Cooling‑fin temperature
- Clutch current, PWM and voltage
All scaling has been confirmed against VCDS by heat‑soaking a bench module and matching the reported values across the full temperature range.
The PQ‑platform controllers are diagnosed with KWP2000 tunnelled over VW TP2.0 rather than UDS. OpenHaldex opens the TP2.0 channel, starts a diagnostic session and reads the measuring blocks. Gen4 values are decoded and confirmed against VCDS:
- Oil temperature & clutch plate temperature
- Supply voltage
- Oil pressure
- Estimated torque
- Clutch valve duty (%) and current (A)
Raw measuring‑block bytes are also exposed so any remaining values can be characterised.
Note
If VCDS or other scan tools will not connect, turn this setting off as it may not cleanly pick up the VCDS request so it does not block the tool. Excessive CAN traffic can cause spurious dash errors.
From the Diagnostics page you can enable or disable OpenHaldex's editing of individual CAN frames for the selected Haldex generation.
- Each editable frame for the current generation is listed as a checkbox.
- Unchecking a frame leaves the car's original message untouched (clean pass‑through); checking it lets OpenHaldex modify or generate that frame.
- Changes apply immediately and are saved per generation.
- A Reset to Defaults button restores the generation's standard set.
This is useful for understanding which edited frame upsets a Haldex learn procedure or causes fault codes, for tailoring behaviour on unusual vehicles, or for adding/removing specific signals during development.
Note
Frame editing can apply to both 'Normal' and 'Standalone' modes and only to the currently selected generation.
Gerber files and enclosure designs are available in the PCB folder. You can use these to get your own units if you wish.
Pinout and functionality remain consistent across supported enclosure versions.
- Flashing LED indicator when CAN message transmission fails
- A Banging Donk — Original OpenHaldex project for Gen1 vehicles
- Chris (meatro) — OpenHaldex‑S3 — OpenHaldex‑S3 (MIT). Portions of the map editor / Expert Mode, CAN View, web UI, PlatformIO structure and API control derive from this project
- Arwid Vasilev — PCB redesign (V1.02)
- LVT Technologies — OTA update integration (now deprecated, but still appreciated)
OpenHaldex‑C6 is open source under the permissive MIT License. The firmware source and the hardware design files (Gerbers, schematics, PCB layouts and enclosure files) are published so you can freely build, inspect, modify, redistribute and fabricate a controller for any purpose, including commercial use, subject only to preserving the copyright and license notices.
- Forbes Automotive original code and hardware design files (Gen2 / Gen4 / Gen5 work, PCB Gerbers, schematics and enclosure files) — MIT License. See LICENSE.md.
- OpenHaldex‑S3 derived portions (Chris / meatro) — MIT. These remain under MIT; the MIT notice must be preserved.
- Original OpenHaldex (Gen1, ABangingDonk).
Full attribution and upstream license texts are recorded in THIRD_PARTY_NOTICES.md. If you redistribute source or binaries, keep the third‑party notices and license texts with the distribution.
In short: use it, build it, modify it, redistribute it — that's all encouraged. Just keep the copyright and license notices intact, and keep the OpenHaldex‑C6 banner in the UI.
Caution
This device modifies Haldex behaviour and should only be used off‑road or on a closed course.
The unit may behave unpredictably and could increase drivetrain wear.
Use at your own risk. Forbes Automotive is not responsible for damages resulting from the use of this device or software.






