跳到主要内容

CAN 网络配置与 ID 搜索

本文用于处理 CAN 网络配置、CAN0 状态确认、CAN UUID 搜索以及常见 CAN 报错排查。

适用场景:

  • 使用 UTOC 等 USB 转 CAN 模块连接 CAN 工具板。
  • 使用已刷 USB 桥接 CAN 固件的主板连接 CAN 工具板。
  • 主板或工具板已刷 CAN 固件,需要搜索 CAN UUID。
  • Klipper 出现 CAN0、CAN UUID 或 CAN 网络相关报错。

使用前注意

  1. 将 UTOC 或已刷 CAN 桥接固件的主板通过 USB 连接至上位机。
  2. 请通过网络登录上位机后台,不要使用串口登录。
  3. FlyOS-FAST 系统已预设 CAN0 为 1M 速率、1024 缓存,一般无需手动配置 CAN0。
  4. 工具板、主板固件中的 CAN 速率必须与上位机 CAN0 速率一致。
  5. CAN 总线两端需要终端电阻,线序、电阻和供电问题都会导致搜索不到 ID。

CAN 接线与终端电阻

接线和终端电阻是 CAN 网络最常见的问题来源。

断电操作

检查 CAN-H/CAN-L 线序、插头、压接、终端电阻跳线或拨码开关前,请完全关闭打印机并断开电源供应。不要在通电状态下拔插 CAN 线、调整跳线帽或测量电阻。

接线检查

  1. 断电后确认 CAN-H 接 CAN-H,CAN-L 接 CAN-L。
  2. 断电后检查 CAN 线、接插件和压线位置,确认没有断线、松动或接触不良。
  3. 如果使用 UTOC,请使用完好的 USB 数据线连接到上位机。
  4. 如果使用 USB 桥接 CAN 主板,请确认该主板已经刷写 USB 桥接 CAN 固件。
  5. 重新装好线束和外壳后再上电,确认 CAN 设备是否被系统识别。

终端电阻检查

CAN 总线两端各需要一个 120Ω 终端电阻。整机完全断电后,使用万用表测量 CAN-H 与 CAN-L 之间的阻值。

测量值判断
60Ω正常,两端终端电阻已正确连接
120Ω通常只有一端有终端电阻,或者断线
40Ω可能有多余终端电阻,请检查中间节点
140Ω可能存在 CAN-H / CAN-L 接反或线路异常
注意

测量终端电阻必须在完全断电状态下进行。未完全断电时操作可能导致读数不准,也可能损坏设备。

检查上位机是否支持 CAN

FLY 上位机可跳过此步骤。

执行以下命令检测内核 CAN 支持:

sudo modprobe can && echo "内核支持 CAN" || echo "内核不支持 CAN"

若显示 内核支持 CAN,可继续配置。若显示不支持,建议先更换支持 SocketCAN 的系统镜像。

检查 CAN 设备是否被识别

配置或搜索 CAN ID 前,建议先确认上位机已经识别到 UTOC 或 USB 桥接 CAN 设备。

执行:

lsusb

结果判断:

  • 看到 1d50:606f:设备已被系统识别,可继续配置或搜索 CAN ID。
  • 提示找不到 lsusb:请先安装 usbutils
  • 没有看到 1d50:606f:检查 USB 线、UTOC、USB 桥接 CAN 固件和供电。
  • 出现多个 1d50:606f:建议只保留一个 CAN 桥接设备,避免同时接入多个 CAN0 来源。

安装 usbutils

sudo apt-get update
sudo apt-get install usbutils
注意

只有系统识别到 CAN 桥接设备后,后续 CAN0 配置和 CAN ID 搜索才有意义。

配置 CAN0

注意

此操作会覆盖原有 CAN0 配置,完成后需要重启系统。FlyOS-FAST 系统无需执行本步骤。

判断网络管理方式

不同系统使用的网络管理方式不同,配置 CAN0 前应先确认当前系统由谁管理网络。不要同时使用多套方式配置同一个 can0,否则可能出现配置不生效、重启后丢失或 CAN0 状态异常。

执行以下命令查看常见网络服务状态:

systemctl is-active NetworkManager
systemctl is-active systemd-networkd
systemctl is-active networking

也可以继续查看配置文件和设备状态:

ls /etc/network/interfaces /etc/network/interfaces.d/ 2>/dev/null
networkctl list 2>/dev/null
nmcli device status 2>/dev/null

根据结果选择配置方式:

判断结果说明建议选择
networking 显示 active,并且存在 /etc/network/interfaces.d/常见于 Debian、Armbian 等系统使用 ifupdown
systemd-networkd 显示 activenetworkctl list 能看到网络设备网络由 systemd-networkd 管理使用 systemd-networkd
NetworkManager 显示 activenmcli device status 能看到网络设备网络由 NetworkManager 管理不要直接混用下面两种配置,优先按当前系统的 NetworkManager 方案处理
多个服务都显示 active系统可能存在混合网络管理先确认哪个服务实际管理 can0,再选择对应方式

若无法判断当前系统使用哪种方式,建议先参考系统镜像或上位机厂商文档。FLY 上位机和 FlyOS-FAST 系统一般无需手动配置 CAN0。

写入 CAN0 配置

确认网络管理方式后,根据实际系统选择对应配置。

ifupdown

适用于使用 /etc/network/interfaces.d/ 管理网络的 Debian、Armbian 等系统。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 速率,将上方命令中的 1000000 改为 500000 后再执行。

配置完成后重启设备:

sudo reboot

确认 CAN0 状态

重启后执行:

ip -details link show can0

重点核对以下内容:

  • bitrate:CAN 通信速率,例如 1000000 表示 1M。
  • qlentxqueuelen:发送队列长度,建议为 1024
Loading...

如果提示找不到 can0,可先执行:

ip link
lsusb
dmesg | grep -i can

常见原因:

  • UTOC 未被系统识别,或 USB 线仅支持供电。
  • 主板未刷写 USB 桥接 CAN 固件。
  • CAN0 配置文件未生效,或系统未重启。
  • 系统镜像不支持 SocketCAN。

搜索 CAN ID

搜索前请先确认设备处于可搜索状态:

  1. 如果该设备的 UUID 已写入 printer.cfg 并被 Klipper 正常连接,搜索命令可能不会再次列出该设备。
  2. 搜索前可临时注释对应 [mcu] 配置段,保存后重启 Klipper。
  3. 设备断电约 10 秒后重新上电,再执行搜索命令。

普通上位机执行:

~/klippy-env/bin/python ~/klipper/scripts/canbus_query.py can0

FLY 上位机执行:

python3 ~/klipper/scripts/canbus_query.py can0

结果判断:

  • Application: Klipper:该 ID 可直接写入 printer.cfg 使用。
  • Application: CANBOOTApplication: Katapult:设备仍处于引导程序,需要先刷写 Klipper 固件。
  • 搜索不到任何 ID:先按下方“搜索不到 ID 的排查顺序”检查 CAN0、线序、终端电阻、供电和固件通信方式。
Loading...

CAN ID 填写方法

  1. 打开打印机网页界面,在左侧配置入口中找到 printer.cfg
  2. 将搜索到的 UUID 填写到对应 [mcu] 配置段的 canbus_uuid: 后。
  3. 使用 CAN 连接时,不要在同一个 [mcu] 中同时保留 serial:canbus_uuid:
  4. 保存并重启 Klipper。

CAN 固件填写示例:

[mcu]
canbus_uuid: xxxxxxxxxxxx

USB 固件使用 serial:,CAN 固件使用 canbus_uuid:。如果从 USB 固件改为 CAN 固件,需要删除或注释原来的 serial:

注意

文档中的 ID 均为示例。每块主板或工具板的 ID 都不相同,请填写实际搜索到的 ID。


CAN 报错排查:如果已正确配置 CAN0 和 CAN ID 但仍然出现通信异常,请参考 CAN 报错排查

Loading...