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

时间:2012-12-04来源:网络

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

擦除态:该页是空的。

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

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

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

2.2.1 软件描述

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

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

• 通过typedef 关键字定义设备类型,typedef unsigned char u8;

• ChkFstPowerOnInfo()用于检测芯片是否为第一次上电并初始化EEPROM 参数到内存,原型如下。

Void ChkFstPowerOnInfo(void);

• FlashWrite()用于写Flash,传递的形参包括指向待写入数据的指针,待写入数据在子页中的起始字节编号,写入数据的长度,原型如下。

void FlashWrite( u8 *array, u8 startNum, u8 length );

• FlashErase()用于擦除Flash,传递的形参是子页的编号,在擦除函数中需要根据子页的编号判断是否需要执行页的擦除操作,原型如下。

void FlashErase(u8 seg_sn);

2.2.2 软件流程图

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

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

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

• 每次写入模拟EEPROM的数据长度为定长,即为子页的长度。

• 软件需要定义一个存储变量结构体,用于刷新和同步模拟EEPROM内容。在将数据写入模拟EEPROM之前,程序员需要按照约定的数据格式,在内存中将所有的目标存储变量进行整理。

• 在软件处理上,需要计算当前写入和下一次写入的物理地址;在每一次执行写入操作后,根据子页长度大小,将指向子页的目的操作指针自动累加。

• 待一个页(Page)写满后,需要将最后更新的模拟EEPROM数据拷贝到下一个页,再对写满页执行一次擦除操作。

• 在嵌入式软件处理上需加入合适的校验机制,保证写入数据的正确性并监测用于模拟EEPROM功能的Flash 子页是否已经失效。

2.3 两种方案的对比分析

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

表二 两种方案的对比分析

表二 两种方案的对比分析

3. 实际的嵌入式应用

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

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

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

图六 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 指定,如下图七所示。

1 2 3

关键词: 擦写 寿命 方法 Flash 单片机 MSP430G 系列 提高

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

或用微信扫描左侧二维码

相关文章

查看电脑版