論壇總覽 GD32 RISC-V 論壇 開始使用GD32 RISC-V Nano/Pico 深入淺出GD32 RISC-V Nano/Pico – (五) Dfu-util 安裝與使用說明

標籤: ,

正在檢視 1 篇文章 - 1 至 1 (共計 1 篇)
  • 作者
    文章
  • #584
    johnson
    管理員
    @johnson

    什麼是DFU?

    前情提要:

    Mapleboard RISC-V工具鏈建置與使用

    MapleBoard RISC-V 工具鏈範例使用教學

    DFU是設備韌體升級(Device Firmware Upgrade )的簡稱,是USB(Unuversal Serial Bus)通訊協定下的其中一個協定,這個協定讓所有USB設備都可以透過與USB規範相容的主機進行設備韌體更新,不管是手機,遊戲機,或者我們的GD32 RISC-V Nano/Pico,只要處理器有支援DFU模式,就能夠透過簡易的Type-C或者Micro USB接口燒錄或更新韌體。

    在Linux系統下,常見的DFU燒錄工具有dfu-utilfwupd等,我們使用dfu-util作為GD32 RISC-V Nano/Pico的燒錄工具。

    dfu-util官方網站:http://dfu-util.sourceforge.net/

    dfu-util 原始碼:https://sourceforge.net/p/dfu-util/dfu-util/ci/master/tree/

    MapleBoard範例程式中,使用make dfu上傳編譯後的韌體畫面

    下載dfu-util韌體上傳工具

    一般來說,Linux系統會內建dfu-util, 但是不一定會是最新版本。在終端機視窗中輸入:

    $ dfu-util -v

    可以確認dfu-util版本。

    最新版本的dfu-util Copyright會是2010-2020 而不是2010-2016。

    在dfu-util的原始碼中我們可以看到,最後一次更新時間是在2020年06月30號,開發者將GD32V系列晶片加入到軟體的udev清單中。因此在這個日期之前安裝的dfu-util都是無法上傳程式碼到GD32V的,除非有自己更改過udev檔案,但這部份比較複雜,有興趣了解的朋友可以參考udev Wiki 。

    我們把經過測試的dfu-util放在Github備份起來,使用者可以前往下載:

    https://github.com/MapleBoard/dfu-util-ver-20200730

    安裝dfu-util

    在終端視窗中輸入:

    $ git clone https://github.com/MapleBoard/dfu-util-ver-20200730

    將原始碼下載下來後,將終端視窗工作目錄移動到”dfu-util-ver-20200730″下。
    依序輸入:

    $ ./autogen.sh
    $ ./configure
    $ make
    $ sudo make install

    此時畫面會跑一段時間,完成後輸入

    $ dfu-util -v

    確認dfu-util的版本是不是如左上圖所示。

    *若出現如下錯誤:

    checking for libusb-1.0 >= 1.0.0... no
    
    configure: error: *** Required libusb-1.0 >= 1.0.0 not installed ***
    
    make: *** [Makefile:329: config.status] Error 1

    不一定代表電腦沒有安裝libusb1.0-0,筆者到的狀況是需要安裝開發者版本

    輸入以下指令:

    $ sudo apt-install libusb-1.0-0-dev

    接著重新執行make指令即可。

    dfu-util 建置過程

    進入DFU模式

    GD32 RISC-V Nano/Pico進入DFU模式的方式很簡單。

    首先,先透過USB Type-C連接線將開發板與電腦連接起來。

    接下來,先按住開發板上的BOOT按鍵不放,與此同時,按下RST鍵並放開,最後放開BOOT鍵。

    這時候GD32VF103CBT6會進入DFU模式等待主機端將欲更新的韌體上傳到晶片中,因此所有開發板的動作都會停止,如LED不再閃爍,LCD也不會動作。

    這時候我們就可使以用dfu-util上傳機器碼到開發板上。

    使用dfu-util

    將Mapleboard工具鏈範例建置好的.bin韌體程式碼上傳到GD32 RISC-V Nano/Pico只需要一個指令:

    $ dfu-util -d 28e9:0189 -a 0 --dfuse-address 0x08000000:leave -D ~/Mpb-toolchain-Example/src/build/gd32vf103.bin

    若出現錯誤,請在dfu-util前加上sudo使用超級使用者執行。

    $ sudo dfu-util -d 28e9:0189 -a 0 --dfuse-address 0x08000000:leave -D ~/Mpb-toolchain-Example/src/build/gd32vf103.bin

    其中,

    -d 參數代表上傳韌體到特定裝置(device) GD32V的裝置代號是28e9:0189

    -a 參數代表使用內部記憶體

    –dfuse-address 參數代表欲燒錄的記憶體起始位置,可以參考GD32VF103CBT6 Datasheet

    -D 參數則代表Download,站在開發板的角度我們要將新韌體”下載”到開發板上,後面接的是要上傳的韌體檔案位置。

    因此上面的指令就是把位於Mpb-toolchain-Example/src/build/的gd32vf103.bin程式碼上傳到裝置名稱為28e9:0189裝置上,

    且記憶體編號為0,起始位址為0800 0000,燒錄完成後離開dfu模式(:leave參數)

    上傳完成後可以看到開發板上的三色LED燈開始閃爍,大功告成!!

    完成範例程式的開發與燒錄後,下一步就可以前往更進階的應用: 除錯。

    在專案開發過程中,程式常常會做出意想不到的動作,這時就需要有仿真器來模擬MCU動作,並且透過單步執行來檢視程式執行的狀況,詳情請見:

    MapleBoard GDB 使用教學

    *雖然dfu-util會顯示”Error during download get_status”但是並不影響我們開發GD32 RISC-V Nano/Pico,詳細的資訊可以參考:https://sourceforge.net/p/dfu-util/tickets/85/

    內文中提到GD32V系列MCU使用的記憶體分頁描述與常見的描述不一樣,bug就產生在這裡。

正在檢視 1 篇文章 - 1 至 1 (共計 1 篇)
  • 需要以回覆此篇主題...