玩CAN bus的傢伙們 (4) 修理USB-CAN Dongle
下面介紹的裝置,我前後在淘寶買了10個,最近遇到問題了
玩CAN bus的傢伙們 (1) CandleLight-based USB-CAN
下圖是UDS通訊的封包,第一個byte(游標處)應該是照順序0123456789ABCDEF,但是下圖的順序就錯了,22/2E/23/2F/20/21。這讓封包分析極困難,還得用手排過才能看
問題能用下面指令重現,讓數值依序上升,有跳號容易看得出來
cangen can0 -I 726 -L 8 -D i -g 1
- 首先用git抓codebase回來
git clone https://github.com/candle-usb/candleLight_fw - 編輯source code,設定CAN transceiver的S-PIN和LED-PIN到正確的位置
Edit candleLight_fw/include/config.h
S-PIN沒有正確拉low,那麼TX不會啟動,無法送封包
LED沒正確配置,收到封包LED不會閃爍
我拿電錶測量IC-pin和這些接點,找到對的連結 - 編譯軟體,這裡是從github文件抄出來,如果成功,candleLight_fw.bin會出現在目錄下
mkdir build
cd build
cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/gcc-arm-none-eabi-8-2019-q3-update.cmake
make candleLight_fw - 燒錄軟體,把boot-pin從12切到23,插拔USB讓MCU進入DFU(Device FW Update),正確的話,Linux執行dmesg會跳出下面訊息。關鍵數字0483/df11,這是STM32的DFU模式標準編號
先用apt-get安裝dfu-util,韌體更新工具。這些工具一般會保護韌體,先用以下命令解開。操作前先注意:這個命令會洗掉本來的韌體喔...
dfu-util -s 0:force:unprotect -a 0 -D candleLight_fw.bin
韌體保護解開,用以下命令就能燒錄軟體,不用手工操作dfu-uitil
make flash-candleLight_fw - 最後把boot-pin從23裝回12,插拔USB以後就完成韌體更新
上述步驟最大的意義是
- 可以在Pi編譯韌體,用USB更新韌體,下次遇到問題能不用PC更新
- 淘寶買的硬體,我能自己處理(甚至燒peak-CAN韌體);下次買這種板子,一入手大概會直接更新韌體再用
也許我應該自己做一批板子,直接放一批在手邊;更根本的解決應該是花錢買驗證過的硬體,不要自己踩坑
留言