Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
国产MCU移植
【国产MCU移植】 Vango V85xx
发布于 2021-09-12 16:53:57 浏览:2281
订阅该版
[tocm] # 国产MCU移植 Vango-V85xx ## 简介 - 公司简介 - 杭州万高科技股份有限公司(简称杭州万高)成立于2006年,是一家为能源互联网研发专用芯片的国家高新技术企业。 - [公司主页](http://www.vangotech.com/) - 产品简介 - 高度集成的 32 位 MCU 列产品,适合于多功能、低功耗的物联网 应用。它集成了Cortex-M0核,256KB FLASH,32KB SRAM,UART/SPI/I2C 接口, LCD,WDT 和 RTC。V85XX 系列支持多种低功耗工作模式,支持 RTC 电源独立供电 - [数据手册](http://www.vangotech.com/uploadpic/162798006058.pdf) - 个人简介 - FuC - FPGA原型验证工程师,曾在杭州万高工作五年,现在是自由职业。 - [CSDN个人博客](https://blog.csdn.net/idk500) - ZhuXW - FPGA原型验证工程师,现在杭州万高工作。 ## 参考资料 - [编译工具手册](https://www.rt-thread.org/document/site/#/development-tools/env/env) - [SCONS脚本说明](https://www.rt-thread.org/document/site/#/development-tools/scons/scons) - [BSP自查链接](https://club.rt-thread.org/ask/article/2993.html) - [极海MCU移植PDF](https://oss-club.rt-thread.org/uploads/20210902/7eda99d04b336b4cc3672aa6e2886b5f.pdf) ## 移植工作 [Push Requests地址](https://gitee.com/rtthread/rt-thread/pulls/331) ### 框架选择 主要问题是已有的BSP代码结构不统一,所以项目前期感到非常困惑 然后网上确实是有很多教程,但是看代码各家又是各家的玩法,就不明白以谁为权威了. - STM32 - STM32已经完全系列化了,而且使用的HAL库,对于我这种不常和库/OS打交道的人来说,感到困惑 - AT91,asm9260t... - 这一系列的bsp都没有放原厂lib的位置,也弃用了 - GD32 最终选用了`GD32x`框架作为起点,因为它仅支持`GCC`,结构简单,便于快速上手。 我们计划跑通一个环境后再逐步移植。 ### 代码匹配 原则 - 所有更改都应当约束在 `bsp/{YOUR_FOLDER}`下 - 尽可能保持和其他工程相同的结构 #### 目录说明 - `application` - 这里放置各种例程 - `drivers` - 这里会将原厂代码抽象成rt-thread标准接口,也是改动最多的地方。 - `libraries` - 这里放置原厂驱动,重点是里面的`SConscript` - 根目录config文件 - 这里主要调整整个工程的编译配置 - 还有`README` #### 修改日志 1. `applications`不动 2. `drivers`下有很多需要修改的地方 1. `board.c`根据自己芯片情况修改`init`,最主要是`时钟`和`定时器` 2. `board.h`中更改`SRAM_SIZE`,`SRAM_END` - 需要注意的是,`__bss_end`关键词不能被`keil`识别,这一段我去`STM32`抄过来的 ```c /* Internal SRAM memory size[Kbytes] <8-64>, Default: 32*/ #define V85XX_SRAM_SIZE 32 #define V85XX_SRAM_END (0x20000000 + V85XX_SRAM_SIZE * 1024) #if defined(__CC_ARM) || defined(__CLANG_ARM) extern int Image$$RW_IRAM1$$ZI$$Limit; #define HEAP_BEGIN ((void *)&Image$$RW_IRAM1$$ZI$$Limit) #elif __ICCARM__ #pragma section="CSTACK" #define HEAP_BEGIN (__segment_end("CSTACK")) #else extern int __bss_end; #define HEAP_BEGIN ((void *)&__bss_end) #endif ``` 3. `drv_xxx.c`需要一行行审过去,因为`V85xx`的IO,UART都不太一样,根据自己芯片的特性完成通用接口的功能 4. `SConscript`根据芯片实际情况修改,我这里没有大改,因为这些对应外设支持还在计划中.现在则应通过`Kconfig`暂时屏蔽而保留`SConscript`中的编译选项. 3. `Libraires`需要简单整理一下 1. `CMSIS`文件夹下是`ARM`的标准文件 1. 全部替换成最新的`Cortex-M0`标准文件. 2. 所有环境通用的`Init`文件放在`Vango/V85xx`文件夹下 3. 最大的头文件`{CHIPNAME}.h`(我这里叫`target.h`)放在`Include`中 2. `VangoV85xx_standard_peripheral`放置原厂外设库代码 3. `SConscript`有很多需要修改的地方,一定要密切关注 - 修改路径,增加引用 ```c # The set of source files associated with this SConscript file. src = Glob('VangoV85xx_standard_peripheral/Source/*.c') src += [cwd + '/CMSIS/Vango/V85xx/Source/system_target.c'] src += [cwd + '/CMSIS/Vango/V85xx/Source/lib_CodeRAM.c'] src += [cwd + '/CMSIS/Vango/V85xx/Source/lib_cortex.c'] src += [cwd + '/CMSIS/Vango/V85xx/Source/lib_LoadNVR.c'] ``` - 修改对应`path` ```c path = [ cwd + '/CMSIS/Vango/V85xx/Include', cwd + '/CMSIS', cwd + '/VangoV85xx_standard_peripheral/Include',] ``` - 修改`CPPDEFINES`等关键词,此处不一一赘述 ```c CPPDEFINES = ['USE_STDPERIPH_DRIVER', 'V85xx','USE_TARGET_DRIVER'] ``` ### 编译脚本修改 - `.ignore_format.yml` - 根据 [参考资料](#) [BSP自查链接] ,需要屏蔽厂商代码的格式检查,这样是为了兼顾不同厂家的不同代码风格.写法如下,很简单一句话 ```yml # files format check exclude path, please follow the instructions below to modify; # If you need to exclude an entire folder, add the folder path in dir_path; # If you need to exclude a file, add the path to the file in file_path. dir_path: - Libraries/VangoV85xx_standard_peripheral ``` - `Kconfig` - 因为`Kconfig`在前期忘记修改,第一次PR被点了十几个问题出来,好吧,虽然不用`make`了还是要改一下.这里将会给到客户选择性开关功能的菜单,所以如果有新的外设移入,不要忘记在此添加索引. - 外设库的移植我还没有全部完成,所以这部分先简单改为自己芯片的命名,就过掉了. - `README.md` - 这个说明文件,一个成熟的开源项目一定要有,模板写的很清楚了,自己改吧 - `rtconfig.h`是自动生成的,不要改动. - `rtconfig.py`是指示`scons`编译的文件,不要大意,最好一行行审查 - `LFLAGS` - `-T`指定到原厂给`gcc`用的`ld`,`MDK5`用的`.sct` - `-Map`更名为`rtthread-v85xx.map`,注意清理之前模板生成的`.map`文件,更改后那个文件就成了孤儿. - `DEVICE` 更换为自己的芯片名字. - `AFLAGS` 更换为`Cortex-M0` - ... 其他改动不一一赘述 ### 编译结果 - scons ``` FuC@DESKTOP-JEK6TI8 D:\Users\FuC\Documents\Codes\gitee\rt-thread\bsp\Vango_V85xx > scons scons: Reading SConscript files ... scons: done reading SConscript files. scons: Building targets ... scons: building associated VariantDir targets: build CC build\drivers\drv_usart.o LINK rtthread-VangoV85xx.elf arm-none-eabi-objcopy -O binary rtthread-VangoV85xx.elf rtthread.bin arm-none-eabi-size rtthread-VangoV85xx.elf text data bss dec hex filename 22444 1424 6020 29888 74c0 rtthread-VangoV85xx.elf scons: done building targets. ``` - keil 编译结果 ``` linking... Program Size: Code=74368 RO-data=7896 RW-data=928 ZI-data=8680 ".\Objects\template.axf" - 0 Error(s), 0 Warning(s). Build Time Elapsed: 00:00:04 ``` ## 总结 规范统一的标准文档和活跃积极的社区是必须的条件 而低耦合的代码可以给移植极大降低门槛. 在移植过程中我得到了 @bernard @yangjie 小师弟 快速专业的反馈,这给了我移植很大的信心. 也感谢朱信伟和之前的同事们,没有他们的基础工作,移植不会这么快完成 最后衷心祝愿国产生态越办越好,强国之路,就在前方。
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
IDK500
这家伙很懒,什么也没写!
文章
1
回答
0
被采纳
0
关注TA
发私信
相关文章
1
官方有没有移植到STC32的计划
2
哪些国产MCU移植了rtthread
3
Studio何时能支持其他国产IC
4
rtthread studio增加APM32国产芯片支持
5
有没有做过cw32的rtthread的移植啊
6
RT-Thread 对 STM32 支持的很好,哪款国产芯片支持的最好呀?
7
如何让RT thread适配一款新的芯片?
8
我想学习怎么移植rtt,需要怎么学习,有什么好的学习路线吗
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
freemodbus
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
rt_mq_消息队列_msg_queue
SFUD
keil_MDK
msh
ulog
C++_cpp
MicroPython
本月问答贡献
踩姑娘的小蘑菇
7
个答案
2
次被采纳
a1012112796
18
个答案
1
次被采纳
红枫
8
个答案
1
次被采纳
Ryan_CW
5
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
本月文章贡献
YZRD
3
篇文章
6
次点赞
catcatbing
3
篇文章
6
次点赞
lizimu
2
篇文章
12
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部