CAN 固件编译
开始编译
-
需要使用安装好
klipper
服务的上位机 通过网络连接SSH -
并且将设备与上位机连接好
-
注意:请使用普通的上位机,比如树莓派 FLY派等。如果是魔改上位机(例如WiFi棒子、红米等),这类上位机因问题太多,无法为您提供技术支持
- 将
ROOT
用户切换到普通用户可以输入下方命令 - 请不要使用
ROOT
用户 - fly用户可直接输入:
su fly
,非fly用户请将<您的上位机用户名>
,替换为您上位机的用户名!
su <您的上位机用户名>
- 请确保上位机可以正常联网
- 固件编译前需要使用SSH通过网络登录上位机
- 请不要使用串口工具登录上位机
Klipper固件编译和配置页面操作说明
请确保键盘输入法为半角模式,即英文模式
- 键盘上键
↑
,下键↓
,用于上下移动光标来选中菜单项 - 确认键
Enter
或 空格键Space
,用于勾选菜单或进入子菜单 - 退出键
ESC
,用于返回上一级菜单 Q
键,用于退出Klipper固件配置页面Y
键,在退出Klipper固件配置页面时,如果有提示,则点击Y
键保存配置文件
如果配置页面选项比较少,请先勾选[ ] Enable extra low-level configuration options
,用于显示部分隐藏选项
下面介绍如何编译固件:
-
连接到SSH后输入下面的命令并回车:
cd ~/klipper && rm -rf ~/klipper/.config && rm -rf ~/klipper/out && make menuconfig
-
其中
rm -rf ~/klipper/.config && rm -rf ~/klipper/out
是删除之前编译数据与固件make menuconfig
是编译固件,执行后应该出现下方界面 -
选择Enable extra low-level configuration options并且回车
-
进入菜单Micro-controller Architecture然后选择Raspberry Pi RP2040回车
-
选择Bootloader offset,选择:16KiB bootloader
-
选择Communication interface,选择:CAN bus
-
选择
(4) CAN RX gpio number
,删除4
输入1
-
选择
(5) CAN TX gpio number
,删除5
输入0
- 选择GPIO pins to set at micro-controller startup,输入:!gpio5
请在英文输入法状态下输入!gpio5

-
请对照上图核对,确保与上图一致,再进进行下一步
-
按
Q
键,出现 Save configuration,这时再按Y
键 -
现在应该保存了配置并且退出到了命令行界面
-
输入
make -j4
开始编译,时间有点长 -
最后输出下面的内容则编译成功
Linking out/klipper.elf
Creating hex file out/klipper.bin
上位机配置
如果您的上位机为 FLY 的上位机,无需执行上位机配置
这一步
如果您的上位机为 非FLY 的上位机,请执行以下步骤
检测上位机是否支持CAN
- 如果是FLY上位机则无需执行此操作
- 如果你的系统是
Ubuntu
需要Ubuntu配置CAN0
,此文档还未更新 - 输入下方指令,检测系统是否支持CAN
sudo modprobe can && echo "您的内核支持CAN" || echo "您的内核不支持CAN"
- 输入以上指令后,如果您的内核支持CAN就会返回:
您的内核支持CAN
;如果不支持就会返回:您的内核不支持CAN
。
如果返回您的内核支持CAN
则可以进行下一步配置CAN0,如果返回您的内核不支持CAN
,则请您更换上位机系统或者更换上位机!
配置CAN0
- 此命令是覆盖原来系统CAN0配置,执行完成后需要重启系统
- 请根据实际情况选择其中一项(Klipper默认CAN速率为1M,建议使用1M速率)
1M速率输入下方命令
sudo /bin/sh -c "cat > /etc/network/interfaces.d/can0" << EOF
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
EOF
500K速率输入下方命令
sudo /bin/sh -c "cat > /etc/network/interfaces.d/can0" << EOF
allow-hotplug can0
iface can0 can static
bitrate 500000
up ifconfig $IFACE txqueuelen 1024
pre-up ip link set can0 type can bitrate 500000
pre-up ip link set can0 txqueuelen 1024
EOF
- 重启设备
sudo reboot
搜索设备
- 请确保上位机可以正常联网,并确保下位机连接上位机的数据线具有数据传输功能。
- SSH连接连接到上位机后输入
lsusb
并且回车,如果出现下方图片中圈起来的信息,就可以进行下一步。- 如果没有任何信息反馈,这是上位机的系统问题,这边无能为力,你需要更换确定正常的系统或者更换上位机。
- 提示没有
lsusb
指令,可以执行此命令安装sudo apt-get install usbutils
1d50:606f
属于本次你要用到的设备。OpenMoko, Inc. Geschwister Schneider CAN adapter
后缀具有一定参考价值,但不作为判断依据。- 部分上位机可能因为系统问题,显示不全或者不显示。
- 如果输入
lsusb
指令能够显示设备,但是没有1d50:606f
,请尝试更换数据线,尝试将主板连接到上位机的其他USB口。
- 如果您的之前执行过上述步骤,并且成功烧录Klipper固件,主板运行正常,只是更新Klipper固件,请直接查看本页面右侧菜单栏中的
固件更新
章节。
有1d50:606f
时候才能进行下一步
烧录固件
- 烧录固件前使用XT30数据线将工具板连接到UTOC或者刷了桥接固件的主板,下方是参考接线图
- 请注意拨码是否拨到对应地方
- 请确保CAN H与CAN L在断电情况下使用万用表测量阻值在
60Ω
左右,如果是120Ω
则需要接上120Ω
跳线,如果是40Ω
左右需要将跳线移除
- 找ID与刷固件都建议不要在打印过程中进行
- 同一个主板或者工具板Katapult的CAN固件与Klipper的CAN固件他们ID完全一致
- 请确保上位机的can网络已经配置
- lsusb后有
1d50:606f
时候才能使用下方命令搜索CAN ID - 工具版CAN速率要与上位机一致否则无法找到ID并且烧录
-
执行下面的命令查询CANBus UUID:
~/klippy-env/bin/python ~/klipper/scripts/canbus_query.py can0
-
输入后会根据你机器出现以下几种情况,下方是参考
- 第一种:刷了桥接固件的主板,出现一个ID并且提示
Application: Klipper
- 第二种:刷了桥接固件的主板并且搭配需要烧录固件的工具板,出现两个ID
- 第三种:使用UTOC搭配需要烧录的工具板
- 提示:UTOC是没有ID显示出来的
- 第四种:没有ID提示,一般情况是被klipper占用,上位机CAN0速率不正确,接线异常
- 第一种:刷了桥接固件的主板,出现一个ID并且提示
-
正常情况下需要烧录的工具板处于CANBOOT情况下则会提示
Application: CanBoot
并且对应的固件灯会闪烁。这个时候你需要烧录Klipper固件,否则无法连接!!! -
提示:如果是Klipper固件并且已经将ID填入配置里面后,ID将不会显示并且被Klipper占用,你需要屏蔽对应ID后彻底给主板断电重启一次。
注意- 如果没有查询的UUID,请看下方文档
- CAN问题合集
-
-
固件烧录
-
将下面命令中的
241696050c56
替换为查找uuid中查找到的uuid,请注意-u
后面有空格python3 ~/klipper/lib/canboot/flash_can.py -u 241696050c56
-
如下图,出现
CAN Flash Success
则烧录成功
-
-
如果需要更新固件只需要编译好固件后重新执行烧录指令就可以更新固件,但是请保证能找到ID或者Klipper已经连接上
python3 ~/klipper/lib/canboot/flash_can.py -u <MCU ID>
确认固件是否启动
- 如果固件正常启动LED会亮起来