RISC-V MCU中文社区

RV-STAR快速开发

1. Nuclei Studio下载及运行

用户可以访问芯来科技公司官方网站的“文档与工具”页面(https://nucleisys.com/download.php),如下图中方框所标识,根据用户开发环境,下载对应Windows或Linux的Nuclei Studio压缩包。

注意:

  • 芯来科技公司会对其提供的工具进行持续的更新与维护,建议选用最新版本
  • 目前已在Win 10(64位)系统,Ubuntu 18.04/20.04和 Redhat7.6(64位)版本上验证测试,推荐在以上版本的系统中使用。

60b9ff398449db2dcfef9197e2187ae6.jpg
下载完成后,解压压缩包,随后运行NucleiStudio文件夹下面的可执行文件,即可启动Nuclei Studio IDE,如下图所示。

e0eb29cd-e812-4e3e-b48f-801fb036e129.jpg

上图为Windows版本示意图,Linux版本类似,可执行文件名为“NucleiStudio”

第一次启动Nuclei Studio IDE后,将会弹出对话框要求设置Workspace目录路径,该目录将用于存放后续创建的项目工程文件,用户可自行选择存放地址,如下图所示。
1d8da60a-0063-4ebe-846b-15a645eb7940.png

设置好Workspace目录之后,单击“Launch”按钮,将会启动Nuclei Studio。第一次启动后的Nuclei Studio界面如下图所示。

3e4e7f153febbdf0b299b8d821ff5974.png

2. 导入Nuclei SDK

在Nuclei Studio菜单栏选择“RV-Tools —> Nuclei Package Management”,弹出对话框如下图所示。
d10cfb1a-ab44-48fa-83c1-b0b0d4cc8076.png

展开\”sdk-nuclei_sdk\”可见其状态为“Not Installed”。
d2eb01f7-a357-4dae-90ac-8ee2ea76ca1b.png

勾选\”sdk-nuclei_sdk\”,点击“Download”,即可导入Nuclei SDK,完成后会显示其状态为“Installed”。
91c07a10-4ff2-436e-b701-ab4981bc62f7.png

3. 新建HelloWorld工程

在Nuclei Studio菜单栏选择“File —> New —> New Nuclei RISC-V C/C++ Project”,如下图所示。
0060a8ad-734f-4f69-ab9c-e1aafe982c1c.jpg

在弹出对话框中选择“Nuclei GD32VF103 RVSTAR Board”栏目下的“sdk-nuclei_sdk”,点击“Next”。

f4807b45-b3e5-42af-ba4e-80967d641f62.jpg

进入新建工程设置界面,如下图所示,在“Project Name”栏输入项目名“helloworld”,在“Project Example”下拉栏中选择“Helloworld @app-nsdk helloworld”,其他配置选项可保持不变,点击“Finish”即可完成HelloWorld例程的创建。

8479226b-55ca-4a80-a964-1c09f3b54f13.jpg

项目创建完成后,界面如下图所示,从图中左侧Project Explorer栏中可以看到,创建好的项目已经包含了Nuclei SDK的支持。
518af2ce-c714-49d5-9067-af4bc1098a18.png

4. 工程介绍

查看main函数可知,该项目主要功能为

  • 读取MISA CSR寄存器,并打印
  • 分析MISA CSR寄存器内容,得到处理器的指令集架构,并打印
  • 打印“Hello World From Nuclei RISC-V Processor!” 20次
    8db71561-2a99-4b74-b10f-85e832ce90c0.png

注意:

  • 对于Printf函数的实现,是通过底层Newlib C运行库中的桩函数write函数进行的字符逐个输出,write函数最终调用_write函数,而该函数被实现在nuclei_sdk/SoC/gd32vf103/Common/Source/Stubs/newlib/write.c文件中,其代码如下
    e46d239c-e709-467a-a6de-ddcf3de5e41b.png
    从上述具体实现中可以看出,该函数通过调用UART模块的uart_write函数来实现输出字符重定向至UART将其输出,最终显示在主机PC的显示屏幕上(借助主机PC的串口调试助手软件)。
  • GD32VF103 MCU串口的使用需要先进行初始化设置,该过程已在MCU上电运行至main函数之前完成,因此print函数可通过串口进行输出。关于串口的初始化设置可查看nuclei_sdk/SoC/gd32vf103/Common/Source/system_gd32vf103.c文件,具体实现在_premain_init函数中。

5. 工程编译

新创建完成的工程已经设置好编译链接相关的配置选项,可单击Nuclei Studio IDE菜单上的“锤子”按钮直接进行编译。
若编译成功,则显示如下图所示,能够看到所生成可执行文件的代码大小,包括text段、data段和bss段,以及总大小的十进制和十六进制数值,编译生成的可执行文件存放在Debug目录下。
7c8ff0b7-607c-4a93-a86b-59b04c4ca1d9.jpg

6. 工程运行

首先需要进行硬件的连接,通过一根USB Type-C电缆线将RV-STAR开发板与PC进行连接,线缆连接好后,板上的蓝色电源灯会点亮,如下图所示。
08c06ed7-892f-478e-bc59-f57909daee74.jpg

注意:

  • 第一次使用RV-STAR开发板,对于Linux系统环境下需要为其设置驱动(Windows环境下免驱),具体操作如下(以Ubuntu 20.04系统环境为例)
    使用如下命令查看USB设备的状态
       lsusb     // 运行该命令后会显示如下信息。
       ...
       Bus 001 Device 004: ID 0403:6010 Future Technology Devices International, Ltd FT2232xxxx
    
    使用如下命令设置udev rules,使得该USB设备能够被plugdev group所访问
       sudo vi /etc/udev/rules.d/99-openocd.rules
       // 用vi打开该文件,然后添加以下内容至该文件中,然后保存退出。
       SUBSYSTEM==\"usb\", ATTR{idVendor}==\"0403\",
       ATTR{idProduct}==\"6010\", MODE=\"664\", GROUP=\"plugdev\"
       SUBSYSTEM==\"tty\", ATTRS{idVendor}==\"0403\",
       ATTRS{idProduct}==\"6010\", MODE=\"664\", GROUP=\"plugdev\"
    
    使用如下命令查看该USB设备是否属于plugdev group
        ls /dev/ttyUSB*            // 运行该命令后会显示类似如下信息。 
        /dev/ttyUSB0 /dev/ttyUSB1
        ls -l /dev/ttyUSB1         // 运行该命令后会显示类似如下信息。
        crw-rw-r-- 1 root plugdev 188, 1 Nov 28 12:53 /dev/ttyUSB1
    
    将主机用户添加到plugdev group中
         whoami     // 运行该命令能显示主机用户名,假设主机用户名显示为your_user_name
                    // 运行如下命令将your_user_name添加到plugdev group中
         sudo usermod -a -G plugdev your_user_name
    
    确认主机用户是否属于plugdev group
         groups     // 运行该命令后会显示类似如下信息。 
         ... plugdev ...
         // 只要从显示的groups中看到plugdev则意味着主机用户属于该组,表示设置成功
    
  • 由于板载调试器还包含了“将MCU的UART转换成USB输出”功能,因此将RV-STAR开发板与PC连接后,将被主机识别成一个COM串口,可通过PC的设备管理器查看该串口端口号。

然后设置PC端串口调试工具。Nuclei Studio IDE中集成了串口工具,在其菜单栏中选择“Window—>Show View—>Terminal”,如下图所示,点击“Terminal”窗口中的“显示器”图标按钮,打开串口工具配置界面。
efa28004-7abe-454e-9207-6248e008c834.jpg

弹出窗口如下图 所示,对串口通信相关参数进行设置,具体为115200 baud, 8 bits data, no parity, 1 stop bit (115200-8-N-1)。其中的串口端口号,需要将RV-STAR开发板与PC主机进行正确连接后,可通过PC主机的设备管理器进行查看。
8120c64b-dcb9-45e8-a2b1-37c395040660.png

在Nuclei Studio IDE菜单栏下方的“Launch Bar”中设置模式为“Run”,配置为“helloworld_debug_openocd”,如下图所示。
ae8ff731-6d0e-49e2-a8de-e5f9937823ce.jpg

设置完成后,点击绿色“运行”按钮即可开始下载程序至RV-STAR开发板,并运行示例工程,helloworld示例运行后打印结果如下图所示。
2798e5bf-5541-47c1-8287-8e526827e3b2.jpg

7. 工程调试

进行调试前,需要完成示例工程的编译,以及RV-STAR开发板与PC的正确连接。然后,在Nuclei Studio IDE菜单栏下方的“Launch Bar”中设置模式为“Debug”,配置为“helloworld_debug_openocd”,如下图所示。
8dd11953-8480-4460-b714-28f4284ad398.jpg

设置完成后,点击“甲壳虫”按钮即可开始下载程序至RV-STAR开发板,并进入调试模式,界面如下图所示。

0d038300-82a5-4fb1-b722-4426abdddf94.jpg

更多参考文档