微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 提高MSP430G 系列单片机的Flash 擦写寿命的方法

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

时间:10-15 来源:互联网 点击:

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

2.2 划分子页方案

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

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

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

擦除态:该页是空的。

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

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

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

图三 使用子页的方式模拟EEPROM 存储单元

2.2.1 软件描述

在软件实现上,为了便于软件处理,建议定义一些关键宏定义和结构体,指定 Flash 模拟

EEPROM 的起始、结束地址、页的大小、子页的大小、每个页的子页数目等参数,同时将需要操作的参数封装起来,便于软件操作和管理,不建议定义许多离散的标志变量。

搜狗截图20140926163610.jpg

在软件操作上,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 内容。在将数据写入模拟EEPROM 之前,程序员需要按照约定的数据格式,在内存中将所有的目标存储变量进行整理。

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

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

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

2.3 两种方案的对比分析

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


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)和时钟频率可以设定,为了保证

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top