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
$ ~/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
----------
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
-----------
can0 3F0 [1] 00
-----------
- 3F0 (CAN ID):這是主控端(PCAN-USB/你的系統)發送出去的「點名廣播訊號」。
- [1] 00:代表這是一個長度為 1 內容為 00 的請求封包,意思是向總線上所有 Klipper 設備高喊:「請報告你們的身份與狀態!」
上面的內容,應是 host 先送出查詢封包,即第二筆封包的內容。然後 EBB42 回傳狀態資料,即第一筆封包的內容。但因為 candump 的處理機制,兩筆資料倒過來印出。問了 Gemini,做了一堆推測,看不懂,算了。
沒有留言:
張貼留言