在 DIY 3D 印表機,第一次使用 CAN 工具頭,很不幸,24V 電源接反,一陣火光,上面的 TMC2209 步進馬達驅動燒毀了。但吃 3.3V 的 STM32G0B1 MCU 還是好的,捨不得丟,當下也想不到可以做什麼用。
使用多買的 EBB42,搭配 FLY D5 使用,順利完成機器設定,可以跑起來,歸位,加熱。但測試列印時,一開始印,就當。懷疑是 FLY D5 同時兼 X / Y 移動控制 和 USB to CAN bus bridge,效能不夠。
以前只用 FLY D5 控制整機,都不會有問題。 打算把 FLY D5 重刷舊的 firmware,另外用 USB to CAN converter 連 EBB42。想要下訂轉換器,等拿到要等約兩個星期,又要把機器擺著,不能繼續後面的整理。
後來想到剩下一半功能的 EBB42,正好可以當 USB to CAN 轉換器使用。
在這過程,靠著 Gemini 幫忙,才能快速順利完成。
燒錄 Katapult
Katapult(前身為 CANBoot)是 Klipper 生態系中常用的 Bootloader,可以無需拆卸或透過 USB 連接,直接透過 CAN 匯流排為 EBB42 工具板無線更新韌體。
1. 正確的 EBB42 Katapult 編譯設定
請回到 katapult 資料夾,執行 make menuconfig 並按照以下參數設定:
- Micro-controller Architecture: Stm32
- Processor model: STM32G0B1
- Build Layout: No bootloader (因為 Katapult 自己就是引導程式)
- Clock Reference: 8 MHz crystal
- Communication interface: USB (on PA11/PA12) <-- 關鍵:選這個才會出現 /dev/serial/by-id/
- Application start offset: 8KiB offset (這決定了之後 Klipper 存放在哪裡)
- Support bootloader entry on rapid double click of reset button: Enabled (非常有用的功能,快速按兩下 Reset 就能進入燒錄模式)
- Enable Status LED: Enabled
- Status LED GPIO Pin: PA13 (EBB42 的藍燈)
2. 重新燒錄 Katapult
編譯完後(make),再次進入 DFU 模式燒錄:
sudo dfu-util -a 0 -d 0483:df11 --dfuse-address 0x08000000:force:mass-erase -D out/katapult.bin
重啟後,假如還沒燒錄 klipper firmware,會直接進入 Katapult,藍色 LED 閃爍。
把 EBB42 刷成 「USB 轉 CAN 橋接網卡」
進入 Klipper 的 make menuconfig:
- Micro-controller Architecture: STM32
- Processor model: STM32G0B1
- Communication interface: 💡 關鍵! 選擇 USB to CAN bus bridge
- CAN interface: 選擇板子上連向 CAN 晶片的腳位(EBB42 v1.1/v1.2 通常是 CAN bus (on PB0/PB1),請對照你的原廠 Pinout)。
- CAN bus speed: 1000000。
燒錄指令
指令如下
$ ~/klippy-env/bin/python ~/katapult/scripts/flashtool.py -d /dev/serial/by-id/usb-katapult_stm32g0b1xx_3E0034000250505539323520-if00
------------------
刷好之後,用 USB 線把它插上 Orange Pi。這時候,這張燒掉驅動的 EBB42 在 Linux 系統裡,就會直接變成標準的 can0 實體網卡!
~/klippy-env/bin/python ~/klipper/scripts/canbus_query.py can0
Queue 長度太少問題
另外使用新改的 EBB42 USB-to-CAN 連接 EBB42 CAN 工具板,可ivo執行列印測試,但列印一陣子後,還是當掉,出現 "MCU 'mcu' shutdown: Timer too close" 的錯誤。
當機的原因是 'Got error -1 in can write: (105)No buffer space available'。在 Klipper 的相關文件提到,要將 CAN 的 txqueuelen 增加到 128,原來預設是 10。但也不能設到太大,怕等待時間太長,影響 Klipper 的錯誤判斷的時效。
Klipper 的文件,說可以建立 /etc/network/interfaces.d/can0,開機或接上裝置後,自動設定,但照著做,並沒有效果。改用 udev rule,可以成功運作。設定如下。
連上裝置後,等待半秒鐘後,系統完成設定,再修改 txqueuelen。

