MCU 选型判断依据总结

举报
aiot_bigbear 发表于 2022/09/25 01:36:10 2022/09/25
【摘要】 一.工程师选型的局限性 1)硬件工程师 对成本敏感,但缺少软件概念,大部分处于连线水平,无法知晓外设链接与MCU内部资源的配合; 缺少产品软件所需要的RAM和FLASH信息, 硬件工程师根据经验或者其他类...

一.工程师选型的局限性
1)硬件工程师
对成本敏感,但缺少软件概念,大部分处于连线水平,无法知晓外设链接与MCU内部资源的配合;
缺少产品软件所需要的RAM和FLASH信息,
硬件工程师根据经验或者其他类似项目使用过该型号的MCU,主观选择好已经用过的MCU,但是项目变化,原先配置的MCU FLASH空间可能不足,内存可能不足会导致项目风险大大增加;
2)软件工程师
不熟悉硬件外部电路原理,对成本不敏感,需要更理解底层的工程师如驱动工程师来解决。喜欢大FALSH 大RAM 给编程预留足够余地。

如何判断是否FLASH空间足够,内存足够

3)故 懂软件与硬件的系统工程师,在此可以发挥出重要价值。
这就需要软件开发工程师根据当前项目需求情况以及后续项目升级需求上考虑选择,硬件工程师需要更多听取软件的意见来选择型号!
二.NXP 低功耗MCU选型案例
涉及硬件MCU的项目选型中,MCU 的FLASH空间,SRAM空间大小对软件涉及影响非常之大,freescale mcu kl03系列单片机有多种PIN TO PIN型号,因此如何选择一款符合项目要求,成本又低的MCU非常的重要。
除了PIN脚,外设符合项目要求外, 也即是要FLASH足够大,内存SRAM足够大,但这是跟成本矛盾的。

问题1:硬件工程师缺乏软件知识,根据经验或者其他类似项目使用过该型号的MCU,主观选择好已经用过的MCU,但是项目变化,原先配置的MCU FLASH空间可能不足,内存可能不足会导致项目风险大大增加;
问题2:如何判断是否FLASH空间足够,内存足够,这就需要软件开发工程师根据当前项目需求情况以及后续项目升级需求上考虑选择,硬件工程师需要更多听取软件的意见来选择型号!
上述两个问题是实际项目中遇到

2.1重要概念
固件:这个概念在不同的系统中有不同的含义,不管如何,程序BIN文件也是固件,本文的固件就是编译软件编译完成后的完整BIN
PIN TO PIN:管脚兼容
Code为程序代码部分
RO-data 表示 程序定义的常量const temp;
RW-data 表示 已初始化的全局变量
ZI-data 表示 未初始化的全局变量

MCU 单片机运行时主要存在两个区域,只读的代码code以及const字符串数据,存放在FLASH空间中,可读写的全局变量,静态变量,局部变量等均分布在SRAM中

NXP是新组建的公司收购了freescale,本文描述的就是freescale mcu kl03系列,KL03系列有以下型号,内存SRAM固定2KB,FLASH不同型号有区别
在这里插入图片描述

MCU 单片机运行时主要存在两个区域,只读的代码code以及const字符串数据,存放在FLASH空间中,可读写的全局变量,静态变量,局部变量等均分布在SRAM中.程序启动初始化时RW-data等从flash拷贝到SRAM,执行的程序等还在ROM(FLASH)中执行.

2.2 具体执行方法
1)对即将选择的MCU型号,详细了解其他项目使用该MCU 的 情况,如FLASH 总空间大小,使用后剩余空间大小,内存 总空间大小,使用后剩余空间大小;

2)对硬件工程师而言,针对新项目,及时与软件沟通了解是否符合要求,避免主管臆断;

3)软件工程师给出初步flash sram空间估计,提出选型,反馈硬件,控制硬件风险;

2.3 MCU KEIL开发软件的flash 与sram总体空间估计

kl03使用KEIL开发,配置好相应的型号配置后,需要读懂编译输出信息。

如KEIL 编译输出:

compiling flash.c…
compiling flash_ram.c…
linking…
.\obj\project.sct(12): warning: L6329W: Pattern flash_ram.o(RO) only matches removed unused sections.
Program Size: Code=19432 RO-data=1892 RW-data=568 ZI-data=1144
Finished: 0 information, 1 warning and 0 error messages.
FromELF: creating hex file…
After Build - User command #1: c:\hex2bin.exe .\obj\project.hex
hex2bin v1.0.1, Copyright © 1999 Jacques Pelletier
Lowest address = 00000000
Highest address = 0000546B
“.\obj\project.axf” - 0 Error(s), 8 Warning(s).
Build Time Elapsed: 00:00:07

根据获得知识,Code=19432 RO-data=1892存放FLASH中,影响FLASH空间大小
RW-data=568 ZI-data=1144 存放SRAM中,影响SRAM空间大小

本次编译输出,FLASH需要大小=19432+1892=21324B ,16KB=16*2014=16384,可见16KB 的FLASH型号不符合要求,需要选择32KB,此时FLASH空间还有足够多的裕度;

本次编译输出,SRAM需要大小=568+1144=1712,2KB=2048,可见2KB SRAM 符合要求,此时SRAM空间剩余,但并不多,后续代码开发需要严格控制代码变量的定义,避免空间不足;

此时,就需要更换新的FLASH型号了,从16KB 改为32KB。
2.4.MCU flash sram单文件空间估计

上述是系统文件总体的估计,是个总的概念,如果需要详细了解每个文件Code RO-data RW-data ZI-data的大小,是否有方法呢?

答案是肯定的,打开编译生成的map文件 ,生成的map文件位于KEIL工程的list文件夹下,即工程目录\Project\list\project.map

在这个文件中存在每个.c文件统计Code RO-data RW-data ZI-data的大小,在当前SRAM空间紧张的情况下,这样可以针对性了解那个部分的变量定义占据了大空间,便于修改。

在这里插入图片描述
2.5.判断函数以及变量在ram ,flash(rom)哪个中存放

    unsigned int*pfun1= (unsigned int*)Mcu_Init_Fifo;
	sys_printf("Mcu_Init_Fifo  0x%08x\n",pfun1);
	sys_printf("pfun1  0x%08x\n",&pfun1);

  
 
  • 1
  • 2
  • 3

打印输出:
Mcu_Init_Fifo 0x00001865 //rom–flash ,这个地址从手册看出是FLASH的空间
pfun1 0x200004a8 //sram ,这个地址从手册看出是SRAM的空间
三。总结
提出确认MCU选型 的判断FLASH SRAM 空间的方法,有效确认当前空间与剩余空间,,便于统筹考虑,全盘需求;

文章来源: blog.csdn.net,作者:悟空胆好小,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/xushx_bigbear/article/details/123364107

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。