1. 考虑均衡磨损的必要性
对于数据保存而言,常用的非易失性存储器有ROM、FLASH、SD卡、U盘、硬盘等,而对于MCU来说,保存的数据量一般不会太大,常用的也就只剩EEPROM和FLASH了。虽然而考虑到硬件成本、PCB布局等原因,再加上现在的MCU芯片内部FLASH存取速度越来越快,FLASH尺寸越来越大的特点,我们一般会将内部FLASH作为主要存储介质,但FLASH编程只能将bit由1位置0,不能将0位置1,将0置1只能擦除扇区,而扇区往往比编程单位要大很多,哪怕我们只对一个地址写两个字节的数据,也需要擦除整个扇区来完成数据更新,频繁擦写导致flash坏块。
以常用的GD芯片为例,其内部Flash官方寿命是擦写10万次。但是考虑到一些常用的保存场景,比如有将故障诊断的DTC码保存进非易失性存储器中的需求,若按照一天需要保存100次数据到存储器中的频率来算,10万次官方寿命也只够保存2.7年,这是远远不够的。所以我们需要考虑如何提高FLASH的寿命。
2. 均衡磨损原理
磨损均衡算法支持监控以及对不同页面间的擦写操作进行均衡。当不使用损耗均衡算法时,flash页面的磨损速度不均衡。例如,不经常擦写的的页面和经常用来保存数据需要经过擦写的页面相比,经常擦写的页面可能很快达到寿命而损坏,而不经常擦写的页面还能正常使用。均衡磨损算法确保每个参与均衡的页面可以被平等的使用。通过这种均衡磨损操作,把原来只对一个扇区进行磨损的操作分摊到多个扇区,增加了对flash的可擦写次数。
均衡磨损的原理是将一个大数据扇区差分成多个数据帧,轮流写操作数据帧,当所有的数据帧都写过了再擦除重新来过。这样本来我们每次修改都需擦除扇区,优化为现在写满一个扇区再擦除,寿命得到了成倍的提升。这里是对flash单一扇区里的数据帧磨损均衡,同理可以对多个扇区进行扇区磨损均衡。
ST官方已经实现了使用EEPROM 模拟FLASH的均衡磨损方案, AN4894应用手册中有详细的使用介绍。这里在ST的基础上进行开发可以节省开发成本并有一定的可靠性。其特性如下:
- Lightweight implementation and reduced footprint
- Simple API that consists of a few functions to format, initialize, read and write data, and clean up flash memory pages
- User-configured EEPROM size
- Supports 8-bit, 16-bit, and 32-bit variables; supports 96-bit variables for the STM32U5 Series
- Clean-u

文章讨论了在MCU中使用Flash作为数据保存介质时,由于Flash的有限擦写次数导致的问题。介绍了均衡磨损算法的必要性和工作原理,以延长Flash的使用寿命。ST提供了一种基于EEPROM模拟的磨损均衡方案,通过特定的固件包和配置,实现Flash页面的高效管理。该方案涉及多个核心文件,包括状态管理和擦写策略,以确保数据的可靠性和Flash的寿命。

1111

被折叠的 条评论
为什么被折叠?



