去年九月份的时候 rt-thread 的 andy chen 组织定做了一块 gd32v 开发板,托 andy 的福,我也搭车买了一块。
这块开发板小巧精美,供电、烧录、调试信息打印都是通过一个 type-c usb 接口进行,更重要的是它所搭载的主控芯片 gd32vf103 是一颗采用 risc-v 内核设计的 mcu,这对于对 risc-v 感兴趣的同学来说,具有十足的吸引力。
gd32vf103 系列 soc 是兆易创新与芯来科技合作,基于 risc-v 架构设计的一款面向 iot 领域的 mcu,主频最高 108 mhz,根据定位差异,片内 flash 16~128 kb,片上 sram 8~32 kb。
在定制这块板子的时候,陈老大为我们选了 flash 和 sram 容量最大的那颗,所以在选择上大家不用纠结。
更加难能可贵的是兆易开放了完整的用户手册,有 500 多页。这颗芯片采用的 risc-v 内核是芯来科技设计的,代号 bumblebee,芯来科技也开放了一份关于 bumblebee 的指令架构手册,详细描述了这颗芯片采用的 risc-v 指令集、内核特权架构、中断异常、timer 以及低功耗相关的机制,总的来说,用这颗芯片来做 risc-v 相关的研究学习,还是很合适的。
sdk
随开发板配套了一份 rt-thread nano sdk,里面还包含有开发板的原理图和简单的使用手册以及代码烧写工具 gigadevice mcu isp programmer ,整套 sdk 可以在 https://realthread.cowtransfer.com/s/8350a2c039b740 下载。
由于当时为了让大家尽快拿到开发板,所以仓促中板子上的 jtag 口留下了一点小瑕疵——如果要连 jtag 的话,需要做一点小修改,这个在开发板原理图《gd32vf_evb_v1_20190901》中有说明。
参考配套文档《gd32vf使用说明_20190919》 即可完成 rt-thread 代码的编译,然后根据该文档描述的固件烧录方法,按着板子的 boot0 按键,再按 reset 按键使板子进入烧写模式,然后通过gigadevice mcu isp programmer 烧录固件到板子上。
需要注意的是,板子烧录固件是通过板子上的 uart 转 usb 烧写的,烧录时串口波特率需要设置为 256000,系统启动后,rt-thread 也通过这个 uart 打印调试信息,打印调试信息的波特率为 115200,注意不要搞错了。
另外,同一时刻,串口调试工具和 gigadevice mcu isp programmer 烧录软件,只有一个能占用串口,所以在烧录固件之前要记得关闭串口调试工具,否则有可能会无法正常进入烧录模式。
运行 rt-thread mainline
如果是做产品的话,使用芯片供应商提供的 sdk 是最靠谱的,如果是学习研究的话,我一向喜欢尝试最新的代码,所以 rt-thread mainline 是一定要试一试的。
安装 env 工具 和 risc-v toolchain
rt-thread 支持 windows 和 linux 两种编译开发环境,这里我打算在 windows 下编译开发,所以需要先去 rt-thread 官网下载一个 env 工具:https://www.rt-thread.org/page/download.html
工具下载下来后解压到任何你喜欢的地方,但是记住路径里面不要有中文字符,双击 env.exe 可执行程序就可以启动进入命令行模式,还可以通过右键把它添加到 windows 的开始工具栏。
关于 env 的详细使用说明可以参考《env用户手册》和 《rt-thread 编程指南》,这两份文档在 rt-thread 官网都可以下载:https://www.rt-thread.org/document/site/
我发现工具里面默认只带了 arm_gcc 的 toolchain,这里要编译 risc-v,所以还需要下载 risc-v 的 toolchain,risc-v 官方的 toolchain 在 github 上,地址如下:https://github.com/xpack-dev-tools/riscv-none-embed-gcc-xpack/releases :
选择对应的版本,下载后解压到 env 工具的 /tools/gnu_gcc/risc-v/目录下。
为了能在 env 命令行里面认到 riscv-none-embed-gcc 相关的命令,还需要做如下修改:
即在 env 的 tools/conemu/conemu/cmdinit.cmd 文件里重新设置 rtt_exec_path 环境变量,把原来的 arm_gcc 路径替换成刚才下载的 risc-v toolchain 的安装路径。
我查阅了前面提到的两份rt-thread 文档和官网论坛上关于 env 的常见问题问答贴,没找到关于在 env 里面添加 命令的修改说明,所以上面这个修改方法是我尝试出来的,不一定科学,如果有人知道更科学的修改方法,请告诉我。
当然,前面的 sdk 包里也提供了 env 和 risc-v toolchain,但是在这里我想用最新的工具和代码从头开始尝试下整个过程。
修改 rt-thread mainline 代码
rt-thread 的官方代码托管在 github 上,可以通过 git 下载:
git clone https://github.com/rt-thread/rt-thread.git
其实 rt-thread mainline 已经支持了 gd32vf103 ,不过对应的开发板是 gigadevice 官方的 gd32vf103-eval。
这块开发板和我手上的开发板有个很重要的区别——这块开发板上面有贴一颗外部高速晶振,而我手上的板子没有贴,芯片是依靠内部的 8m rc 振荡时钟工作的,内部振荡时钟的精度要低一些,但是对于不使用以太网的场合,基本是够用的。
所以在系统时钟配置部分需要做如下修改:
即把 __system_clock_108m_pll_irc8m 这个宏打开, __system_clock_108m_pll_hxtal 这个宏屏蔽。
我们板子上有带 三个 led、所以流水灯这种经典项目必须加上:
在 bsp/gd32vf103v-eval/applications/main.c 文件的 main 函数中加入如下内容:
rt_kprintf(“hello gd32vf103vbt6! build %s %s
”, __date__, __time__);
// gpio clk rcu_periph_clock_enable(rcu_gpioe); // gpio init gpio_init(gpioe, gpio_mode_out_pp, gpio_ospeed_2mhz, gpio_pin_3); gpio_init(gpioe, gpio_mode_out_pp, gpio_ospeed_2mhz, gpio_pin_4); gpio_init(gpioe, gpio_mode_out_pp, gpio_ospeed_2mhz, gpio_pin_5);
while (1) { gpio_bit_reset(gpioe, gpio_pin_3);rt_thread_mdelay(300);
gpio_bit_reset(gpioe, gpio_pin_4);rt_thread_mdelay(300);
gpio_bit_reset(gpioe, gpio_pin_5);rt_thread_mdelay(300);
gpio_bit_set(gpioe, gpio_pin_3);rt_thread_mdelay(30);
gpio_bit_set(gpioe, gpio_pin_4);rt_thread_mdelay(30);
gpio_bit_set(gpioe, gpio_pin_5);rt_thread_mdelay(30); }
修改后的代码我推送到了gitee 上,如果有同学感兴趣,可以直接 clone 下来 have a try:
git clone https://gitee.com/andyshrk/rt-thread.git
编译
打开 env 工具,进入 rt-thread 源码的 /bsp/gd32vf103v-eva/ 目录下运行 scons 命令进行编译:
编译成功会生成 rtthread.bin 文件,参考提到的文档使用 gigadevice mcu isp programmer 烧写到开发板上。
系统成功启动后在串口中会看到如下打印,并且板子上的 3 个 led 灯会轮流闪烁:
这个 warning 似乎是因为某个堆栈设置的太小了,等我后面具体看下代码再处理掉。
引领企业级存储发展趋势,华为推出SSD新形态标准
ProtoBricks助乐高迈入数字时代
掌握正确的光纤连接器安装和拆卸方法
小米6正式开售:小米6抢购进行时,首发开卖官网1秒售罄?手一抖没啦
"半导体教父"规划3纳米制程芯片,逆设计专用芯片成趋势
教你怎样在主控芯片GD32V上运行RT-Thread?
关于煤矿安全监控系统的组成结构
影响原油用容积式流量计准确性的因素
OPPOFindX评测 一百分的考卷我要九十九
360度影视公司Jaunt宣布已经收购Teleporter
电磁屏蔽的原理与应用_电磁屏蔽的原理是什么_电磁屏蔽上的应用
“强企稳企·协同发展”交流大会隆重举行 希立仪器喜获“突出贡献奖”
如何鉴别iPhone12有没有绿屏?
变压器风冷控制柜的特点介绍
纪念馆展厅中控系统有哪些功能和优势
SteamVR最新测试版现可直接改变Valve Index头显的刷新率
第一季大陆智能机市场衰退幅度将接近2成
南卡骨传导旗舰全新发布!自研全震指向性技术迎来骨传导巅峰?
基于S3C2440A芯片Linux系统实现MJPEG网络摄像机的搭建
荣耀9i配备5.84寸刘海屏 三种颜色可供选择