Voron CANBus Setup Guide — Simplify Your Toolhead Wiring
Firmware Electronics CANBus
CANBus (Controller Area Network) is the gold standard for Voron toolhead wiring in 2025. Instead of running 10+ individual wires from the main controller board to the toolhead — heater cartridge, thermistor, fans, stepper motor, endstop, probe, LEDs — you run just four wires: 24V power, ground, CAN_H, and CAN_L. The result is a cleaner build, easier maintenance, and dramatically reduced wire drag on the toolhead. Last updated: May 2025.
This guide covers everything you need to set up CANBus on your Voron: the required components (U2C adapter, EBB toolhead board, cable), complete wiring diagrams, Klipper firmware configuration for both the adapter and toolhead board, UUID discovery, flashing over CAN, integration with Mainsail/Fluidd, and troubleshooting the most common issues.
Prerequisite: You should have Klipper installed on your SBC and a basic understanding of Klipper's firmware configuration. If you're new to Klipper, start with our Klipper setup guide.
Why CANBus? The Voron Advantage
Traditional Voron wiring runs a thick "umbilical" cable from the mainboard to the toolhead. On a V2.4, this cable has to flex and bend as the toolhead moves across the entire build volume. The cable creates drag that affects print quality — especially at high speeds and accelerations. It's also a pain to troubleshoot: if one wire breaks inside the cable chain, you have to re-run the entire bundle.
CANBus solves this by putting a secondary MCU on the toolhead itself. This toolhead board handles all the local I/O — reading the thermistor, controlling the hotend heater, running the part cooling fan, driving the extruder stepper, and processing the probe signal — and communicates with the main SBC over just two data wires (CAN_H and CAN_L). The mainboard only needs to provide 24V power.
The benefits are real:
- Fewer wires in the cable chain: 4 wires instead of 14+. Less drag, less friction, fewer failure points.
- Cleaner cable management: A simple 4-wire shielded cable is easier to route and hide.
- Easier hotend swaps: Unplug the CAN cable and the toolhead is free. No need to disconnect individual wires from the mainboard.
- Reduced electrical noise: Stepper motor wires and heater wires run near each other in the traditional bundle. CANBus separates the data lines (shielded twisted pair) from power, reducing EMI.
- Scalability: Add more CAN devices later (enclosure sensors, filament runout, LED controllers) without running new wires all the way to the mainboard.
Components You'll Need
A CANBus setup has three main components:
1. U2C Adapter (USB to CAN)
The U2C (USB-to-CAN) adapter connects to your SBC via USB and bridges the SBC's USB bus to the CAN bus network. It handles the CAN protocol conversion so Klipper can communicate with toolhead boards over CAN.
- BTT U2C V2.1: The most popular choice. Uses an STM32G0B1 microcontroller. Has screw terminals for CAN_H/CAN_L, a jumper for 120 ohm termination resistor, and a 5V output (useful for powering an ADXL345 over the same CAN bus). ~$15 from AliExpress.
- Mellow U2C: Similar to the BTT version. Uses an STM32F072. Slightly cheaper at ~$12. Compatible with all standard EBB boards.
- Fysetc UC2: Another option. ~$10. Less common but works fine.
2. EBB Toolhead Board (CAN Toolhead MCU)
This is the MCU that sits on your toolhead and controls all the local components. It receives commands over CAN and sends back sensor data.
- BTT EBB36 V1.2 (CAN V2.2): The community standard. 36x36mm form factor, fits most Voron toolheads. Has integrated CAN transceiver, TMC2209 stepper driver (for extruder), thermistor input, heater FET (up to 3A), fan headers (2x), probe input, endstop input, RGB LED header, and ADXL345 accelerometer header. ~$25 from AliExpress.
- BTT EBB42 V1.2: Larger (42x42mm), more I/O. Useful if you need additional fan channels or sensor inputs. ~$28.
- Mellow FLY-SHT36 V2 (or SHT42): Direct competitor to the BTT EBB series. Similar specs, slightly different pin layout. ~$22-26. The SHT36 has a removable terminal block which some builders prefer.
- Mellow FLY-SHT-42 V2 Pro: Higher-end option with integrated accelerometer and more robust connectors. ~$30.
3. CAN Cable
A simple 4-wire cable with shielding. The standard wire colors and signals:
- Red: 24V (power for toolhead)
- Black: GND
- White or Yellow: CAN_H (twisted with CAN_L)
- Green or Blue: CAN_L (twisted with CAN_H)
Use 20-22 AWG wire for power (24V/GND) and 22-24 AWG twisted pair for CAN_H/CAN_L. You can buy pre-made CAN cables on AliExpress (look for "Voron CAN cable 4-pin") or make your own using silicone wire and a shielded twisted pair. Pre-made cables with connectors run about $5-8 for 1.5m.
Wiring Diagram
Here's the complete wiring topology for a Voron CANBus setup:
Power Path:
PSU (24V) -> Mainboard (power input) -> U2C adapter (24V input) -> CAN cable (red/black) -> EBB toolhead board (24V input)
Data Path:
SBC (USB) -> U2C adapter (USB) -> U2C (CAN_H/CAN_L screw terminals) -> CAN cable (white/green) -> EBB toolhead board (CAN_H/CAN_L)
Detailed connections:
| SBC | U2C Adapter | CAN Cable | EBB Toolhead |
|---|---|---|---|
| USB port | USB-C (data + power) | — | — |
| — | 24V IN (+) | Red (24V) | 24V IN (+) |
| — | GND (-) | Black (GND) | GND (-) |
| — | CAN_H terminal | White (CAN_H) | CAN_H pin |
| — | CAN_L terminal | Green (CAN_L) | CAN_L pin |
Termination resistor: CANBus requires a 120 ohm resistor at both ends of the bus. The U2C adapter has a jumper to enable its built-in 120 ohm termination. The EBB36/EBB42 also has a jumper for termination. Enable termination on both — the U2C is one end of the bus, the EBB board is the other end. If you add more CAN devices between them, do not enable termination on those devices.
Klipper CANBus Configuration
Step 1: Enable CAN in Klipper Firmware on the U2C
First, you need to flash the U2C adapter with Klipper firmware that has CAN bus support enabled.
cd ~/klippermake menuconfig- Set: Microcontroller = STM32G0B1 (for BTT U2C V2.1) or STM32F072 (for Mellow U2C)
- Set: Communication interface = USB to CAN bus bridge
- Set: CAN bus interface = CAN bus (on PB0/PB1) (this varies by board — check your board's Klipper config)
- Leave CAN bus speed at default (1000000 = 1 Mbps)
maketo build the firmware- Flash via DFU or SD card (varies by U2C version — BTT U2C V2.1 uses DFU: hold BOOT button, plug in USB,
dfu-util -a 0 -D out/klipper.bin --dfuse-address 0x08000000:leave)
Step 2: Flash the EBB Toolhead Board
The EBB board also needs Klipper firmware built for CAN.
cd ~/klipper && make menuconfig- Set: Microcontroller = STM32G0B1 (for EBB36/42 V1.2) or STM32F072 (for older versions)
- Set: Communication interface = CAN bus (on PB0/PB1) for EBB36/42
- Set: CAN bus speed = 1000000 (1 Mbps — must match the U2C setting)
make- Flash the EBB board via DFU (same process as U2C: BOOT button + USB + dfu-util)
Alternative: Flash over CAN after initial DFU flash. Once the EBB board has been initially flashed via DFU (with CAN interface enabled), subsequent firmware updates can be sent over the CAN bus itself. This is convenient once the board is installed in your printer.
Step 3: UUID Discovery
Each CAN device has a unique UUID. You need to find it before you can configure it in Klipper.
Run the discovery script:
~/klipper/scripts/flash_can.py -q
This queries the CAN bus and lists all connected devices. Output looks like:
Found canbus_uuid=abcdef123456, Application: Klipper
Copy this UUID — you'll need it for the printer.cfg. If the script returns nothing, check:
- The U2C adapter is connected and powered (LED should be on)
- Both 120 ohm termination resistors are enabled
- The CAN cable is wired correctly (CAN_H to CAN_H, CAN_L to CAN_L)
- Your SBC has the CAN interface up:
sudo ip link set can0 up type can bitrate 1000000
Step 4: Configure printer.cfg for CAN
Add the following to your printer.cfg:
[mcu canbus]
serial: canbus_uuid:abcdef123456
canbus_interface: can0
Replace abcdef123456 with the UUID from Step 3. The canbus_interface: can0 tells Klipper which CAN interface to use (default is can0 if you only have one U2C adapter).
If you have multiple CAN devices (e.g., a second toolhead or an accelerometer on CAN), add additional [mcu] sections with their respective UUIDs:
[mcu ebb36]
serial: canbus_uuid:abcdef123456
canbus_interface: can0
[mcu adxl345_can]
serial: canbus_uuid:7890def45678
canbus_interface: can0
After updating printer.cfg, run RESTART in the Klipper console. If the connection is successful, you'll see the EBB board appear in the Mainsail dashboard with its MCU temperature and status.
Step 5: Flash Firmware Over CAN
Once the EBB board is on the CAN bus, you can flash firmware updates without physical access:
python3 ~/klipper/scripts/flash_can.py -u abcdef123456
This sends the out/klipper.bin file (from make) to the device over CAN. The device receives it, writes it to flash, and reboots with the new firmware. No DFU jumpers needed.
Integrating with Mainsail / Fluidd
Once CANBus is configured in Klipper, Mainsail and Fluidd detect the additional MCU automatically. You'll see the EBB board listed alongside your main controller board in the dashboard. The toolhead board's sensors (MCU temperature, voltages) show up as additional data points.
For the EBB36/42, you can also monitor the board's unique features:
- Neopixel/RGB LED: Configure via
[neopixel ebb_led]section in printer.cfg. Great for status indicators (red = heating, green = ready, blue = printing). - Built-in ADXL345: Some EBB versions have an onboard accelerometer. Add
[adxl345]to the EBB's MCU section and run input shaper calibration directly on the toolhead — no separate wiring needed. - Fan control: The EBB's fan headers are independently controllable. Assign them in printer.cfg as
[heater_fan hotend_fan]and[fan part_cooling_fan].
Common Issues and Troubleshooting
- UUID not found (flash_can.py -q returns nothing): Check that the CAN interface is up:
sudo ip link set can0 up type can bitrate 1000000. Verify both termination resistors are enabled. Check wiring — CAN_H and CAN_L crossed is the most common mistake. Test continuity with a multimeter. - Klipper can't connect to MCU after adding UUID: Make sure the UUID is entered correctly (all lowercase, no spaces). Verify the EBB board is powered (24V connected). Use
dmesg | grep canon the SBC to check for CAN bus errors. - Bitrate mismatch: The U2C and EBB must use the same bitrate. If you flashed the U2C with 1 Mbps but the EBB with 500 Kbps (default on some boards), they won't communicate. Rebuild and re-flash both with the same speed. 1 Mbps (1000000) is recommended.
- Intermittent disconnects during printing: Usually a power issue. The CAN cable's 24V wires must be thick enough (20 AWG minimum) to carry the current without voltage drop. Check that the EBB board is getting 24V ± 10% at the board — measure with a multimeter during a print cycle. Voltage sag below 20V causes the board to brown out and disconnect.
- CAN bus errors in dmesg:
dmesg | grep canshowing "bit error" or "stuff error" indicates electrical noise on the bus. Use shielded twisted pair for the CAN_H/CAN_L wires. Keep the CAN cable away from stepper motor cables and the hotend heater power wires. - EBB board gets very hot: The TMC2209 stepper driver on the EBB gets warm during extrusion. If it's too hot to touch, check that the extruder motor current isn't set too high (typical Voron extruder: 0.4-0.6A RMS). Add a small heatsink or fan over the EBB board if needed.
- Can't flash EBB over CAN: The board must already have Klipper firmware with CAN interface enabled (flashed via DFU first). After the initial DFU flash, subsequent updates work over CAN. If CAN flashing fails, re-flash via DFU with the board connected directly to USB.
Cost Comparison: China-Direct vs US/EU
One of the best reasons to use CANBus on your Voron is the dramatically lower cost when sourcing from China. Here's what you'll pay:
| Component | China Direct (AliExpress) | US/EU Retailer | Savings |
|---|---|---|---|
| BTT U2C V2.1 | $12-15 | $35-45 | ~65% |
| BTT EBB36 V1.2 | $22-28 | $50-65 | ~55% |
| FLY-SHT36 V2 | $20-26 | $45-60 | ~55% |
| Pre-made CAN cable 1.5m | $5-8 | $12-20 | ~55% |
| Total CANBus upgrade | $40-50 | $100-130 | ~55-60% |
That's a savings of $50-80 for exactly the same hardware. The BTT and Mellow components sold by US retailers are literally the same units from the same factories — the China-direct price is the real price.
CANBus vs Traditional Wiring: Which Is Right for You?
CANBus is the modern choice, but traditional wiring is still perfectly valid. Here's how to decide:
- New build: Go CANBus. The small additional cost ($40-50) saves hours of wiring and makes future maintenance much easier. Every new Voron build in 2025 should use CANBus unless you already have a traditional mainboard.
- Existing printer upgrade: Worth it if you frequently swap hotends or are rebuilding your toolhead anyway. If your current wiring is working fine, there's no urgent need to switch — but you'll appreciate the cleaner cable chain when you do.
- Budget build: CANBus components from China direct are cheap enough that the upgrade is negligible in a $700+ build. Skip it only if you already have a traditional mainboard with enough stepper channels.
- Toolhead board choice: The EBB36 is the safe choice — it's the most documented and has the largest community. The FLY-SHT36 is a good alternative if you prefer removable terminal blocks. Both work identically once configured.
For complete beginners, we recommend starting with a traditional wired build and upgrading to CANBus when you're comfortable with Klipper. The initial wiring is more complex and adds another layer of troubleshooting if something goes wrong. See our Klipper setup guide for traditional wiring instructions.