YOU SHOULD BE USING CANBUS.ESOTERICAL.ONLINE THESE DAYS. THIS INFORMATION CAN STILL BE USEFUL, BUT VERIFY IT AGAINST ESOTERICAL'S SITE
This is a quick write up on how do deal with BTT parts as it relates to CAN. This in no way is meant to take away from the awesome work that Maz0r did, which is here. This site is mostly legacy now.
For additional hardware, check out Esoterical's site
Rather, this document covers using the U2C 2.1 and EBB36 to get CAN going for a typical setup.
Why write this? its a pretty common setup and it can be confusing/easy to miss some of the steps, so here we go.
- Raspbery Pi (CB1 or other hardware may change some of the steps, like the network setup)
- BTT U2C (I have a 2.1)
- BTT EBB36 (I have a 1.2)
- Some wire in the 22awg range
- USB cables
- A Voron
It is recommended you do as much of this work OUTSIDE your printer. In other words, do not rip out everything from your working printer to see if you can get CAN working. Rather, set all this up next to the printer. Yes this may involve making some short wire runs to connect things, but its worth it, especially if you ned to print things for mounting and so on.
If you do not have a bench power supply, consider getting one as this can make your life a lot easier. Otherwise just wire up power off your printer's PSU. I personally have a USB keystone jack coming off the back of my printer that goes to my Pi, but if not, just run a temporary connection from under the deck to your Pi for the boards.
Summarized from here
-
Use nano to create a new file with the command
sudo nano /etc/network/interfaces.d/can0 -
Add the following code
allow-hotplug can0 iface can0 can static bitrate 1000000 up ifconfig $IFACE txqueuelen 1024 pre-up ip link set can0 type can bitrate 1000000 pre-up ip link set can0 txqueuelen 1024
-
Save the file with
CTRL-o, ENTER,CTRL-xand reboot the pi withsudo reboot -
Use nano to create a new file with the command
sudo nano /etc/systemd/network/10-can.link -
Add the following code then save and exit nano
[Match] Type=can [Link] TransmitQueueLength=1024
-
Use nano to create a new file with the command
sudo nano /etc/systemd/network/25-can.network -
Add the following code then save and exit nano
[Match] Name=can* [CAN] BitRate=1M -
Verify the network via
ip -s link show can0which should reflect that the CAN network is UP. If the network is not found, connect your U2C via USB and repeat the command to verify thecan0network is up.
While all of those steps might not me 100% necessary on every system, doing all three should cover your bases regardless.
Note that the U2C does not need much done to it, short of making sure it has the newest firmware from BTT that fixed an earlier issue with not being able to use Katapult to flash things behind the U2C on older firmware. Once you do the steps below, you do not have to touch the U2C again
-
Make sure you have the latest firmware for the U2C from BTT, which is available here:
-
The steps to flash this firmware are (taken from above link):
- Download the file from bigtreetech comment
- Stop klipper
sudo systemctl stop klipper - Bring down the can interface
sudo ifdown can0 - Unzip the firmware file from bigtreetech
- Unplug the u2c controller from usb
- Press and hold the boot button on the u2c and plug the usb cable back in, then release the boot button.
- Verify that the u2c is in dfu mode
dfu-util -lYou should see lines that contain Found DFU: [0483:df11] - Flash the new firmware to the u2c
dfu-util -D G0B1_U2C_V2.bin -d 0483:df11 -a 0 -s 0x08000000:leave - Unplug and replug in the usb cable for the u2c to reset it
- The CAN interface should now be back up
- Start klipper
sudo systemctl start klipper - Follow the steps to compile and flash katapult to the EBB (more on this later)
- Follow the steps to compile and flash klipper over CAN (more on this later)
- Success
-
When this is done, ADD THE JUMPER for the 120 ohm resistor to the U2C and set the U2C aside
-
Clone the Katapult repository to your pi
cd ~ git clone https://github.com/Arksine/katapult
-
Run the following commands to bring up the menu to configure the firmware
cd katapult make menuconfig -
Starting from the top, make your firmware selections look exactly like the image below

NOTE: For Status LED GPIO Pin, be sure to enter PA13
-
Exit using
ESCorQ, then confirm with yes (Y) -
Build the firmware using the following commands:
make clean makeNOTE: This screenshot refers to the newer name, Katapult. Older installations (pre late July, 2023) will use the
CanBootdirectory.
-
Add a jumper as shown in the image below so the board can be powered via a USB connection

-
Connect your device to your Pi via USB
-
Press and hold the
RESETandBOOTbuttons down (button locations shown in step 1)- Release
RESETbutton - Release
BOOTbutton
- Release
-
The device should now be in DFU mode. Verify this via the
lsusbcommand, which should look something like this:Bus 001 Device 005: ID 0483:df11 STMicroelectronics STM Device in DFU Mode -
Record the device ID (the part after
IDabove, but yours may be different) -
Run the following command to erase and flash the EBB with Katapult (again, VERIFY your device ID. The ID is at the end of the command below):
sudo dfu-util -a 0 -D ~/katapult/out/katapult.bin --dfuse-address 0x08000000:force:mass-erase:leave -d 0483:df11 -
The board will now be flashed. It will look similar to what is shown below. NOTE: If you see any mention of an error after the
File downloaded successfullymessage, it can be ignored. -
Unplug the board from USB and remove the USB jumper you installed for step 1
-
ADD THE JUMPER for the 120 ohm resistor to the EBB
For my setup, I chose to wire things as shown below.
I have 24v and ground going INTO the U2C to supply voltage to all the other connectors. I then use all 4 wires on the Molex connector to take power and CAN signals to the EBB. The U2C is powered by the USB connection though, so do not forget that.
NOTE: Once you connect your U2C to USB, you should see two little lights turn on. If you do not see this, you may have a bad USB cable.
Note that the Octopus should not be connected to the USB C port!
Now there is nothing wrong with wiring up your 24v right to the EBB board (more on that in a minute), but for me, I found this to be the simplest way to set things up.
I am using 22awg Igus cable for my CAN cable. You will need to get motion rated wire, or something with a high strand count (19 or more) so you do not have issues with things breaking later.
Make your cable and route it however you want. Some people use a gland back the A motor mount, I chose to run it out up by where the bowden tube exits. As long as the four wires gets from the toolhead to under the deck, its probably not wrong.
Next up is wiring up the plugs for the CAN cable. Refer to the following images from GadgetAngel:
TRIPLE CHECK your polarity and wiring here. The BTT stuff is not the same on both sides (see image above as a reference).
Once you have the cable wired up (I used the molex connection), plug it into the toolhead and the U2C (or however you decided to power things up.
(Some steps taken from here, which you should review as well)
At this point, after checking twice that everything is connected correctly, power up the printer and SSH into the Pi.
-
Change directories into the klipper directory via
cd ~/klipper -
type
make menuconfigand adjust things so it looks like the screenshot below -
Exit, saving the changes, then build klipper by typing
make -
Find your UUID by running this command:
sudo service klipper stop python3 ~/katapult/scripts/flashtool.py -i can0 -q -
It should return something like:
"Detected UUID: XXXXXXXXXX, Application: Katapult" -
Record the UUID. This is YOUR uuid and will be used for the next step and in your cfg files.
-
Now its time to flash klipper via CAN! Run the following command, substituting your uuid:
python3 ~/katapult/scripts/flashtool.py -i can0 -u b6d9de35f24f -f ~/klipper/out/klipper.bin
-
The EBB will be flashed and you should see a message about success, etc. Request for uuids again via:
python3 ~/katapult/scripts/flashtool.py -i can0 -qbut now, notice how it shows Klipper for the application! Yay!
-
Restart klipper via
sudo service klipper start
-
On the pi, run the following commands:
cd ~/printer_data/config wget https://raw.githubusercontent.com/maz0r/klipper_canbus/main/toolhead/example_configs/toolhead_btt_ebbcan_G0B1_v1.2.cfg
-
Edit the file using nano
nano toolhead_btt_ebbcan_G0B1_v1.2.cfg
-
Remember the UUID you recorded earlier? Find it and scroll down to the section that looks like this:
[mcu can0] canbus_uuid: 2c77b9d71a11
-
Replace
2c77b9d71a11with YOUR UUID -
Save the file, exit nano, and then add this to your printer.cfg:
[include toolhead_btt_ebbcan_G0B1_v1.2.cfg]
Note that once you do this and restart Klipper, the UUID will NOT SHOW anymore when querying the can interface
At this point everything should be up and running, but how can you test it? The easiest way is to change the [fan] to a [fan_generic] so you can see a new fan slider in Mainsail. To do that, find the following section in the ebb cfg you downloaded above:
## PART COOLING
[fan]
pin: can0:FAN1
kick_start_time: 0.25
cycle_time: 0.15
off_below: 0.10
and change it to
## PART COOLING TEST
[fan_generic fantest]
pin: can0:FAN1
kick_start_time: 0.25
cycle_time: 0.15
off_below: 0.10
Then save and reload the cfg.
The config file you downloaded has aliases set for the pins, like this:
[board_pins EBB36_G0B1_v1.2]
mcu: can0
aliases:
aliases_step:
EXT_EN=PD2,EXT_STEP=PD0,EXT_DIR=PD1,EXT_UART=PA15
aliases_limitsw: # these are preferred for endstops (including klicky)
LIMIT_1=PB7,LIMIT_2=PB5,LIMIT_3=PB6
aliases_bltouch: # these are the dupont connectors for bltouch
PROBE_1=PB9,PROBE_2=PB8
aliases_fans:
FAN0=PA1,FAN1=PA0
aliases_thermistors:
TH0=PA3,PT100_CS=PA4,PT100_SCLK=PA5,PT100_MISO=PA6,PT100_MOSI=PA7
aliases_heaters:
HE0=PB13
aliases_rgb:
RGBLED=PD3
aliases_adxl:
ADXL_CS=PB12,ADXL_SCLK=PB10,ADXL_MISO=PB2,ADXL_MOSI=PB11
aliases_i2c:
AUX0=PB3,AUX1=PB4
Here is a pin diagram for the EBB36 1.x:
So that means we need to plug the fan into this port:
In order for the config to match the physical connection on the board.
Once all these changes are made and saved, simply add an [include] for the new EBB related cfg file, then save and restart. Once Klipper restarts you should see a new fan in Mainsail for fantest. Assuming you have connected a fan to the correct pin, you should be able to move the slider and see the fan react!
Once happy with your testing, be sure to reverse the changes you made so that fantest is a [fan] again.
You are now ready to rewire your toolhead to the EBB36! Now wire it up, TEST TEST TEST, and then rip out those drag chains! =)







