MSPM0单片机在指定Flash地址开辟模拟EEPROM
扫描二维码
随时随地手机看文章
在嵌入式系统中,诸如变频器和伺服驱动器等工业应用,乃至CD播放器等众多消费电子产品,都需要保存最近的用户设置,在下次上电后加载使用。如果使用MCU内置Flash,一般擦写次数限制在10k次,无法满足寿命和耐久性要求,所以只能通过外置EEPROM实现。
TI新推出的MSPM0系列MCU支持使用Flash模拟EEPROM,在小容量存储需求的场合能节省外部EEPROM芯片,实现成本控制。MSPM0系列MCU的Flash容量覆盖16KB到128KB,其中低32KB的Flash区域支持10万次擦写,而剩余区域支持1万次擦写,如下图MSPM0G3507规格书所示。所以,在使用Flash模拟EEPROM时,应尽可能选择低32KB区域。
当使用<=32KB Flash容量产品时,这时芯片的全部Flash区域都支持10万次擦写,只需要根据用户代码量以及存储需求确定模拟EEPROM的容量大小,然后放置到Flash的尾部地址即可。
当使用>32KB Flash容量产品时,这时用户代码占用空间可能较大,如果直接选取低32KB尾部地址作为模拟EEPROM,有可能与用户代码地址相冲突而造成误擦写,如下图所示:
这时则需要在代码中向编译器声明EEPROM的位置及长度,使其安排Code及Data时避开用户设置的EEPROM区域。
在CCS IDE with TI Clang中,需要做两步修改:
1. 在.cmd文件中添加Sections的声明如下图:
其中EEPROM 为自定义的section名字,0x00001000为自定义的开始地址。
2. 在需要使用的.c文件中(如c)添加数组定义如下:
Fullscreen
1
const uint32_t EEPROM[4096] __attribute((used)) __attribute((section(".EEPROM")))={0};
以上语句定义了一个名为EEPROM、类型为uint32,长度为4096的const数组,并且存放在上面开辟的.EEPROM Sections,其中添加__attribute((used))可以避免编译器把该数组优化掉。
完成以上修改后,编译器会避开自定义的EEPROM SECTIONS,代码只会存放于.text SECTIONS,这样修改后就可以保证EEPROM地址和长度都落在期望的Lower 32KB区域且不会与代码段冲突。
添加修改并编译后,查看Memory Allocation如下图,可见EEPROM段与.text代码段分开,所定义的EEPROM数组也成功初始化。
最后就可以进行Flash的Erase/Program操作,具体可参考drivelib中的flashctl_program_with_ecc等例程,这里不再赘述。
本文针对MSPM0系列MCU使用Flash模拟EEPROM时需要在Lower 32KB开辟EEPROM专用区域的工况,提出使用SECTIONS分配的方式解决与EEPROM和Code可能重合的问题,配合SDK的Flash操作,可以很容易实现EEPROM在任意Flash区域的开辟。
使用MCU(微控制器单元)内置Flash存储器具有多方面的优势,主要包括以下几点:
1. 紧凑性和集成度
· 高度集成:内置Flash存储器直接集成在MCU内部,与语音处理电路或其他核心电路紧密结合,构成完整的系统。这种设计减少了外部电路的复杂性和所需元件数量,从而减小了整体系统的体积。
· 降低成本:由于减少了外部元件和连接的需求,使用内置Flash的MCU在制造成本上通常更低。
2. 性能与效率
· 快速读取和写入:内置Flash通常能够实现数据的快速读取和写入,这有助于提升系统的整体性能和响应速度。
· 优化程序执行:对于支持XIP(eXecute In Place,芯片内执行)的Flash,应用程序可以直接在Flash内存内运行,无需先拷贝到RAM中,从而减少了程序启动时间和内存占用。
3. 可靠性与稳定性
· 减少外部干扰:内置Flash减少了与外部电路的连接,降低了因外部电磁干扰或其他环境因素导致的数据错误或损坏的风险。
· 保护机制:许多MCU内置的Flash存储器都配备了各种保护机制,如写保护、擦除保护等,以确保数据的安全性和完整性。
4. 应用灵活性
· 多用途存储:除了存储程序代码外,内置Flash的剩余空间还可以被用作数据存储器,如模拟EEPROM(电可擦可编程只读存储器)的功能,用于存储重要数据和关键记录。
· 升级与维护:部分MCU支持通过OTA(Over-The-Air,空中下载技术)进行固件升级,内置Flash为这一功能提供了便利的存储空间。
5. 功耗优势
· 低功耗设计:内置Flash通常具有较低的功耗特性,有助于延长MCU系统的电池寿命或降低整体能耗。
总结
综上所述,使用MCU内置Flash存储器在紧凑性、集成度、性能与效率、可靠性与稳定性、应用灵活性以及功耗方面均表现出显著优势。这些优势使得内置Flash成为许多嵌入式系统和微控制器应用的理想选择。然而,需要注意的是,内置Flash的容量可能相对较小,无法满足所有应用场景的需求。因此,在选择使用内置Flash还是外挂Flash时,需要根据具体的应用场景和需求进行权衡。