国产RISCV MCU 沁恒CH32V103上手体验
- 1.概述
- 2.上手体验
- 3.深度探究
- 3.1 编程模型
- 3.2 riscv寄存器分析
- 3.3 代码尺寸
- 4.小结
1.概述
最近由于stm32的价格疯涨以及stm32 mcu芯片的缺货,导致很多电子产品的方案慢慢会考虑一些国产替代方案,比如兆易创新的GD系列芯片等等。随着riscv在国内的发展壮大,许多riscv架构的mcu芯片也逐渐的成为可以供选择的方案。那么这款MCU的性能、体验、开发上手难度、实用性等等角度上,究竟体验如何,下面文章将做一个简单的概述,同时利用目前对RISCV的知识层面的理解,去分析这个芯片的使用。
从官网上购得一块评估板,价格55元,这个价格买一块mcu开发板,还带调试器,感觉还是合理的。
发货配置上,有一块开发板,一个调试器,还有两颗芯片。
这看起来还是有一些特点,开发板还有一个产品质保卡,这个也算是有心了。
那么这块开发板一些特性如何,根据芯片手册可以查阅到:
- 内核
首先内核部分采用riscv架构,指令集为RV32IMAC,这些基本上都是标准的MCU的配置,当然没有支持F(单精度浮点),D(双精度浮点),更不用考虑DSP扩展,或者一些加密指令扩展,或者向量V扩展了。
对于基本的单片机功能,RV32IMAC
的指令集架构完全是足够的,可以类似于stm32f103系列。
在主频上,是80MHz系统的主频。
- 外设存储
作为MCU选型方案中,SRAM和FLASH也是非常重要的评估参数,CH32V103
配置了20KB的SRAM以及64KB的Flash,封装引脚为48pin或者64pin。这样对标stm32的产品线系列如下所示。
可以和STM32F103C8或者STM32F103R8做一个横向对比。
另外可以看一下外设接口部分
这些都是比较常用的功能,作为一款MCU来说,没有什么可以评价的。
下面来看一下上手体验。
2.上手体验
用MCU做产品,很重要的是开发调试方便,而目前riscv这一块和arm还是有一些差距的。在用户体验方面,也需要不断的积累经验。但是有了IDE,就不用命令行了,这样开发难度就会少许多。
硬件连接
CH32V103需要使用WCH-Link进行开发连接,不同于传统的FT232H等,WCH-Link采用的是自研的CH549G
。应该也是集成了JTAG和串口等协议。
整体的硬件连接如下所示:
连接上调试器采用的是两线JTAG。
下载软件
首先需要下载WCH-Link
的驱动,可以从下面的地址下载:
http://www.wch.cn/downloads/WCHISPTool_Setup_exe.html
下载安装完成后,可以在电脑的设备管理器中找到安装的设备。最好安装设备后,重新插拔一下。
下载编程的IDE,这里采用的是MounRiver Studio
代码语言:javascript复制http://mounriver.com/
下载完成后,打开可以看到是通过eclipse改进的。
在功能和插件上做了一些定制,对于现有的IDE来说,用eclipse进行改进是最高效也是最简单的方式。如果重新写一个IDE,那么工作量也是非常大的。
下载调试,都可以通过eclipse上的图标进行,整体上和其他的riscv ide的使用上差别不大。
下载demo
作为一款mcu,其功能很重要,开发体验很重要,提供的库函数和示例代码也非常的重要。
代码语言:javascript复制http://www.wch.cn/downloads/CH32V103EVT_ZIP.html
在官方的例程中,提供了下面一些示例代码。
这些例子基本可以满足工程师开发的需求。从这一点来说,还是可以的。
3.深度探究
前面文章只是介绍了可见的东西,下面来分析一些比较关键的问题。
3.1 编程模型
作为使用芯片的评估者来说,代码写的好不好用,API写的稳不稳定,是否规范,这些都是非常关键的,好的底层代码直接拿来用,非常的放心,只用关注业务逻辑的好坏即可。因为直接操作寄存器也是有一定的门槛的。
就拿常用的UART的API来分析,可以看到如下API列表
采用的是结构体对象定义设备的方式,这种与STM32的编程模型类似,基本上是为了满足习惯了使用STM32的客户群体。
而拿出一个函数分析编程的风格,注释还是比较的清晰,整体的编程模型,和STM32类似。
这一块,外设编程模型算是比较简单,那么中断的编程模型呢?
在riscv定义中,一般有两种中断模型,一种是向量中断,一般常用的MCU都会是这样,一种是非向量中断模型,非向量中断模型只有一个中断入口,在一个入口中判断中断的类型。很显然,CH32V103采用的是向量中断。
向量中断的实时性稍微好一些。
在其中断的判决上,也是采用了一个NVIC的中断控制器,这个中断控制器与Cortex相比有什么区别,不得而知,个人认为应该是一样的,通过编程模型可以看到。
首先设置中断线,再设置NVIC,这一点与STM32很像。
3.2 riscv寄存器分析
虽然硬件调试器采用的是WH-Link,但是还是可以看到调试用的是openocd协议。
此时会列出所有的寄存器的信息。大概看了一下,基本没有自定义寄存器,所有的寄存器都是官方定义好的,而且只实现了m-mode下的寄存器。
这就意味着,不用修改编译器,不用修改openocd等等,直接用标准的即可。
然后再进一步分析编译工具链
上述图片可以得出如下结论:
- 编译器版本为8.2.0
- 从xPack获取的编译器的源代码
- 编译器只使能了abi=ilp32,arch=rv32imac的选项
- 该编译器是沁恒自己编译出来的,并未直接采用编译好的网上可以下载好的二进制文件
3.3 代码尺寸
在这种小容量的MCU上,代码尺寸也是需要关注的问题,在这个方面,一般是通过编译器库函数做优化。先看一个EXTI0的例子,编译出来后,效果如下:
文本段7.2KB,hex的大小为2.5K,所以整体上来看,占用的尺寸还算可以,但是在库函数的优化上,也应该没有做特殊的优化处理。
4.小结
以上就是沁恒CH32V103芯片相关的信息,本次探究基本上是简单的上手体验,加入一些自己的思考。在目前的情况下来看,沁恒的这个芯片总体上来说,从开发体验上,资料提供的完整度上来看,我都还是比较认可,抛开国产芯片的角度上来看,新的riscv架构做的芯片,在生态建设上确实还需要加强。如果后期生态完善,那将是更加的有利的事情。总体上手并不复杂,做产品方案评估感觉也比较简单,后续还要再看看性能方面的问题。