提高MSP430G系列单片机的Flash 擦写寿命的方法

  作者:angelazhang 时间:2015-06-26


采用这种方式,用户不知道数据刷新的频率。


下面的图例以采用两个页模拟EEPROM 的应用方式为例进行描述。为了方便获取模拟EEPROM数据和更新数据内容,每个存储变量元素都在Flash 里定义了一个操作单元,在该操作单元中对每个存储变量元素都分配一个虚拟操作地址,即一个EEPROM 操作单元包含一个虚拟地址单元和一个数据单元。当需要修改数据单元内容时,新的数据内容和之前分配的虚拟地址一同写入一个新的模拟EEPROM存储器单元中,同时返回最新修改的数据内容。EEPROM存储单元格式描述如图二。



使用虚拟地址加数据的方案总结如下。



2.2 划分子页方案

在Flash 中划分出至少2 个页(Page)用作模拟EEPROM,根据应用需求将需写入EEPROM 进行保存的变量数据划分成一个定长的数组(子页),例如16 个字节或者32 字节,将页划分成若干子页后,需对Flash 中的所有子页按照地址顺序进行逐次编号。每个子页的第一个字节通常用来指示该子页的状态,子页状态可以为:空、已写入或者失效。


在芯片上电初始化时,首先查找出第一个尚未写入数据的子页,并进行标识,在进行写EEPROM操作时,应用程序需将待写入EEPROM 子页的所有数据按照事先约定好的顺序整理好,再一次性将所有变量数据写入空的子页中,最后将模拟EEPROM 的操作指针指向下一个空闲的子页,等待下一次写入。待将一个页的数据写满后,再进行一次擦除操作。需要处理好指向子页的指针的跳转。


每个页存在3 种可能状态:

擦除态:该页是空的。

已写满数据状态:该页已经写满数据。

有效页状态:该页包含着有效数据并且该页尚未写满,仍可向子页写入数据。

图三介绍了使用子页的方式实现Flash 模拟EEPROM的数据处理方法。



2.2.1 软件描述

在软件实现上,为了便于软件处理,建议定义一些关键宏定义和结构体,指定Flash 模拟EEPROM 的起始、结束地址、页的大小、子页的大小、每个页的子页数目等参数,同时将需要操作的参数封装起来,便于软件操作和管理,不建议定义许多离散的标志变量。


在软件操作上,Flash 模拟EEPROM模块需要提供几个API 接口给应用程序调用。



void FlashErase(u8 seg_sn);


2.2.2 软件流程图

软件启动后,初始化模拟EEPROM流程图描述如下。

调用API,向模拟EEPROM 写入数据的软件流程如图五所示。在软件处理中,要特别注意目标指针的切换和保证写入数据的正确性,在代码空间允许的情况下,可以增加一些校验算法来保证。



采用划分子页的方案总结如下。



2.3 两种方案的对比分析

两种方案的对比分析见表二。

表二 两种方案的对比分析


虚拟地址加数据的方案

划分子页的方案

优点

对所有存储变量进行了虚拟地址预分配,完全模拟了EEPROM 的地址加变量数据的访问方式,易于理解并且操作简便。

对所有存储变量进行了封装,通过由模拟EEPROM 驱动模块提供的API 接口进行整体操作,操作简便。

存储空间利用率高。

缺点



由于为每个存储变量分配了虚拟地址,在有限Flash 资源前提下,存储空间利用率低,理论利用率低于50%。

每次数据保存,都需要对整个子页进行写操作,效率较低。

在每次将数据保存到模拟EEPROM 之前,需要应用程序将待写入的变量数据结构体进行整理,增加软件开销。

总结

两种方案都可以提高Flash 的擦写寿命,用户可以结合自己的应用设计进行方案选择;

在有限资源前提下,如需要更大容量的数据存储空间,建议选择划分子页的方式;

在实际应用中,可以根据不同的需求,将存储变量进行分类:将可能频繁变化和需要保存的非易失性数据存储到Flash 模拟EEPROM(code Flash)中,将不会经常改变的非易失性数据存储到信息Flash(information Flash)中,从而增加Flash 模拟EEPROM模块的利用率,更加灵活的实现数据保存。


3. 实际的嵌入式应用

根据软件需要,建议采用字节(8bit)做为操作的最小粒度,适用性会更广泛。


3.1 Flash 存储器擦写寿命的提升

对于MSP430G 系列的Flash 存储器,可以保证至少10000 次的编程和擦除寿命。如图六所示。

图六 MSP430G 系列单片机Flash 编程和擦除寿命


采用划分小页结合至少分配2 个大页的操作方式,则可以大大增加Flash 模拟EEPROM 的擦写寿命。例如,对于MSP430G 系列单片机,如果将每个小页的尺寸划分为16 字节,采用2 个大页(每页512 字节)作为模拟EEPROM 使用,则可以提供64 个操作子页((512/16)x2=64),可以保证至少640000 次的擦写寿命。


3.2 掉电时的异常处理

如果正在进行Flash 数据存储时发生掉电,数据可能会保存不成功,存在异常。为了增强健壮性,在软件处理上,需要考虑设备异常掉电等可能会导致Flash 擦写失败的情况。

在软件处理中,当成功保存Flash 数据后,再写入该子页的状态标志。单片机上电后,用户程序将查找最后一次写入的子页,再将该子页的数据内容并恢复到内存中的数据结构中。


4. 系统可靠性设计

4.1 时钟源的选择

由于驱动Flash 的时钟源(ACLK、MCLK、SMCLK)和时钟频率可以设定,为了保证在将数据写入模拟EEPROM时的可靠性,建议在将Flash 的时钟频率降低后,再对其进行操作。例如将Flash 的时钟频率降低到1MHz 后,进行写入操作。需要注意,在降低了时钟频率后,若此时钟源也是定时器(Timer)的时钟源,则可能会影响到定时器的定时准确性,需要软件上做好处理。


4.2 代码在RAM中运行

由于向Flash 写入数据操作是通过执行Flash 中程序代码,对Flash 进行擦除和编程操作。由于对Flash 的编程需要mcu 内部执行一个升压操作,所以如果有足够的内存空间,建议将编程、擦除等关键代码拷贝到RAM中运行,可以使用关键字__ramfunc 指定,如下图七所示。

图七 使用关键字__ramfunc 将程序指定到Ram 中运行


5. 总结

本文从软件方面,以及安全性方面探讨了使用MSP430G 系列单片机在使用Flash 模拟EEPROM方面的应用,提供了两种不同的方式供选择。两种方式都可以大幅度提高模拟EEPROM的编写、擦除寿命,并且满足高可靠性的应用设计,用户可以结合具体的应用进行选择。


参考文档

1. MSP430x2xx family user’s guide (SLAU144)

2. MSP430G2x53 datasheet (SLAS735)


关键词: MSP430G 单片机 德州仪器 Flas

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关电路