实际risc-v实验环境-longan nano

Creative Commons
本作品采用知识共享署名

本文说明如何搭建longan nano编译调试环境。

将Zephyr开发环境做为risc-v的实验环境一文中说明了如果使用qemu来进行risc-v的实验。但基于qemu-riscv和实际的硬件总是有差别,因此选择了一款非常简单的的risc-v mcu开发板来使用。

硬件选择

选择硬件基于以下几个考量:

  1. CPU内核简单:因为是做为risc-v入门,选择一款含有简单内核的CPU更为容易。
  2. 片上资源丰富:含有常见的外设,方便做一些功能。
  3. 调试方便:有Jtag口方便调试。
  4. 足够开放:能够拿到比较完整reference doc和开源的SDK。
  5. 价格便宜:不解释…..

从上面几点出发,最后选择了sipeed基于gd32vf103CB的开发板longan nano

  1. CPU内核:RISC-V IMCA , 特权M/U, 功能足够且又丰富
  2. 片上资源:Flash 128K, SRAM 32K, Timer 8, WDT 2, RTC 1, UART 3, I2C 2, SPI/I2S 3/2, CAN 2, ADC, DAC, USB Host/Device, GPIO 37
  3. 调试: 支持Jtag
  4. 足够开放:能找到详细的RISC-V内核和MCU reference文档,SDK完全开源
  5. 价格便宜:无屏的20,带屏的37。

更具体的就不拷贝贴到这里了, 详尽的资料可以在http://dl.sipeed.com/shareURL/LONGAN/Nano找到。快速入门可以在https://longan.sipeed.com/zh/找到

编译环境

本文所有的操作都是在Windows 10 WSL1 Ubuntu 20.04下进行

工具链安装

1. 下载

https://www.nucleisys.com/download.php 下载选择Centos/Ubuntu x86-64,链接:
https://www.nucleisys.com/upload/files/toochain/gcc/nuclei_riscv_newlibc_prebuilt_linux64_2020.08.tar.bz2?t=1614350385
也可以从https://github.com/riscv-mcu/riscv-gnu-toolchain编译,参考https://github.com/riscv-mcu/riscv-gnu-toolchain/blob/nuclei-multilib/Build_Nuclei.md

2.安装

下载的文件位置在/mnt/e/riscv/gd32/tool, 执行下面命令解压缩

tar -xvf nuclei_riscv_newlibc_prebuilt_linux64_2020.08.tar.bz2

解压缩后放/mnt/e/riscv/gd32/tool/gcc内,执行下面命令安装到环境遍历

export PATH=$PATH:/mnt/e/riscv/gd32/tool/gcc/bin/

SDK安装

1. 下载

执行下面命令

cd /mnt/e/riscv/gd32/
git clone https://github.com/riscv-mcu/GD32VF103_Firmware_Library.git

2. 编译

cd /mnt/e/riscv/gd32/GD32VF103_Firmware_Library/Template
make

编译完后会产出build文件夹,下面有gd32vf103.elf和gd32vf103.hex,gd32vf103.bin

3. 烧写

Longan nano支持多种烧写方式,这里给出最方便的DFU升级,其它的可以参考https://longan.sipeed.com/zh/get_started/blink.html
下载DFU工具:http://dl.sipeed.com/LONGAN/Nano/Tools/GD32_MCU_Dfu_Tool_V3.8.1.5784_1.rar
解压缩后先安装GD32 MCU Dfu Drivers_v1.0.1.2316
运行 GD32 MCU Dfu Tool.exe 将 Longan Nano 插到电脑,按住 Boot0 键,短按 Reset 键,再松开 Boot0键, 可以看到 DFU 工具中识别到了 GD32VF 芯片,选择gd32vf103.bin,并勾选烧录后校验,点击OK,即可进行烧录。烧录完后可以看到RGB LED交替闪烁。

调试环境

买了两片longan nano,有屏的一片作为开发板,无屏的一片烧写为RV-Link

项目地址https://gitee.com/zoomdy/RV-LINK,可以将longan nano变为Risc-v Jtag调试器RV-Link。
下载https://gitee.com/zoomdy/RV-LINK/attach_files/289479/download/longan-nano%20gd32vf103.hex ,使用DFU Tool将longan-nano gd32vf103.hex烧写到无屏的longan上,烧完复位后能看到绿灯慢闪,此时longgan就已经变成RV-Link了。

调试

硬件连接

将RV-Link的JTAG口和Longan nano JTAG口相连,由于RV-Link是另一片Longan nano,所以两片的JTAG安装板子上的丝印直接相连即可,将相同的丝印的PIN连在一起,所有8条引脚都要连.

将RV-Link通过USB连接入PC,会产生一个USB串口,例如我的就是COM7。由于8条PIN中有VCC和GND,所以被调试的板子会通过RV-LINK供电。

gdb命令行调试

cd /mnt/e/riscv/gd32/GD32VF103_Firmware_Library/Template/build
riscv-nuclei-elf-gdb gd32vf103.elf

进入gdb后,通过下面命令进行连接,你在Windows下看的是COMX,那么就用/dev/ttySX, 我的是COM7,那么就用/dev/ttyS7

(gdb) target remote /dev/ttyS7

执行下面命令做reset/halt

(gdb) monitor reset halt
RV-LINK v0.2: Longan Nano, configed for GD32VF103 family.

执行下面命令重新加载elf

(gdb) load
Loading section .init, size 0x24c lma 0x8000000
Loading section .text, size 0xd88 lma 0x8000280
Loading section .init_array, size 0x4 lma 0x8001008
Loading section .data, size 0x434 lma 0x800100c
Start address 0x800015c, load size 5132
Transfer rate: 12 KB/sec, 641 bytes/write.

然后就可以使用s/n/b/info等命令进行gdb调试了。

VSCode图形化调试

如果觉得用gdb命令行调试不方便可以用vs-code搭配插件native-debug进行图形化调试,在WSL下执行下面命令

cd /mnt/e/riscv/gd32/GD32VF103_Firmware_Library/
code .

会弹出vscode远程连接WSL,在VS-Code中安装插件native-debug,然后点击”运行->添加配置…”在弹出的列表中选择gdb,此时会自动创建并打开一个launch.json文件,将内容修改如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
"version": "0.2.0",
"configurations": [
{
"name": "RISC-V",
"type": "gdb",
"request": "launch",
"target": "./Template/build/gd32vf103.elf",
"cwd": "${workspaceRoot}",
"valuesFormatting": "parseText",

"autorun": [
"target remote /dev/ttyS7",
"load ./Template/build/gd32vf103.elf"
],
"gdbpath": "/mnt/e/riscv/gd32/tool/gcc/bin/riscv-nuclei-elf-gdb"
}

}
]
}

此时在点击”运行->启动调试”就会自动将gd32vf103.elf加载,并启动GUI调试界面,如下效果