CANネットワーク設定とID検索
本記事では、CANネットワーク設定、CAN0ステータス確認、CAN UUID検索、および一般的なCANエラーのトラブルシューティングについて説明します。
適用シーン:
- UTOCなどのUSB-CAN変換モジュールを使用してCANツールボードに接続する場合。
- USBブリッジCANファームウェアが書き込まれたメインボードを使用してCANツールボードに接続する場合。
- メインボードまたはツールボードに既にCANファームウェアが書き込まれており、CAN UUIDを検索する必要がある場合。
- KlipperでCAN0、CAN UUID、またはCANネットワークに関連するエラーが発生した場合。
使用前の注意
- UTOC、またはCANブリッジファームウェアが書き込まれたメインボードをUSB経由で上位機に接続します。
- シリアル接続ではなく、ネットワーク経由で上位機のバックグラウンドにログインしてください。
- FlyOS-FASTシステムは、デフォルトでCAN0が1Mbps、キャッシュ1024に設定されています。通常、手動でCAN0を設定する必要はありません。
- ツールボードおよびメインボードのファームウェアのCANレートは、上位機のCAN0レートと一致している必要があります。
- CANバスの両端には終端抵抗が必要です。配線順序、抵抗値、および電源供給の問題は、IDが見つからない原因となります。
CAN配線と終端抵抗
配線と終端抵抗は、CANネットワークで最もよくある問題の原因です。確認する際は、必ず電源を切ってから、配線順序と抵抗値を確認してください。
配線チェック
- CANデバイスに正しく電源が供給されていることを確認します。
- CAN-HはCAN-Hに、CAN-LはCAN-Lに正しく接続されていることを確認します。
- UTOCを使用する場合は、USB経由でUTOCを上位機に接続します。
- USBブリッジCANメインボードを使用する場合は、そのメインボードにUSBブリッジCANファームウェアが書き込まれていることを確認します。
- 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
結果に応じて設定方式を選択します。
| 判断結果 | 説明 | 推奨設定方法 |
|---|---|---|
networking が active と表示され、/etc/network/interfaces.d/ が存在する | Debian、Armbianなどのシステムでよく見られます | ifupdown を使用 |
systemd-networkd が active と表示され、networkctl list でネットワークデバイスが確認できる | systemd-networkd がネットワークを管理している | systemd-networkd を使用 |
NetworkManager が active と表示され、nmcli device status でネットワークデバイスが確認できる | NetworkManager がネットワークを管理している | 以下の2つの設定を直接混在させないでください。現在のシステムのNetworkManager方式に従って処理してください。 |
複数のサービスが active と表示される | システムが混在したネットワーク管理状態である可能性がある | どのサービスが実際に can0 を管理しているかを確認し、対応する方式を選択してください。 |
現在のシステムの方式が判断できない場合は、システムイメージまたは上位機メーカーのドキュメントを参照することをお勧めします。FLY上位機およびFlyOS-FASTシステムでは、通常、手動でCAN0を設定する必要はありません。
CAN0設定の書き込み
ネットワーク管理方式を確認したら、実際のシステムに応じて対応する設定を行います。
- ifupdown
- systemd-networkd
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レートが必要な場合は、上記コマンドの 1000000 を 500000 に変更してから実行してください。
systemd-networkd
systemd-networkd でネットワークを管理するシステムに適用されます。1Mbpsの設定は以下の通りです。
ネットワーク設定ファイルを作成します。
sudo tee /etc/systemd/network/99-can.network > /dev/null <<'EOF'
[Match]
Name=can*
[CAN]
BitRate=1000000
RestartSec=100ms
EOF
リンク設定ファイルを作成します。
sudo tee /etc/systemd/network/99-can.link > /dev/null <<'EOF'
[Match]
OriginalName=can*
[Link]
TxQueueLength=1024
EOF
500Kbpsレートが必要な場合は、BitRate=1000000 を BitRate=500000 に変更します。
設定が完了したら、デバイスを再起動します。
sudo reboot
CAN0 ステータスの確認
再起動後、次のコマンドを実行します。
ip -details link show can0
以下の内容を重点的に確認してください。
bitrate: CAN通信レート。例:1000000は1Mbpsを示します。qlenまたはtxqueuelen: 送信キューの長さ。1024を推奨します。
can0 が見つからないと表示された場合は、まず次のコマンドを実行します。
ip link
lsusb
dmesg | grep -i can
一般的な原因:
- UTOCがシステムに認識されていない、またはUSBケーブルが電源供給のみ対応している。
- メインボードにUSBブリッジCANファームウェアが書き込まれていない。
- CAN0設定ファイルが有効になっていない、またはシステムが再起動されていない。
- システムイメージがSocketCANをサポートしていない。
CAN ID の検索
検索を開始する前に、デバイスが検索可能な状態であることを確認してください。
- デバイスのUUIDが既に
printer.cfgに書き込まれており、Klipperが正常に接続している場合、検索コマンドはそのデバイスを再度リストアップしない可能性があります。 - 検索前に、対応する
[mcu]設定セクションを一時的にコメントアウトし、保存後にKlipperを再起動します。 - デバイスの電源を約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、配線順序、終端抵抗、電源供給、ファームウェアの通信方式を確認してください。
CAN ID の記入方法
- プリンターのウェブインターフェースを開き、左側の設定エントリから
printer.cfgを見つけます。 - 検索したUUIDを、対応する
[mcu]設定セクションのcanbus_uuid:の後に記入します。 - CAN接続を使用する場合、同じ
[mcu]内にserial:とcanbus_uuid:を同時に残さないでください。 - 保存して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 down | CAN0が起動していない、または設定が間違っている | CAN0を再設定し、再起動 |
can.CanError: Failed to transmit: [Errno 105] No buffer space available | CANキャッシュが不足している、またはシステムネットワークキューが異常 | キャッシュが 1024 であることを確認し、必要に応じてCAN0を再設定 |
mcu 'xxx': Invalid CAN uuid | CAN UUIDの記入ミス、またはデバイスがオフライン | UUIDを再検索し、配線順序、電源供給、終端抵抗を確認 |
Serial connection closed | Klipperは設定を見つけたが、接続が切断された | CANネットワーク品質、配線順序、終端抵抗、ファームウェアレートを確認 |
Klipperのその他のエラーについては、一般的なエラーメッセージ を参照してください。
IDが見つからない場合の確認手順
ip -details link show can0を実行し、CAN0が存在し、使用可能な状態であることを確認します。- ツールボードとメインボードのファームウェアのCANレートが、上位機のCAN0レートと一致していることを確認します。
- デバイスIDが既に
printer.cfgに書き込まれている場合は、まず対応する設定を一時的にコメントアウトし、約10秒間電源を切ってから再び電源を入れて検索します。 - CAN-HとCAN-Lが逆接続、断線、または接触不良になっていないか確認します。
- CANネットワークの両端にそれぞれ
120Ωの終端抵抗があることを確認します。装置全体の電源を切った状態でCAN-HとCAN-L間の抵抗値を測定し、約60Ωであることを確認します。 - ツールボードまたはメインボードに正常に電源が供給されていることを確認します。
- ファームウェアコンパイル時に正しい通信方式が選択されていることを確認します。
- 検索結果が
Application: CANBOOTまたはApplication: Katapultと表示された場合は、最初にKlipperファームウェアを書き込んでから再検索してください。
終端抵抗のルール
| デバイスタイプ | 終端抵抗の要件 | 操作説明 |
|---|---|---|
| CANツールボード | 120Ω 終端抵抗が必要 | ボード上のジャンパーピンまたはディップスイッチで有効化 |
| メインボードCANインターフェース | 120Ω 終端抵抗が必要 | ボード上のジャンパーピンまたはディップスイッチで有効化 |
| UTOCタイプ変換モジュール | 通常、120Ω 抵抗が内蔵済み | 追加で終端抵抗を有効にする必要はありません |
クイック確認手順
- まずデバイス確認:
lsusbを実行し、1d50:606fが表示されることを確認します。 - 次に設定確認:
ip -details link show can0を実行し、CAN0が存在し、レートが正しく、キャッシュが1024であることを確認します。 - 最後にハードウェア確認: 完全に電源を切った状態でCAN-HとCAN-L間の抵抗値を測定し、約
60Ωであることを確認します。
これらすべてを確認しても異常が続く場合は、USBケーブル、CANケーブル、UTOC、またはCANブリッジデバイスを交換してクロステストを試みてください。
CANデバイスファームウェア更新リファレンス
このセクションは、既にCANネットワークに接続できており、CAN経由でメインボードまたはツールボードのファームウェアを更新する必要があるシナリオ向けです。製品ごとにファームウェアの名前やコンパイル方法が異なりますので、まず該当する製品のチュートリアルに従ってファームウェアをコンパイルしておいてください。
準備
- 製品チュートリアルに従って、新しいファームウェアをコンパイルします。
- デバイスのCAN UUIDが検索可能であること、または
printer.cfgにそのデバイスのcanbus_uuid:が記入されていることを確認します。 - 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 というメッセージが表示されれば、通常は書き込み成功です。
更新後の操作
更新が完了したら、Klipperを再起動します。
sudo systemctl start klipper
更新後に接続できない場合は、CAN IDを再検索し、printer.cfg 内の canbus_uuid: が正しいことを確認してください。
最終確認チェックリスト
CAN IDが見つからない、またはKlipperがCANデバイスに接続できない場合は、以下の順序で素早く確認してください。
can0がシステムに認識されていること。bitrateがファームウェアコンパイル時に設定したCANレートと一致していること。qlenまたはtxqueuelenが1024であること。- CAN-H と CAN-L が逆接続されていないこと。
- CANバス両端の終端抵抗が正しいこと。
- ツールボードまたはメインボードへの電源供給が正常であること。
- ファームウェアの通信方式が正しく選択されていること。
printer.cfgで実際に検索したcanbus_uuid:を使用していること。- 同じ
[mcu]内でserial:とcanbus_uuid:が同時に有効になっていないこと。