文章總列表

玩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

所以接下來要修韌體bug,以下操作都在RPi裡面操作

  1. 首先用git抓codebase回來
    git clone https://github.com/candle-usb/candleLight_fw

  2. 編輯source code,設定CAN transceiver的S-PIN和LED-PIN到正確的位置
    Edit candleLight_fw/include/config.h


    S-PIN沒有正確拉low,那麼TX不會啟動,無法送封包
    LED沒正確配置,收到封包LED不會閃爍

    我拿電錶測量IC-pin和這些接點,找到對的連結

  3. 編譯軟體,這裡是從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

  4. 燒錄軟體,把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

  5. 最後把boot-pin從23裝回12,插拔USB以後就完成韌體更新

上述步驟最大的意義是

  1. 可以在Pi編譯韌體,用USB更新韌體,下次遇到問題能不用PC更新
  2. 淘寶買的硬體,我能自己處理(甚至燒peak-CAN韌體);下次買這種板子,一入手大概會直接更新韌體再用

也許我應該自己做一批板子,直接放一批在手邊;更根本的解決應該是花錢買驗證過的硬體,不要自己踩坑

留言

這個網誌中的熱門文章

幼犬書桌椅選擇心得 升降桌 兒童桌椅

STM32 UART + DMA,使用HAL實作TX/RX,以及不定長度接收

CANON G3000 廢墨瓶改裝