› 論壇總覽 › GD32 RISC-V 論壇 › 開始使用GD32 RISC-V Nano/Pico › 深入淺出GD32 RISC-V Nano/Pico – (五) Dfu-util 安裝與使用說明
- This topic has 0 則回覆, 1 個參與人, and was last updated 3 years, 6 months ago by
johnson.
-
作者文章
-
2021 年 3 月 7 日 下午 3:01 #584
什麼是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-util,fwupd等,我們使用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就產生在這裡。
-
作者文章
- 需要以回覆此篇主題...