0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在RISC-V芯片上运行RT-Thread?

FPGA之家 来源:HackforFun 作者:HackforFun 2021-05-03 11:52 次阅读

去年九月份的时候 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。

a24b5c90-9d13-11eb-8b86-12bb97331649.png

在定制这块板子的时候,陈老大为我们选了 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 toolchainRT-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 振荡时钟工作的,内部振荡时钟的精度要低一些,但是对于不使用以太网的场合,基本是够用的。

所以在系统时钟配置部分需要做如下修改:

a5188736-9d13-11eb-8b86-12bb97331649.png

即把 __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 命令进行编译:

a55c53f8-9d13-11eb-8b86-12bb97331649.png

编译成功会生成 rtthread.bin 文件,参考提到的文档使用 GigaDevice MCU ISP Programmer 烧写到开发板上。

系统成功启动后在串口中会看到如下打印,并且板子上的 3 个 LED 灯会轮流闪烁:

a68a0d7e-9d13-11eb-8b86-12bb97331649.png

这个 warning 似乎是因为某个堆栈设置的太小了,等我后面具体看下代码再处理掉。

原文标题:在 RISC-V 芯片 GD32V 上运行 RT-Thread

文章出处:【微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 芯片
    +关注

    关注

    453

    文章

    50360

    浏览量

    421625
  • RISC
    +关注

    关注

    6

    文章

    461

    浏览量

    83651
  • RT-Thread
    +关注

    关注

    31

    文章

    1271

    浏览量

    39902

原文标题:在 RISC-V 芯片 GD32V 上运行 RT-Thread

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    RT-ThreadCAN实践

    开箱测试RT-Thread官方已完成了对英飞凌XMC7200EVK的移植,通过shell可以看到做好了uart3的console。本文将介绍如何进行RT-ThreadCan移植。接下来我们要完成CAN_FD的驱动移植,并正常启动RT-T
    的头像 发表于 11-13 01:03 813次阅读
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>上</b>CAN实践

    何在RT-thread studio的裸机例程移植freertos?

    何在RT-thread studio的裸机例程移植freertos
    发表于 09-13 06:32

    RT-Thread Safety AUTO成功适配芯来RISC-V车规内核

    NEWSTODAY近日,睿赛德科技(RT-Thread)宣布其通过最高功能安全等级认证的嵌入式实时操作系统RT-ThreadSafetyAUTO成功适配芯来科技的RISC-V处理器NA系列内核。此次
    的头像 发表于 08-30 13:12 401次阅读
    <b class='flag-5'>RT-Thread</b> Safety AUTO成功适配芯来<b class='flag-5'>RISC-V</b>车规内核

    【QEMU系列】不用开发板运行RT-Thread指南-ARM架构

    成为一个门槛。本文将详细介绍如何在QEMU虚拟机的Vexpress-A9平台运行RT-Thread,帮助开发者在没有实际硬件开发板的情况下,轻松体验和学习
    的头像 发表于 08-09 08:35 781次阅读
    【QEMU系列】不用开发板<b class='flag-5'>运行</b><b class='flag-5'>RT-Thread</b>指南-ARM架构

    RT-Thread携手进迭时空:共建RISC-V实时计算生态

    日益高涨。基于新一代精简指令集架构RISC-V开发的高性能计算芯片,可极大提升计算效能,提供更多优质算力。近日,RT-Thread与进迭时空(杭州)科技有限公司宣布
    的头像 发表于 08-06 08:35 387次阅读
    <b class='flag-5'>RT-Thread</b>携手进迭时空:共建<b class='flag-5'>RISC-V</b>实时计算生态

    6月6日杭州站RT-Thread线下workshop,探索RT-Thread混合部署新模式!

    6月6日下午我们将在杭州举办RT-Thread混合部署线下workshop,在瑞芯微RK3568平台实现同时运行RT-Thread和linux,本次workshop邀请到
    的头像 发表于 05-28 08:35 406次阅读
    6月6日杭州站<b class='flag-5'>RT-Thread</b>线下workshop,探索<b class='flag-5'>RT-Thread</b>混合部署新模式!

    2024 RT-Thread 全球技术大会演讲议程发布!

    创造价值!2023RT-Thread全球技术大会汇集了人工智能、RISC-V、嵌入式、物联网、安全、应用、开发环境和工具等多领域的行业专家和RT-Thread社区工
    的头像 发表于 05-16 08:34 479次阅读
    2024 <b class='flag-5'>RT-Thread</b> 全球技术大会演讲议程发布!

    4月25日北京站RT-Thread线下workshop,探索RT-Thread混合部署新模式

    4月25日,下午我们将在北京举办RT-Thread混合部署线下workshop,在瑞芯微RK3568平台实现同时运行RT-Thread和linux,本次workshop邀请到
    的头像 发表于 04-16 08:35 392次阅读
    4月25日北京站<b class='flag-5'>RT-Thread</b>线下workshop,探索<b class='flag-5'>RT-Thread</b>混合部署新模式

    4月10日深圳场RT-Thread线下workshop,探索RT-Thread混合部署新模式!

    4月10日我们将在深圳福田举办RT-Thread混合部署线下workshop,在瑞芯微RK3568平台实现同时运行RT-Thread和linux,本次workshop邀请到
    的头像 发表于 03-27 11:36 772次阅读
    4月10日深圳场<b class='flag-5'>RT-Thread</b>线下workshop,探索<b class='flag-5'>RT-Thread</b>混合部署新模式!

    4月10日深圳场RT-Thread线下workshop,探索RT-Thread混合部署新模式!

    4月10日我们将在深圳福田举办RT-Thread混合部署线下workshop,在瑞芯微RK3568平台实现同时运行RT-Thread和linux,本次workshop邀请到
    的头像 发表于 03-27 08:34 482次阅读
    4月10日深圳场<b class='flag-5'>RT-Thread</b>线下workshop,探索<b class='flag-5'>RT-Thread</b>混合部署新模式!

    何在PSoC62 Evaluation kit开发板运行RT-Thread呢?

    本文主要介绍如何在PSoC62 Evaluation kit开发板运行RT-Thread,如何连接CYW43012 WiFi蓝牙模组,以及如何进行WiFi联网、网络延迟、网络带宽测试
    的头像 发表于 02-27 10:49 941次阅读
    如<b class='flag-5'>何在</b>PSoC62 Evaluation kit开发板<b class='flag-5'>上</b><b class='flag-5'>运行</b><b class='flag-5'>RT-Thread</b>呢?

    ch32v307-r1 BSP按照README说明导入RT-Thread Studio编译报错的原因?怎么解决?

    ^~~~~~~~~~~~ compilation terminated. make: *** [rt-thread/libcpu/risc-v/common/subdir.mk:36
    发表于 02-19 06:05

    RISC-VRT-Thread有什么区别

    RISC-VRT-Thread有什么区别?仅仅是软件层面吗?
    发表于 02-05 22:23

    RT-Thread开发者大会RISC-V分论坛动手实践指南

    明天,RT-Thread开发者大会将在上海临港中心举行。RT-Thread开发者大会是嵌入式开发者的年度盛会,为开发者提供交流和学习的平台。2023年RT-Thread开发者大会将围绕AIoT的发展
    的头像 发表于 12-22 18:15 848次阅读
    <b class='flag-5'>RT-Thread</b>开发者大会<b class='flag-5'>RISC-V</b>分论坛动手实践指南

    使用SystemView工具分析瑞萨RA6M4芯片RT-Thread运行情况

    使用SystemView工具分析瑞萨RA6M4芯片RT-Thread运行情况
    的头像 发表于 12-11 17:23 544次阅读
    使用SystemView工具分析瑞萨RA6M4<b class='flag-5'>芯片</b><b class='flag-5'>上</b><b class='flag-5'>RT-Thread</b>的<b class='flag-5'>运行</b>情况