RISC-V完全学习手册(基于龙眼Longan开发板)
前言
前段时间本人对RISC-V产品产生了浓厚的兴趣, 希望能够上手一探究竟, 在此背景下, 入手了某宝最便宜的龙眼开发板, 在此分享一下上手过程,做抛砖引玉之用. 由于兆易创新RISC-V系列处理器与其现有Arm® Cortex®-M内核产品布局相似, 因此如果您渴望获得该技术的实际操作经验, 兆易创新RISC-V系列处理器是一个很好的开始. 从软件开发人员的角度来看,固件库非常相似.
Longan是由矽速科技推出的一款极简开发板, 板上搭载的主控芯片GD32VF103CBT6是由兆易创新(GigaDevice)开发的, 基于RISC-V内核 (芯来科技Bumblebee), 可以方便广大学生、工程师和极客爱好者低成本接触新一代的RISC-V处理器,了解其特性.
GD32VF103系列MCU是全球第一款基于RISC-V内核的32位通用微控制器,适用于工业控制、消费电子、IoT等嵌入式市场应用.
龙眼板载的GD32VF103CBT6芯片具备以下基本特性:
(来源: GD32VF103数据手册Table 2-2. GD32VF103 devices features and peripheral list)
GD32VF103系列的引脚定义(这里以GD32VF103CBT6的LQFP48封装为例):
(具体引脚的定义参见GD32VF103数据手册Table 2-6. GD32VF103Cx LQFP48 pin definitions)
系统及存储器架构: 基于32位RISC-V处理器, 哈佛架构, 预定义的内存映射和高达4GB的内存访问空间.
※闪存控制器(FMC): 存储了引导装载程序(boot loader)的块, 不能被用户编程或擦除.
※电源管理单元(PMU): 功耗设计是 GD32VF103 系列产品比较注重的问题之一. 电源管理单元提供了三种省电模式
包括睡眠模式, 深度睡眠模式和待机模式. 这些模式能减少电源能耗, 且使得应用程序可以在CPU 运行时间要求、速度
和功耗的相互冲突中获得最佳折衷.
具体的模式和唤醒机制如下所示:
※备份寄存器(BKP): 位于备份域中的备份寄存器可在 VDD 电源关闭时由 VBAT 供电, 备份寄存器有 42个16位(84字节)寄存器可用来存储并保护用户应用数据, 从待机模式唤醒或系统复位也不会对这些寄存器造成影响. 此外, BKP 寄存器也可实现侵入检测和 RTC 校准功能.
※复位和时钟单元(RCU):
GD32VF103复位控制包括三种控制方式:电源复位、系统复位和备份域复位. 电源复位又称为冷复位, 其复位除了备份域的所有系统. 系统复位将复位除了JTAG控制器和备份域之外的其余部分, 包括处理器内核和外设. 备份域复位将复位备份区域.
时钟控制单元提供了一系列频率的时钟功能, 包括一个内部8M RC振荡器时钟(IRC8M)、一个外部高速晶体振荡器时钟(HXTAL)、一个内部40K RC振荡器时钟(IRC40K)、一个外部低速晶体振荡器时钟(LXTAL)、三个锁相环(PLL)、一个HXTAL时钟监视器、时钟预分频器、时钟多路复用器和时钟门控电路.
备注: 设备上电后CPU默认选择IRC8M做为系统时钟源.
※中断/事件控制器(EXTI):
RISC-V集成了改进型内核中断控制器(ECLIC)来实现高效的异常和中断处理. ECLIC旨在为RISC-V系统提供低延迟、矢量化、 抢占式的中断. 当ECLIC被激活后,它将包含并替换现有的RISC-V处理器局部中断控制器.
EXTI触发源包括来自I/O管脚的16根线以及来自内部模块的3根线 (包括LVD、 RTC闹钟、 USB唤醒).
除了中断, EXTI还可以向处理器提供事件信号. RISC-V内核完全支持等待中断(WFI) ,等待事件(WFE)和发送事件(SEV)指令.
备注: 可以阅读RISC-V的技术参考手册,了解有关ECLIC的更多详细信息.
※通用输入/输出接口(GPIO):
每个 GPIO 引脚可以由软件配置为输出(推挽或开漏)、输入、外设的备用功能或者模拟模式. 每个 GPIO 引脚都可以配置为上拉、下拉或无上拉/下拉.
※直接存储器访问(DMA):
DMA 控制器提供了一种硬件的方式在外设和存储器之间或者存储器和存储器之间传输数据,而无需 CPU 的介入,从而使 CPU 可以专注在处理其他系统功能上.
DMA 控制器和 RISC-V 内核共享系统总线. 当 DMA 和 CPU 访问同样的地址空间时,DMA 访问可能会阻挡 CPU 访问系统总线几个总线周期. 总线矩阵中实现了循环仲裁算法来分配 DMA与 CPU 的访问权,它可以确保 CPU 得到至少一半的系统总线带宽.
每个 DMA 通道都有一个专用的中断. 中断事件有三种类型:传输完成,半传输完成和传输错误.
※其他功能...
GD32VF103系列MCU是兆易创新(Gigadevice)携手芯来科技(Nuclei System Technology)合作研发并发布的全球一款基于RISC-V内核的量产通用MCU产品. 该MCU中使用的Bumblebee内核是芯来科技针对GD32VF103定制,授权以及提供工具链和技术支持的一款面向物联网及其它超低功耗场景应用自主联合开发的一款商用RISC-V处理器内核.
(图片来自: https://www.nucleisys.com/product/site/lcxp/)
RISC-V(读作“RISC-FIVE”)是基于精简指令集计算(RISC)建立的开放指令集架构(ISA), V表示为第五代, 它虽然不是第一个开源的的指令集(ISA),但它很重要,因为它第一个被设计成可以根据具体场景选择适合的指令集的指令集架构. 比如Bumblebee内核就是基于RV32IMAC的指令集.
备注: RISC-V 基金会的网站上下载指令集标准规范https://riscv.org/specifications.
我选择的是SEGGER的 Embedded Studio. 大家可以根据自己的喜好选择其它的开发环境.
第1步, 登陆官网下载Embedded Studio并完成本地的安装.
第2步, 打开Embedded Studio, 安装GD32V软件包( 可以看到目前支持RISC-V的厂家还不是很多...)
第2步, 新建一个工程(选择模板,目标芯片,以及需要添加到工程的文件)
第3步, 编译一下这个工程, 确保配置没有问题.
写代码的时候需要首先查阅龙眼开发板的原理图, 详细了解端口的配置情况.
添加文件到工程(可以参考GD32VF103固件库给出的示例工程).
注意: GD32VF103固件库给出的示例工程不是针对龙眼开发板的, 因此我们需要对代码进行一些必要的修改.
以下是我修改过的文件: gd32vf103v_eval.h, gd_eval_led_off, gd_eval_led_on, 设置工程的预编译宏GD32VF103C_START
可以选择ISP方式下载(需要USB转串口线)或者DFU方式下载(仅需一条USB Type-C数据线), 这里选择使用DFU方式下载.
1) 首先下载官方的DFU工具: https://cn.dl.sipeed.com/LONGAN/Nano/Tools
2) 解压之后会出现如下2个文件.
3) 安装驱动程序, 有64位和32位之分, 根据电脑配置选择即可.
4) 运行图形化下载工具 GD32 MCU Dfu Tool.exe, 将Longan插到电脑, 按住Boot0键, 短按Reset键, 再松开Boot0键, 可以进入DFU模式, 此时可以看到DFU工具识别到了GD32VF芯片, 然后选择对应的固件文件, 点击OK, 即可进行烧录.
注意: 烧录完成之后不会自动复位, 需要在上面的DFU工具中选择Leave DFU, 查看运行效果.