論壇總覽 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 篇)
    • 需要以回覆此篇主題...