I recently purchased the Sipeed Longan Nano - RISC-V GD32VF103CBT6
Development Board from Mouser (mouser no. 713-102991302). I followed the steps from this page to get started with a blinky (see https://longan.sipeed.com/en/get_started/blink.html
)
To flash the board, I apply chapter 4.3 USB DFU download - without success. I’ll describe in detail what I tried and where it fails.
Note: I’m working on a 64-bit Windows 10 computer.
1. Preparatory steps
I first installed VSCode and the PlatformIO plugin as requested in the tutorial.
To install the driver for the Longan Nano
, I couldn’t use Zadig. The entry "GD32 Device in DFU Mode"
simply didn’t appear in the dropdown menu. So I used UsbDriverTool, which you can download here: https://visualgdb.com/UsbDriverTool/
I changed the driver type into 'Libusb-WinUSB'
, which resulted in:
2. First firmware upload trial
After building the blinky project, I hold down the BOOT
button while pressing the RESET
button. Then I release the BOOT
button and I hear the typical Windows sound that a new USB device is discovered. I press the upload button in the VSCode bottom toolbar and I see this (--verbose
mode is on):
C:\Users\Kristof\.platformio\packages\tool-dfuutil\bin\dfu-util -d 28e9:0189 -a 0 --dfuse-address 0x08000000:leave -D "C:\Users\Kristof\Documents\PlatformIO\Projects\201212-110018-arduino-blink\.pio\build\sipeed-longan-nano\firmware.bin"
dfu-util 0.9
Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2020 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to http://sourceforge.net/p/dfu-util/tickets/
Opening DFU capable USB device...
ID 28e9:0189
Run-time device DFU version 011a
Claiming USB DFU Interface...
Setting Alternate Setting #0 ...
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
DFU mode device DFU version 011a
Device returned transfer size 2048
DfuSe interface name: "Internal Flash "
Found GD32VF103, which reports a bad page size and count for its internal memory.
Fixed layout based on part number: page size 1024, count 128.
Downloading to address = 0x08000000, size = 8268
Erase [ ] 0% 0 bytes
Erase [====== ] 24% 2048 bytes
Erase [============ ] 49% 4096 bytes
Erase [================== ] 74% 6144 bytes
Erase [======================== ] 99% 8192 bytes
Download [ ] 0% 0 bytes
Download [====== ] 24% 2048 bytes
Download [============ ] 49% 4096 bytes
Download [================== ] 74% 6144 bytes
Download [======================== ] 99% 8192 bytes
Download [=========================] 100% 8268 bytes
Download done.
File downloaded successfully
Error during download get_status
*** [upload] Error 74
==================================================================== [FAILED] Took 2.56 seconds ====================================================================
The terminal process "C:\Users\Kristof\.platformio\penv\Scripts\pio.exe 'run', '--target', 'upload'" terminated with exit code: 1.
As you can see, the firmware seems to upload just fine at first, until suddenly this error appears:
Error during download get_status
3. Second firmware upload trial
After a long search, I finally found this discussion on GitHub (see Unable to flash with dfu-util · Issue #5 · riscv-rust/longan-nano · GitHub)
I conclude from this discussion that there are two kinds of RISC-V microcontrollers out there on the Longan Nano
boards:
GD32VF103C
8
GD32VF103C
B
I have the one ending in a B
, which apparently suffers from a buggy bootloader. The solution they suggest is to use the most recent dfu-util
software. So I navigated to the dfu-util
project to download the latest binaries:
I downloaded the dfu-util-0.10-binaries.tar.xz
file which contains binaries for both Windows and Linux. The tar-file is modified/uploaded at 2020-11-21, so it’s less than one month old.
I find the Windows-64 binaries in:
C:\Users\Kristof\Downloads\dfu-util-0.10-binaries.tar\dfu-util-0.10-binaries\win64
PlatformIO keeps its dfu-util
tool at:
C:\Users\Kristof\.platformio\packages\tool-dfuutil\bin
So here is what I did: I cleaned the folder C:\Users\Kristof\.platformio\packages\tool-dfuutil\bin
and transfered all the binaries from C:\Users\Kristof\Downloads\dfu-util-0.10-binaries.tar\dfu-util-0.10-binaries\win64
there. In other words, PlatformIO will now use the latest dfu-util
tool.
Time for the next firmware upload trial. I hold down the BOOT
button and press the RESET
button on the Longan Nano
board to enter the flash modus. I click the upload button in PlatformIO and get the following output:
> Executing task in folder 201212-110018-arduino-blink: C:\Users\Kristof\.platformio\penv\Scripts\pio.exe run --target upload <
Processing sipeed-longan-nano (platform: gd32v; framework: arduino; board: sipeed-longan-nano)
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
CONFIGURATION: https://docs.platformio.org/page/boards/gd32v/sipeed-longan-nano.html
PLATFORM: GigaDevice GD32V (1.2.0) > Sipeed Longan Nano
HARDWARE: GD32VF103CBT6 108MHz, 32KB RAM, 128KB Flash
DEBUG: Current (jlink) External (altera-usb-blaster, gd-link, jlink, rv-link, sipeed-rv-debugger, um232h)
PACKAGES:
- framework-arduino-gd32v 0.1.1
- tool-dfuutil 1.9.200310
- tool-gd32vflash 0.1.0
- tool-openocd-gd32v 0.1.1
- toolchain-gd32v 9.2.0
LDF: Library Dependency Finder -> http://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 0 compatible libraries
Scanning dependencies...
No dependencies
Building in release mode
MethodWrapper(["checkprogsize"], [".pio\build\sipeed-longan-nano\firmware.elf"])
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM: [= ] 7.2% (used 2358 bytes from 32768 bytes)
Flash: [= ] 6.3% (used 8250 bytes from 131072 bytes)
text data bss dec hex filename
8090 160 2198 10448 28d0 .pio\build\sipeed-longan-nano\firmware.elf
<lambda>(["upload"], [".pio\build\sipeed-longan-nano\firmware.bin"])
AVAILABLE: altera-usb-blaster, dfu, gd-link, jlink, rv-link, serial, sipeed-rv-debugger, um232h
CURRENT: upload_protocol = dfu
C:\Users\Kristof\.platformio\packages\tool-dfuutil\bin\dfu-util -d 28e9:0189 -a 0 --dfuse-address 0x08000000:leave -D "C:\Users\Kristof\Documents\PlatformIO\Projects\201212-110018-arduino-blink\.pio\build\sipeed-longan-nano\firmware.bin"
dfu-util 0.10
Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2020 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to http://sourceforge.net/p/dfu-util/tickets/
Opening DFU capable USB device...
ID 28e9:0189
Run-time device DFU version 011a
Claiming USB DFU Interface...
Error: File ID fdcb:0189 does not match device (28e9:0189 or 28e9:0189)
Setting Alternate Setting #0 ...
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
DFU mode device DFU version 011a
Device returned transfer size 2048
*** [upload] Error 74
==================================================================== [FAILED] Took 1.03 seconds ====================================================================
The terminal process "C:\Users\Kristof\.platformio\penv\Scripts\pio.exe 'run', '--target', 'upload'" terminated with exit code: 1.
I’m out of options now. What should I do to get the dfu-util
to work properly with my Longan Nano
board?