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

发布者:jiaohe1最新更新时间:2015-04-03 来源: eechina关键字:MSP430G系列  单片机  Flash  擦写寿命 手机看文章 扫描二维码
随时随地手机看文章
摘要


在嵌入式设计中,许多应用设计都需要使用EEPROM 存储非易失性数据,由于成本原因,某些单片机在芯片内部并没有集成EEPROM。MSP430G 系列处理器是TI 推出的低成本16 位处理器,在MSP430G 系列单片机中并不具备EEPROM。为了存储非易失性数据,MSP430G 系列处理器在芯片内部划分出了256 字节的Flash 空间作为信息Flash,可用于存储非易失性数据,但是由于Flash 与EEPROM 在擦写寿命上存在一定差距,所以在实际应用中,这种应用方式并不能够满足所有客户的需求。本应用笔记介绍了使用代码区域Flash 来模拟EEPROM,通过一定的软件处理算法,可以大大增加数据存储周期的一种方法。本文给出了实现上述功能的软件流程。

1. 嵌入式Flash 存储介质与EEPROM 的主要特性对比

电可擦除和编程只读存储器(EEPROM)是在绝大多数嵌入式应用中都会使用到的用于保存非易失性数据的关键器件,用于在程序运行期间保存数据。Flash 闪存(Flash Memory,简称为"Flash")是一种非易失性( Non-Volatile )存储器,广泛应用于各种嵌入式处理器中,用于存储程序代码。

由于硬件成本原因,在许多嵌入式处理器中并没有集成EEPROM 模块,通常我们可以采用在片内Flash 存储器中保存非易失性数据的应用方式来达到使用要求。对一些普通的应用场合,这种使用方式可以满足要求。

表一 EEPROM与Flash 对比分析

特性

EEPROM

MSP430G 系列Flash

写时间

几个ms

随机字节写:5 到10 ms

页写: 100μs每字 (5 to 10 ms 每页 )

字节写:30 个Flash 操作时钟

周期,典型数据70us

擦除时间

N/A

页擦除:4819 个Flash 操作时

钟周期,典型数据10ms

全部擦除:10593 个Flash 操作

时钟周期,典型数据20ms

擦写方法

一旦启动写动作,不依赖CPU,

但需要持续的电源供给

需要芯片内部执行升压操作

读取访问方式

连续方式: 大概100μs

随机字方式: 大概92μs

页方式: 22.5μs 每字节

N/A

擦除次数

10 万次以上,典型参数100 万次

1 万次以上,典型参数10 万次


1.1 写访问时间

由于EEPROM 和Flash 的工作特性不同,所以写访问时间也不相同。Flash 具有更短的写访问时间,所以更适用于对存储速度有要求的场合。

1.2 写方法

外置EEPROM和采用Flash 模拟EEPROM的最大不同之处在于写的方法。

EEPROM:对EEPROM 的写操作不需要额外的操作,只需要提供电源供给;但是一旦启动写操作流程后,写操作不能够被打断。所以需要外接电容器等措施来保证在芯片掉电时能够维持供电,保证完成数据操作。

Flash 模拟EEPROM:当芯片上电后,写操作可以被电源掉电和芯片复位打断。和EEPROM 相比,需要应用设计者增加相关的处理来应对可能存在的异常。

1.3 擦写时间

EEPROM和采用Flash 模拟EEPROM在擦除时间上存在很大的差异。

与Flash 不同,EEPROM 在进行写操作之前不要擦除操作。由于Flash 需要几个毫秒时间进行擦除操作,所以如果在进行擦除操作的过程中出现电源掉电的情况,需要软件做相关的保护处理。为了设计一个健壮的Flash 存储器的管理软件,需要深入的了解和掌握Flash 存储器的擦除过程特性。

2. 增加Flash 模拟EEPROM 擦写寿命的方法

可以根据用户的需求采用不同的方法实现Flash 存储器模拟EEPROM。

2.1 虚拟地址加数据方案

通常需要两个页以上的Flash 空间来模拟EEPROM。上电后,初始化代码先查找出有效页,同时将另外一个页初始化为擦除状况,以提供字节写的能力,并用作备份和随时准备执行写入操作。需要存储EEPROM 的变量数据首先写入有效页,当有效页写满后,需将所有数据的最后状态保存到备份页,并切换到备份页进行操作。每一页的第一个字节通常用来指示该页的状态。

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

擦除态:该页是空的。

已写满数据状态:该页已经写满数据,准备切换到下一个页进行操作。

有效页状态:该页包含着有效数据并且标示状态尚未改变,所有的有效数据全部拷贝到了已经擦除的页。

下图以采用两个页模拟EEPROM的方式为例,描述了页状态字的在页0 和页1 之间的切换过程。

9.jpg



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

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

8.jpg 

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

• 为每一个目标存储变量分配一个虚拟地址,该虚拟地址需一同存入Flash 中。当读取存储变量内容时,需根据该变量的虚拟地址搜索虚拟EEPROM并返回最后更新的内容。

• 在软件处理上,需要记录下一次写入的物理目的地址;在每一次执行写入操作后,根据EEPROM存储单元大小(操作粒度),将目的操作指针自动累加。

• 当一个页(Page)写满后,需要将所有变量的EEPROM数据拷贝到下一个页,再执行该页的擦除操作。

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

2.2 划分子页方案

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

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

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

擦除态:该页是空的。

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

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

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

7.jpg 

2.2.1 软件描述

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

6.gif 

5.gif 

在软件操作上,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流程图描述如下。

4.jpg 

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

3.jpg 

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

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

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

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

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

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

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 次的编程和擦除寿命。如图六所示。

2.gif



图六 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.gif 

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

5. 总结

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

参考文档

1. MSP430x2xx family user’s guide (SLAU144)
2. MSP430G2x53 datasheet (SLAS735)
关键字:MSP430G系列  单片机  Flash  擦写寿命 引用地址:提高MSP430G系列单片机的Flash 擦写寿命的方法

上一篇:在MCU系统中如何利用ADC技术进行数据采集
下一篇:NEC单片机入门及使用

推荐阅读最新更新时间:2024-03-16 13:57

C语言在单片机开发中的优势
汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效率高。但是不同的CPU,其汇编语言可能有所差异,所以不易移植。 对于目前普遍使用的RISC架构的8bit MCU来说,其内部ROM、RAM、STACK等资源都有限,如果使用C语言编写,一条C语言指令编译后,会变成很多条机器码,很容易出现ROM空间不够、堆栈溢出等问题。而且一些单片机厂家也不一定能提供C编译器。而汇编语言,一条指令就对应一个机器码,每一步执行什么动作都很清楚,并且程序大小和堆栈调用情况都容易控制,调试起来也比较方便。所以在资源较少单片机开发中,我们还是建议采用汇编语言比较好。 而C语言是一种编译型程序设
[单片机]
STC单片机 IAP(EEPROM)的使用
STC89C51、52内部都自带有2K字节的EEPROM,54、55和58都自带有16K字节的EEPROM,STC单片机是利用IAP技术实现的EEPROM,内部Flash擦写次数可达100,000 次以上,先来介绍下ISP与IAP的区别和特点。 知识点:ISP与IAP介绍 ISP:In System Programable 是指在系统编程,通俗的讲,就是片子已经焊板子上,不用取下,就可以简单而方便地对其进行编程。比如我们通过电脑给STC单片机下载程序,或给AT89S51单片机下载程序,这就是利用了ISP技术。 IAP:In Application Programable 是指在应用编程,就是片子提供一系列的机制(硬件/软件上的
[单片机]
基于ATMEL AVR单片机的居家安全卫士系统实现
简介:以“方便、舒适、享受、超前、舒心”为主题,我们设计了以下几个模块:“非接触式IC刷卡门禁模块”、“防盗防火报警模块”、“安全控电模块”、“空气质量检测模块”、“温湿度检测模块”、“GSM无线通信模块”、“时间控制模块”、“可扩展模块”。整个系统基本上能解决日常生活中的问题,解决家庭隐患,每个系统又有着细节处的功能。 1.设计方案目标: 智能居家安全卫士系统是利用先进的计算机技术、综合布线技术、依照人体工程学原理,融合个性需求,将与家居生活有关的各个子系统有机地结合在一起,实现“以人为本”的全新家居生活体验。高性能ATMEL最新MCU及Xmega和UC3系列产品是基于设计出一款高处理性能和低功耗功能的内核而开发的产品。
[单片机]
基于ATMEL AVR<font color='red'>单片机</font>的居家安全卫士系统实现
AVR单片机制被动式红外线报警器实验
该报警器由红外线发射、接收、蜂鸣器和LED指示灯组成。正常情况下,绿色的LED常烁,表示监控区域正常。一旦监控区域有人闯入,绿色LED熄灭,红色的LED快速闪烁,同时蜂鸣器立即报警。 实验器材 需要准备的器材:Atmega8、红色LED一只、绿色LED一只、万能实验板一块、5V电源、电阻、TTL0038或者其他类似38KHZ的红外接收头、5V长鸣型蜂鸣器。 线路图: 实验电路图及工作原理 该电路工作原理非常简单,Atmega8的PD0端口输出经过调制的38KHZ的方波信号,然后经Q2驱动红外线发射管LED0发出红外线信号。TL0038是集红外线信号接收放大为一体的接收器。其中心接收频率为38KZH,输出为TTL电平,平时输
[单片机]
AVR<font color='red'>单片机</font>制被动式红外线报警器实验
恩智浦:与ARM共拼32位MCU江山
ARM的闯入,似乎打破了MCU稳步的发展路线,而恩智浦与ARM的某种特殊情节,又使得恩智浦自出征32位MCU起始之时,就一直情有独钟的全套配备着ARM核的武器。2009年2月ARM发布了号称最小型、最低功耗的Cortex-M0处理器,在随后的3月,恩智浦就宣布推出了世界首款功能性ARM Cortex-M0硅芯片,作为第一家Cortex-M0处理器授权合作方。 在32位单片机的纷争中,这位力挺ARM核的强者是否能够一路走好?近日,EEWORLD就持续发展的32位MCU市场在全球特别是在中国的发展状况,对恩智浦半导体大中华区微控制器产品市场经理郭志锐进行了采访。 恩智浦半导体大中华区微控制器产品市场经理 郭志锐
[EEWORLD独家]
恩智浦:与ARM共拼32位<font color='red'>MCU</font>江山
基于单片机的LED数字大屏幕显示系统
  1 引言   LED显示屏是八十年代后期在全球迅速发展起来的新型信息显示媒体,应用越来越广泛。ATMEGA16L单片机是一款基于AVRRISC的、低功耗CMOS8位单片机,具有16K字节的自编程FLASH,512字节的EEPROM,1K字节的SRAM,通过AVR单片机来控制LED的显示,结构简单,应用灵活,并且易于扩展。   2 系统设计原理   2.1 编码设计   编码设计有两个过程:字库提取以及字模编码转换。字库的提取涉及到的两个字库文件,一个为ASC16,专门存放ASCII编码;另一个为HZK16,专门存放汉字字库编码。要提取字库,首先要对它进行初始化,即打开字库。然后根据一个字符提取它相应的编码。首先取出字
[电源管理]
基于<font color='red'>单片机</font>的LED数字大屏幕显示系统
51单片机条件转移指令
条件转移指令是指在满足一定条件时进行相对转移。 判A内容是否为0转移指令 JZ rel JNZ rel 第一指令的功能是:如果(A)=0,则转移,否则顺序执行(执行本指令的下一条指令)。转移到什么地方去呢?如果按照传统的方法,就要算偏移量,很麻烦,好在现在我们可以借助于机器汇编了。因此这第指令我们可以这样理解:JZ 标号。即转移到标号处。下面举一例说明: MOV A,R0 JZ L1 MOV R1,#00H AJMP L2 L1: MOV R1,#0FFH L2: SJMP L2 END 在执行上面这段程序前如果R0中的值是0的话,就转移到L1执行,因此最终的执行结果是R1中的值为0FFH。而如果R0中的值
[单片机]
51<font color='red'>单片机</font>条件转移指令
PIC单片机之中断程序
什么是中断程序呢? 形象的生活比喻就比如你现在这在看我的文章,突然你的朋友喊你一起去烤地瓜,这时候你就中断了看文章和朋友烤地瓜去了,烤完地瓜之后你又回来看文章。烤地瓜这件事就好比中断程序,他中断了你看文章这件事。在程序方面来说 当CPU在执行一个程序的时候,突然产生了中断事件CPU就去执行中断程序了,当执行完成后CPU又回来执行原先的程序。 中断事件 什么是中断事件,就是引起中断的事件。对于单片机来说这些事件是多种多样的。比如 说一个按键按下,一定的时间到了,一串数据发送完毕,或接收完一个数据。 讲到中断不得不讲讲和中断相对的 查询。其实不管是按键按下 还是 时间到,还是数据发送完毕,这些事实上都可以用查询的方式办到。比如
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • Linux内核移植
    实验步骤:(1)准备工作(2)修改顶层Makefile(3)修改falsh 分区(4)配置编译内核下面以Linux2 6 30 4内核移植到gec2440为例:一、准备 ...
  • S5PV210 PWM定时器
    第一节 S5PV210的PWM定时器S5PV210共有5个32bit的PWM定时器,其中定时器0、1、2、3有PWM功能,定时器4没有输出引脚。PWM定时器使用PCLK_PS ...
  • S5PV210 NAND Flash
    NAND Flash关于NAND FlashS5PV210的NAND Flash控制器有如下特点:1) 支持512byte,2k,4k,8k的页大小2) 通过各种软件模式来进行NAND Fl ...
  • S5PV210串口
    串口设置之输入输出字符S5PV210 UART相关说明 通用异步收发器简称UART,即UNIVERSAL ASYNCHRONOUS RECEIVER AND TRANSMITTER,它用来 ...
  • S5PV210按键控制LED
    原理图如图所示:查询用户手册得到:程序例子:(完整代码见“代码下载链接”)1、轮询的方式查询按键事件 *main c* 核心代码如下:while(1 ...
  • S5PV210控制蜂鸣器
  • S5PV210的启动过程
  • S5PV210点亮LED
  • S5PV210启动过程详解
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved