2026年6月26日 星期五

PCAN-USB(CAN bus)連接 EBB42 工具板

PCAN-USB(CAN bus)連接 EBB42 工具板

------------------
$ ip -details link show can0
3: can0: <NOARP,ECHO> mtu 16 qdisc noop state DOWN mode DEFAULT group default qlen 128
    link/can  promiscuity 0  allmulti 0 minmtu 16 maxmtu 16 
    can state STOPPED (berr-counter tx 0 rx 0) restart-ms 0 
  pcan_usb: tseg1 1..16 tseg2 1..8 sjw 1..4 brp 1..64 brp_inc 1
  clock 8000000 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 tso_max_size 65536 tso_max_segs 65535 gro_max_size 65536 parentbus usb parentdev 5-1:1.0 

# 手動改變設定,可以成功完成列印
$ sudo ip link set can0 up type can bitrate 1000000

$ ip -details link show can0
3: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UP mode DEFAULT group default qlen 128
    link/can  promiscuity 0  allmulti 0 minmtu 16 maxmtu 16 
    can state ERROR-ACTIVE (berr-counter tx 0 rx 0) restart-ms 0 
  bitrate 1000000 sample-point 0.750
  tq 125 prop-seg 2 phase-seg1 3 phase-seg2 2 sjw 1 brp 1
  pcan_usb: tseg1 1..16 tseg2 1..8 sjw 1..4 brp 1..64 brp_inc 1
  clock 8000000 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 tso_max_size 65536 tso_max_segs 65535 gro_max_size 65536 parentbus usb parentdev 5-1:1.0 


$ sudo apt-get update
$ sudo apt-get install can-utils -y


$ ~/klippy-env/bin/python ~/klipper/scripts/canbus_query.py can0
Found canbus_uuid=82360ff863a5, Application: Klipper
Total 1 uuids found


$ candump can0
  can0  3F1   [8]  20 82 36 0F F8 63 A5 01
  can0  3F0   [1]  00

------------------

測試順序及結果

開機時,can0 為 DOWN。先關掉 klipper service,再開啟 can0 UP

這時執行 query,可找到裝置。同時用 candump 查看傳遞內容。

----------------------
$ ~/klippy-env/bin/python ~/klipper/scripts/canbus_query.py can0
Found canbus_uuid=82360ff863a5, Application: Klipper
Total 1 uuids found

candump 內容如下
candump -t d can0
 (000.000000)  can0  3F1   [8]  20 82 36 0F F8 63 A5 01
 (000.000015)  can0  3F0   [1]  00
------------------------

candump 內容分析

執行上述查詢,candump 跳出了兩筆關鍵資料,逐行拆解如下。

第一筆封包:

--------
  can0  3F1   [8]  20 82 36 0F F8 63 A5 01
----------

  • 3F1 (CAN ID):這是 EBB42 收到點名後,回覆給系統的專屬預設 ID。
  • [8]:代表後面帶有 8 個位元組(Bytes)的資料。
  • 20 82 36 0F F8 63 A5 01 (資料內容):
    • 第一個 Byte 20:這在 Klipper 的自訂協定中通常是命令或狀態字頭(Header)。
    • 接下來的 6 個 Bytes 82 36 0F F8 63 A5:工具板的 UUID(82360ff863a5)。
  • 最後一個 Byte 01:這個代碼代表的是 Application 的狀態。在 Klipper 的通訊定義中,01 代表目前運行的程式是 Klipper(如果是 00 則代表處於 Katapult 引導模式)。

第二筆封包:

----------
  can0  3F0   [1]  00
-----------

  • 3F0 (CAN ID):這是主控端(PCAN-USB/你的系統)發送出去的「點名廣播訊號」。
  • [1] 00:代表這是一個長度為 1 內容為 00 的請求封包,意思是向總線上所有 Klipper 設備高喊:「請報告你們的身份與狀態!」

上面的內容,應是 host 先送出查詢封包,即第二筆封包的內容。然後 EBB42 回傳狀態資料,即第一筆封包的內容。但因為 candump 的處理機制,兩筆資料倒過來印出。問了 Gemini,做了一堆推測,看不懂,算了。



沒有留言:

張貼留言

網誌存檔