メインコンテンツにスキップ

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が1Mbps、キャッシュ1024に設定されています。通常、手動でCAN0を設定する必要はありません。
  4. ツールボードおよびメインボードのファームウェアのCANレートは、上位機のCAN0レートと一致している必要があります。
  5. CANバスの両端には終端抵抗が必要です。配線順序、抵抗値、および電源供給の問題は、IDが見つからない原因となります。

CAN配線と終端抵抗

配線と終端抵抗は、CANネットワークで最もよくある問題の原因です。確認する際は、必ず電源を切ってから、配線順序と抵抗値を確認してください。

配線チェック

  1. CANデバイスに正しく電源が供給されていることを確認します。
  2. CAN-HはCAN-Hに、CAN-LはCAN-Lに正しく接続されていることを確認します。
  3. UTOCを使用する場合は、USB経由でUTOCを上位機に接続します。
  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 が表示される: 複数のCAN0ソースが同時に接続されるのを避けるため、CANブリッジデバイスは1つだけにすることをお勧めします。

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

結果に応じて設定方式を選択します。

判断結果説明推奨設定方法
networkingactive と表示され、/etc/network/interfaces.d/ が存在するDebian、Armbianなどのシステムでよく見られますifupdown を使用
systemd-networkdactive と表示され、networkctl list でネットワークデバイスが確認できるsystemd-networkd がネットワークを管理しているsystemd-networkd を使用
NetworkManageractive と表示され、nmcli device status でネットワークデバイスが確認できるNetworkManager がネットワークを管理している以下の2つの設定を直接混在させないでください。現在のシステムのNetworkManager方式に従って処理してください。
複数のサービスが active と表示されるシステムが混在したネットワーク管理状態である可能性があるどのサービスが実際に can0 を管理しているかを確認し、対応する方式を選択してください。

現在のシステムの方式が判断できない場合は、システムイメージまたは上位機メーカーのドキュメントを参照することをお勧めします。FLY上位機およびFlyOS-FASTシステムでは、通常、手動でCAN0を設定する必要はありません。

CAN0設定の書き込み

ネットワーク管理方式を確認したら、実際のシステムに応じて対応する設定を行います。

ifupdown

/etc/network/interfaces.d/ でネットワークを管理するDebian、Armbianなどのシステムに適用されます。1Mbpsの設定は以下の通りです。

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

500Kbpsレートが必要な場合は、上記コマンドの 1000000500000 に変更してから実行してください。

設定が完了したら、デバイスを再起動します。

sudo reboot

CAN0 ステータスの確認

再起動後、次のコマンドを実行します。

ip -details link show can0

以下の内容を重点的に確認してください。

  • bitrate: CAN通信レート。例:1000000 は1Mbpsを示します。
  • qlen または txqueuelen: 送信キューの長さ。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: CANBOOT または Application: 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を記入してください。

一般的なエラーとその判断

エラー一般的な原因対処方法
OSError: [Errno 19] No such device上位機がCANデバイスを見つけられないUTOC、USBケーブル、CANブリッジファームウェア、および電源供給を確認
can.CanError: Failed to transmit: [Errno 100] Network is downCAN0が起動していない、または設定が間違っているCAN0を再設定し、再起動
can.CanError: Failed to transmit: [Errno 105] No buffer space availableCANキャッシュが不足している、またはシステムネットワークキューが異常キャッシュが 1024 であることを確認し、必要に応じてCAN0を再設定
mcu 'xxx': Invalid CAN uuidCAN UUIDの記入ミス、またはデバイスがオフラインUUIDを再検索し、配線順序、電源供給、終端抵抗を確認
Serial connection closedKlipperは設定を見つけたが、接続が切断されたCANネットワーク品質、配線順序、終端抵抗、ファームウェアレートを確認

Klipperのその他のエラーについては、一般的なエラーメッセージ を参照してください。

IDが見つからない場合の確認手順

  1. ip -details link show can0 を実行し、CAN0が存在し、使用可能な状態であることを確認します。
  2. ツールボードとメインボードのファームウェアのCANレートが、上位機のCAN0レートと一致していることを確認します。
  3. デバイスIDが既に printer.cfg に書き込まれている場合は、まず対応する設定を一時的にコメントアウトし、約10秒間電源を切ってから再び電源を入れて検索します。
  4. CAN-HとCAN-Lが逆接続、断線、または接触不良になっていないか確認します。
  5. CANネットワークの両端にそれぞれ 120Ω の終端抵抗があることを確認します。装置全体の電源を切った状態でCAN-HとCAN-L間の抵抗値を測定し、約 60Ω であることを確認します。
  6. ツールボードまたはメインボードに正常に電源が供給されていることを確認します。
  7. ファームウェアコンパイル時に正しい通信方式が選択されていることを確認します。
  8. 検索結果が Application: CANBOOT または Application: Katapult と表示された場合は、最初にKlipperファームウェアを書き込んでから再検索してください。

終端抵抗のルール

デバイスタイプ終端抵抗の要件操作説明
CANツールボード120Ω 終端抵抗が必要ボード上のジャンパーピンまたはディップスイッチで有効化
メインボードCANインターフェース120Ω 終端抵抗が必要ボード上のジャンパーピンまたはディップスイッチで有効化
UTOCタイプ変換モジュール通常、120Ω 抵抗が内蔵済み追加で終端抵抗を有効にする必要はありません

クイック確認手順

  1. まずデバイス確認: lsusb を実行し、1d50:606f が表示されることを確認します。
  2. 次に設定確認: ip -details link show can0 を実行し、CAN0が存在し、レートが正しく、キャッシュが 1024 であることを確認します。
  3. 最後にハードウェア確認: 完全に電源を切った状態でCAN-HとCAN-L間の抵抗値を測定し、約 60Ω であることを確認します。

これらすべてを確認しても異常が続く場合は、USBケーブル、CANケーブル、UTOC、またはCANブリッジデバイスを交換してクロステストを試みてください。

CANデバイスファームウェア更新リファレンス

このセクションは、既にCANネットワークに接続できており、CAN経由でメインボードまたはツールボードのファームウェアを更新する必要があるシナリオ向けです。製品ごとにファームウェアの名前やコンパイル方法が異なりますので、まず該当する製品のチュートリアルに従ってファームウェアをコンパイルしておいてください。

準備

  1. 製品チュートリアルに従って、新しいファームウェアをコンパイルします。
  2. デバイスのCAN UUIDが検索可能であること、または printer.cfg にそのデバイスの canbus_uuid: が記入されていることを確認します。
  3. Klipperサービスを停止します。
sudo systemctl stop klipper

更新の実行

以下のコマンド内の <CAN_UUID> を実際のデバイスIDに置き換えてください。

バージョンについて

システムのバージョンに応じて適切なコマンドを選択してください。

  • FlyOS-FAST 1.3.8 以降、または 2026年4月9日以降にKlipperを更新したシステム:
python3 ~/klipper/lib/katapult/flashtool.py -u <CAN_UUID>
  • 旧バージョンのシステム、つまりFlyOS-FAST 1.3.8より前、または2026年4月9日以前にKlipperを更新していないシステム:
python3 ~/klipper/lib/canboot/flash_can.py -u <CAN_UUID>
注意

-u の後には必ずスペースを入れ、その後にCAN UUIDを記入してください。

CAN Flash Success というメッセージが表示されれば、通常は書き込み成功です。

Loading...

更新後の操作

更新が完了したら、Klipperを再起動します。

sudo systemctl start klipper

更新後に接続できない場合は、CAN IDを再検索し、printer.cfg 内の canbus_uuid: が正しいことを確認してください。

最終確認チェックリスト

CAN IDが見つからない、またはKlipperがCANデバイスに接続できない場合は、以下の順序で素早く確認してください。

  1. can0 がシステムに認識されていること。
  2. bitrate がファームウェアコンパイル時に設定したCANレートと一致していること。
  3. qlen または txqueuelen1024 であること。
  4. CAN-H と CAN-L が逆接続されていないこと。
  5. CANバス両端の終端抵抗が正しいこと。
  6. ツールボードまたはメインボードへの電源供給が正常であること。
  7. ファームウェアの通信方式が正しく選択されていること。
  8. printer.cfg で実際に検索した canbus_uuid: を使用していること。
  9. 同じ [mcu] 内で serial:canbus_uuid: が同時に有効になっていないこと。
Loading...